首页 文章

是否有针对udp打孔的安全措施? [关闭]

提问于
浏览
3

Alice和Bob说,我想在两个对等体之间 Build UDP通信 . Alice位于端口限制锥形NAT后面(即使目标被更改,相同的内部端口也会映射到同一个外部端口),而Bob则支持对称NAT(这意味着每次新的外部端口都会更改)无论内部端口如何,都会选择目标,从而使外部端口不可预测 . 我之间有一台服务器,我想做一个UDP打孔 .

我实施了以下策略:

  • Bob打开了大量端口,并从所有端口向Alice的外部端口发送数据包(他通过服务器了解) .

  • Alice在随机端口向Bob的NAT发送数据包,直到 Build 连接 .

手头有两个这种类型的NAT,我做了一些实验 . Bob打开32个端口,Alice每0.1秒发送64个数据包 . 连接通常在1或2秒内 Build ,这超出了我的需要 .

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

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

1 回答

  • 2

    这是一个有趣的问题 .

    First of all ,我'm not sure anyone has the exact answer you'正在寻找 . 不同的网络使用不同的设备和不同的配置两个ISP可以使用十个不同的供应商来处理路由器,防火墙,NAT,入侵检测设备,DPI设备等;更不用说所有这些设备的可能配置数量了 .

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

    此外,在家庭和商业网络中,可能存在若干层NAT . 我知道有一家公司为每个实验室提供NAT(将其与其他实验室和研发网络隔离开来) . 然后将每个实验室连接到R&D NAT(以将其与其他部门隔离),然后将其连接到公司范围的NAT,顺便说一下,它还具有很强的防火墙功能 . 再添加一个可能的ISP级别(carrier grade)NAT,您正在查看最多4层NAT . 希望这是一个极端的例子,但现在两层NAT在家庭NAT和运营商级NAT中非常普遍 .

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

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

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

    Second ,我'd like to say a few words about your hole punching strategy. If both Alice and Bob have a shared server, and Alice is behind a cone NAT, I don't看到你的策略中的重点 . 锥形NAT是最容易克服的NAT . 如果你想让Alice能够连接到Bob(这很棘手自他's behind a symmetric NAT), all you really have to do is to get Bob to connect to Alice upon Alice'的要求 .

    为此,Alice和Bob应始终与服务器 Build 持久的TCP或UDP连接 . 连接不应该在大多数情况下携带任何数据,并且应该偶尔保持活着 .

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

相关问题