iptables nat 需要转发icmp等协议吗?

iptables nat 需要转发icmp等协议吗?

一些 NAT 的 iptables 配置示例没有提供有关转发 ICMP 数据包的信息,一些手册建议

-A FORWARD -i in -o out  -p icmp -m icmp --icmp-type 8  -j ACCEPT 

ufw 配置(即使它不用作路由器)在 filter.FORWARD 子链中有以下内容

ACCEPT     icmp --  anywhere             anywhere             icmp destination-unreachable
ACCEPT     icmp --  anywhere             anywhere             icmp source-quench
ACCEPT     icmp --  anywhere             anywhere             icmp time-exceeded
ACCEPT     icmp --  anywhere             anywhere             icmp parameter-problem
ACCEPT     icmp --  anywhere             anywhere             icmp echo-request

那么什么是正确的?那么其他协议(如 igmp 等)又如何呢?

答案1

不要弄乱这些东西:NAT 用于地址转换,默认iptablesfilter用于过滤数据包。

如果问题是:我需要哪个过滤器才能使 NAT 工作?答案是:没有。表之间没有这样的联系。当然,您需要添加规则才能使数据包流通您的系统,否则 NAT 组件将处于准备就绪但空闲状态(无过滤器 = 无数据包)。

因此,即使您禁止 ICMP 和其他协议,NAT 仍会工作。当然,一些 ICMP 消息对于使事情正常进行很有用(例如,路径 MTU 发现使用 ICMP,如果您阻止所有 ICMP 消息,连接将非常断开)。不过,这与 NAT 无关:即使您不使用 NAT 并且弄乱了表,也会遇到同样的问题filter

您可以在这里找到一些有关 ICMP 阻止的信息:http://shouldiblockicmp.com

简而言之,您可能希望允许:

  • 回显请求/回复
  • 需要碎片化
  • 超出时间

在 IPv6 中您还需要允许 NDP 和 SLAAC。

相关内容