在使用iptables防火墙规则时,为什么在所有允许的端口上断言NEW状态?

我经常看到iptablesconfiguration为允许所有的分区关联连接,并将特定的服务端口连接到新的连接。

说明新的原因是什么? 如果一个连接不是新的,它是相关的我猜,所以特定的端口规则将不会执行。 那么为什么要用NEW来明确定义服务端口而不仅仅是protocoll和端口号呢?

netfilter防火墙(iptables)中的规则被依次检查,包的命运(ACCEPT,DROP,REJECT等)在第一次匹配的基础上被确定。

通过使防火墙有状态和第一个规则典型的-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT绝大多数到你的服务器的合法stream量被接受,只有通过这个单一的规则。 该stream量不需要穿越任何其他规则。

取决于您的规则库的大小,这可能意味着防火墙性能的显着差异。

防火墙现在需要validation的唯一stream量是明确的新连接。

即比较一个公共networking服务器的防火墙与从他们的工作站less数网站pipe理员的访问:

 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m iprange --src-range 10.9.8.7-10.9.8.10 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited 

大约99%的合法数据包属于已build立的连接,只能达到第一条规则。 在不符合该规则的数据包中,大多数应该是到您的网站的新连接,多端口模块可以在单个规则中授予对HTTP或HTTPS的访问权限。 网站pipe理员使用ssh和sftp从许多使用固定地址的工作站login,其他一切都被拒绝。

防火墙的规则由TCP端口在逻辑上sorting:

 -A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.7 -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.8 -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.9 -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 --source 10.9.8.10 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT 

在这里,每个数据包到您的HTTPnetworking服务器将需要检查5个规则之前访问被授予。 并且在服务器上运行更多的服务时,如果您使用fail2ban或类似的产品,则可以很容易地成为50条规则或更多。

NEW意味着数据包已经开始新的连接。

它由称为ip_conntrack_*的内核模块处理,使您的防火墙成为有状态的 。 有状态的防火墙可以观看stream量。

如果您只指定协议和端口号,则防火墙不是有状态的,而是无状态的。 意味着它只是限制或阻止数据包。 这些types的防火墙不知道数据stream。

一个好的例子是FTP:主动FTP使用端口21作为控制通道,然后使用端口20作为数据通道。 如果是有状态的防火墙,则不需要明确地打开端口20,因为它与端口21上的先前build立的连接相关。

以下是iptables手册页的摘录:

NEW–意味着数据包已经开始了一个新的连接,或者与一个没有在两个方向上看到数据包的连接有关。

ESTABLISHED – 表示数据包与在两个方向上都看到数据包的连接相关联。

相关 – 意味着数据包正在启动一个新的连接,但与现有的连接相关联,如FTP数据传输或ICMP错误。

 -A INPUT -m tcp -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -DROP 

上述规则集将通过ACCEPT将数据包发送到TCP端口22,其状态为INVALID

无效 :如果以前的状态均不适用,则数据包处于无效状态。 这可能是由各种types的隐形networking探测引起的,也可能是因为您没有使用CONNTRACK条目(您也应该在日志中说明)。 或者它可能完全是温和的。

https://unix.stackexchange.com/questions/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables


断言STATE NEW可确保INVALID数据包不会被错误地接受。

并澄清意义:

  • :这是一个新的连接
  • ESTABLISHED :这是一个涉及当前连接的数据包
  • 相关 :这是一个新的连接,但已被一个现有的连接预测
  • 无效 :以上都不适用。