【问题标题】:Are there security measures against udp hole punching? [closed]是否有针对 udp 打孔的安全措施? [关闭]
【发布时间】:2015-05-01 15:59:33
【问题描述】:

我想在两个对等方之间建立 UDP 通信,比如 Alice 和 Bob。 Alice 位于端口受限的锥形 NAT 后面(因此即使目标更改,相同的内部端口也会映射到相同的外部端口),而 Bob 位于对称 NAT 后面(这意味着每次新的外部端口都会更改)目的地的选择与内部端口无关,因此使外部端口不可预测)。我中间有一个服务器,我想打一个 UDP 打孔。

我实施了以下策略:

  • Bob 打开大量端口,然后从所有端口向 Alice 的外部端口发送一个数据包(他是否通过服务器知道)。
  • Alice 在随机端口向 Bob 的 NAT 发送数据包,直到建立连接。

手头有两个这种类型的 NAT,我做了一些实验。 Bob 开放 32 个端口,Alice 每 0.1 秒发送 64 个数据包。连接通常在 1 或 2 秒内建立,非常适合我的需求。

但是,我想知道我是否会遇到一些严格的 NAT 路由器或防火墙的问题。例如,路由器不允许内部对等方打开 32 个端口是否会发生?或者(这听起来更有可能)是否会发生这样的情况:路由器看到大量从随机端口传入的数据包被丢弃,会将 IP 列入黑名单并在一段时间内丢弃所有数据包?我读到有时这可能发生在 DoS 攻击的情况下,但我的数据包速率比 DoS 攻击轻 4 到 6 个数量级。

我问的是合理的网络配置:我很确定原则上可以设置防火墙以这种方式运行。我将主要针对位于标准家庭连接之后的用户,因此我的主要目标是使用 NAT 的普通互联网提供商。

【问题讨论】:

    标签: networking udp firewall nat hole-punching


    【解决方案1】:

    这是一个有趣的问题。

    首先,我不确定是否有人知道您正在寻找的确切答案。不同的网络使用不同的设备和不同的配置。两个 ISP 可以为他们的路由器、防火墙、NAT、入侵检测设备、DPI 设备等使用十个不同的供应商;更不用说所有这些设备的可能配置数量了。

    虽然商业和企业网络已经够糟糕了,但家庭网络更糟糕。这里有更多的供应商销售调制解调器、NAT 盒和各种影响网络连接的软件(如防火墙和防病毒软件)。所有这些都掌握在不精通技术的用户手中,他们将其保留为默认设置,或更糟

    此外,在家庭网络和商业网络中,可能都有多层 NAT。我知道一家公司的每个实验室都有一个 NAT(将其与其他实验室和研发网络隔离)。然后,每个实验室都连接到研发 NAT(以将其与其他部门隔离),后者又连接到公司范围的 NAT,顺便说一下,该 NAT 也有严密的防火墙。再加上一个可能的 ISP 级 (carrier grade) NAT,您将看到多达 4 层 NAT。希望这是一个极端的例子,但现在两层 NAT 很常见,家庭 NAT 和运营商级 NAT。

    鉴于此,随机网络认为这种行为可疑并加以限制的可能性有多大?坦率地说,我不确定,我认为其他人也没有高度确定性。

    尽管如此,我有根据的猜测是,通信设备(NAT、路由器等)的合理默认配置不应阻止此类行为。毕竟,许多应用程序打开了几个端口;更不用说 NAT 无法知道发送此流量的 IP 本身并不是一个 NAT 设备,后面有几十台计算机 - 每台计算机都有几个开放端口。

    我也猜想,只要 UDP 本身没有被阻止,并且允许使用各种端口,简单的防火墙应该可以使用它。然而,试图阻止端口扫描和反 DDoS 设备的防火墙可能会带来问题,因为这种流量可能看起来很可疑,因此它可能取决于此类设备和软件的配置/实施细节。所以不幸的是,要知道你的策略在现实世界中的表现如何,唯一的方法就是在各种不同的网络上进行尝试。

    其次,我想对你的打孔策略说几句话。如果 Alice 和 Bob 都有一个共享服务器,并且 Alice 在一个锥形 NAT 后面,我看不出你的策略有什么意义。锥形 NAT 是最容易克服的 NAT。如果您希望 Alice 能够连接到 Bob(这很棘手,因为他在对称 NAT 后面),您真正需要做的就是让 Bob 在 Alice 的请求下连接到 Alice。

    为此,Alice 和 Bob 都应始终与服务器建立持久的 TCP 或 UDP 连接。连接在大多数情况下不应携带任何数据,而应偶尔保持活动状态。

    当 Alice 想要连接到 Bob 时,它只需要打开一个端口(比如端口 X),然后从该端口连接到服务器。服务器看到 Alice 的外部端口对应于端口 X - 比如说端口 Y。此时,Alice 通知服务器她希望 Bob 连接到她。由于 Bob 连接到同一台服务器,服务器通知 Bob 它应该在端口 Y 连接到 Alice。这应该在它们之间建立连接,而无需任何猜测。

    【讨论】:

    • 非常感谢!我很高兴终于有人决定回答这个问题!让我从第二点开始:您所指的 NAT 类型是完整的锥形 NAT,它只会将内部端口 X 映射到外部端口 Y,并允许所有数据包进入内部端口 Y,并将它们路由到在端口 X 上的 NAT 内的用户。但是,对于端口受限的锥形 NAT,情况并非如此,它具有统一的端口映射,但只允许来自它已发送数据包的目的地的应答,从那里需要这个肮脏的打孔技术。
    • 至于第一点:据我了解,很大一部分DNS流量是基于UDP的,对吗? (我也认为这个例子原则上可以扩展到 TCP 但我不是专家) 现在,如果这种端口扫描行为被 NAT 阻止,攻击者将有一个简单的方法来破坏质量网络。可以欺骗来自最知名的 DNS 服务器的传入端口扫描攻击,并使用非常有限的资源使它们被防火墙阻止,从而阻止所有内部人员访问该服务!
    • 1.您对 NAT 的看法是正确的。我忽略了 Cone NAT 受端口限制的事实。这确实使事情变得更加困难。仍然有解决方案(基于端口预测,例如goto.info.waseda.ac.jp/~wei/file/wei-apan-v10.pdf),但它们更复杂。
    • 2.是的。 DNS 主要基于 UDP,确切地说是端口 53。防火墙中的 DNS 流量通常会出现例外情况,否则会阻止 UDP。但是你提出的攻击比你想象的要复杂一些。智能防火墙可能不会直接阻止此类流量,但仅允许来自端口 53 的 UDP,或者检查数据包是否看起来像 DNS 回复,或者检查它们是否来自已知的 DNS 服务器(网络运营商可能有一个白色的-列表)。另一方面,您所描述的攻击可能确实可以通过某些防火墙进行。不检查很难说。
    • 我还有另一个问题 - 您可能想尝试在 security.stackexchange.com 提问您的问题,那里的人可能会知道您的流量是否看起来像是已知的攻击。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2011-03-08
    • 2014-11-19
    • 2015-01-30
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多