我经常看到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条目(您也应该在日志中说明)。 或者它可能完全是温和的。
断言STATE NEW可确保INVALID数据包不会被错误地接受。
并澄清意义: