Pet*_*ock 3 firewall nat ipv6 udp
IPv4 需要 NAT 来保护地址。NAT 的防火墙特性也有利于安全。IPv4 NAT 防火墙规则是“阻止传入数据包remote-address:port -> local-address:port
,除非local-address:port -> remote-address:port
在最后 X 秒内发送传出数据包”。
对于点对点 UDP 应用程序,这需要介绍服务器来进行 NAT 打孔。对于Client
连接到Server
(包括有防火墙的NAT后面,FW
),我们需要进行如下操作的情况发生:
periodic
keep-alive
Introducer <------>
Client FW FW Server
------------------------------------------
request
introduction
-------> Introducer
Client FW FW Server
--------------------->X
request connection
------------------------------------------
notify
introduction
[Client address:port]
Introducer ------->
Client FW FW Server
------------------------------------------
Client FW FW Server
<---------------------------
hello
------------------------------------------
Client FW FW Server
--------------------------->
request connection
------------------------------------------
Client FW FW Server
<---------------------------
accept connection
------------------------------------------
Client FW FW Server
<-------------------------->
periodic keep-alive
Run Code Online (Sandbox Code Playgroud)
IPv6 不需要 NAT,但似乎可能为家庭用户配置了类似的防火墙规则(请参阅下面的参考资料)。
Q1:如果 IPv6 防火墙规则就像 IPv4 NAT 防火墙规则(只是没有地址转换位),那么我认为点对点应用程序仍然需要完全相同的 UDP 打孔过程是否正确?
Q2:大多数家庭 IPv6 路由器的默认/开箱即用防火墙规则是否与顶部总结的 IPv4 NAT 防火墙规则一样?如果有什么不同,那又如何?有没有默认接受所有传入数据包的行为?
这些支持 IPv6 家庭路由器应该/可能具有类似 NAT 的防火墙规则的观点:
使用 NAT 获得的一大安全收益是它强制您进入默认拒绝配置。为了通过它获得任何服务,您必须明确地打孔。... 正确配置的防火墙提供与 NAT 网关完全相同的服务。
http://www.brynosaurus.com/pub/net/p2pnat/
默认情况下,IPv6 防火墙通常仍会阻止未经请求的传入流量,这使得打孔甚至对 IPv6 应用程序也很有用。
(以下链接已禁用,因为我只有足够的积分来制作 2)
http://tools.ietf.org/html/rfc5128
即使是未来的“纯 IPv6 世界”也可能仍然包括防火墙,它采用与 NAT 类似的过滤行为,但没有地址转换。过滤行为会干扰 P2P 应用程序的功能。出于这个原因,使用本文档中描述的技术进行 NAT 穿越的 IPv6 应用程序也可以与一些具有类似于 NAT 的过滤行为的防火墙一起使用。
http://stackoverflow.com/questions/4647633/nat-traversal-and-ipv6
防火墙不会很快消失,参见
http://tools.ietf.org/html/draft-ietf-v6ops-cpe-simple-security-16
“用于提供住宅 IPv6 Internet 服务的客户驻地设备中推荐的简单安全功能”。...您可以预期无处不在的防火墙将继续干扰应用程序协议,并要求您执行 IPv4/NAT 所需的所有基本遍历方法,以便在应用程序路径的中间盒中维护状态记录。
http://news.ycombinator.com/item?id=8229327
人们一直在说,您应该拥有带有防火墙的本机 IPv6,而不是 NAT hack,以获得相同或更好的级别或保护。但是有状态的 IPv6 防火墙不会引入与 NAT 相同的问题吗?我是否仍然需要使用保活数据包或 PCP 之类的协议才能实际使用 P2P?
我也在焦急地等待 IPv6 的兴起,但我猜测——在一个理智的世界里——消费者路由器仍然会默认使用 IPv6 的状态防火墙,因此需要继续进行打孔。:/
然而,这些似乎表明 IPv6 不会有任何类似 NAT 的防火墙规则,或者打孔过程是不必要的:
http://www.raknet.net/raknet/manual/ipv6support.html
只使用 IPV6 时不需要 NAT 穿通。如果您知道系统的 IP 地址,即使该系统位于路由器后面,您也可以直接连接到该系统。
http://www.zerotier.com/blog/?p=226
这是一个基本限制的丑陋解决方法,而且越早被 IPv6 淘汰,我们就能越早开始真正部署全新的互联网协议。... 因为 NAT 几乎总是有状态的,所以需要频繁的 keepalive 数据包来保持所有连接打开。...如果您不是每 120 秒发送一次数据包(对于典型的 NAT),您的连接将被遗忘并重置。使用 SSH 的 NAT 背后的用户在尝试长时间保持 SSH 会话打开时可能会发现这一点,并且 SSH(与大多数协议一样)有一个协议保持活动选项可用作解决方法。
在回答问题之前,我想先说明其中的一些假设。
NAT 的防火墙特性也有利于安全。
这是经常重复的,但根本不是真的;见下文。
IPv4 NAT 防火墙规则是“阻止传入数据包远程地址:端口 -> 本地地址:端口,除非在最后 X 秒内发送传出数据包本地地址:端口 -> 远程地址:端口”。
这些不是 NAT 规则,而是有状态规则。有状态规则比之前的旧式无状态规则更安全,因为它们本质上是自适应的;也就是说,防火墙对出站流量的仔细研究允许它对入站流量做出比仅基于端口/地址的规则所允许的更精细的判断。
NAT 防火墙确实是隐式有状态的,但重要的是要认识到有状态是您所追求的,而不是 NAT,因为 NAT 在 ipv6 社区的某些角落享有非常糟糕的声誉,而且正如您所拥有的看到在 ipv6 中实现它的阻力很大。
您描述的 UDP“介绍人”过程不仅限于 NAT 方案,而且也适用于服务不依赖于单个众所周知的端口号的情况。RPC 是典型的例子,其中服务绑定到一个(半)随机端口,然后使用端口映射器注册该端口及其名称,该端口映射器确实使用了一个众所周知的端口(111/TCP 和 111/UDP)。希望连接的客户端联系端口映射器以找出他们想要的服务今天在哪个端口上运行,然后启动到该端口的连接。这正是你的图表所显示的,它每天在世界各地运行 NFS 的扁平(非 NATted)网络上发生数百万次。
至于您的问题,问题(1)应该真正阅读“如果我的 ipv6 防火墙被配置为拒绝没有匹配状态的入站 UDP 流量,我的 UDP 客户端是否仍然需要启动与外部服务的所有任意连接”。不幸的是,答案是“视情况而定”。诸如类的有状态扩展RELATED
扩展iptables
确实允许防火墙允许不具有简单匹配状态的流量基于预先存在的连接在应用程序层提出要求 - 活动模式 FTP 是经典示例 - 但它需要一个内核模块来理解相关协议的详细信息以及端到端加密的部署使这种深度数据包检查变得越来越困难。因此,如果没有此类变通方法,问题 1 的答案是yes。顺便说一下,对于没有众所周知的端口号的 TCP 服务,这同样适用。
至于问题 (2),对 SOHO 设备的详尽调查可能超出了 ServerFault 的职权范围和功能,但我已经很多年没有看到防火墙设备 - v4或v6 - 附带默认开放配置。
归档时间: |
|
查看次数: |
2511 次 |
最近记录: |