Answers:
依次检查netfilter防火墙(iptables)中的规则,并在首次匹配的基础上确定数据包的命运(ACCEPT,DROP,REJECT等)。
通过将防火墙设置为全状态和第一个规则,通常-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
仅通过该单个规则后,即可接受到服务器的绝大多数合法流量。该流量不需要遍历任何其他规则。
取决于规则库的大小,这可能意味着防火墙性能会有很大不同。
防火墙现在需要验证的唯一流量是明确的新连接。
即将公用Web服务器的防火墙与从其工作站访问少数Web管理员的访问进行比较:
-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%的合法数据包将属于已建立的连接,仅达到第一个规则。在不符合该规则的数据包中,大多数应该是与您的网站的新连接,多端口模块可以在单个规则中授予对HTTP或HTTPS的访问权限。网站管理员使用ssh和sftp从多个具有固定地址的工作站登录,其他所有内容均被拒绝。
防火墙,其中规则由TCP端口按逻辑顺序排序:
-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
在这里,在授予访问权限之前,需要对照5条规则检查到HTTP Web服务器的每个数据包。随着服务器上运行更多服务,例如当您使用fail2ban或类似产品时,很容易变成50条规则或更多规则。
related/established
存在该行但后续规则未生效的情况NEW
吗?
NEW
表示数据包已开始新的连接。
它是由所谓的内核模块处理ip_conntrack_*
,使您的防火墙状态。状态防火墙可以监视流量。
如果仅指定协议和端口号,则防火墙不是有状态的,而是无状态的。意味着它只是限制或阻止数据包。这些类型的防火墙不知道数据流。
一个很好的例子是FTP:活动的FTP使用端口21作为控制通道,然后使用端口20作为数据通道。如果是状态防火墙,则无需显式打开端口20,因为它与端口21上先前建立的新连接有关。
这是iptables
手册页的摘录:
NEW-表示数据包已开始新的连接,或与未在两个方向上都看到数据包的连接相关联。
已建立-表示封包与一个已在两个方向看到封包的连接相关联。
相关-表示该数据包正在启动新连接,但与现有连接相关联,例如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
上述规则集将使数据包INVALID
通过状态为TCP的TCP端口22ACCEPT
无效:如果先前的状态均未应用,则数据包的状态为INVALID。这可能是由于各种类型的隐身网络探针引起的,或者可能意味着您用完了CONNTRACK条目(您还应该在日志中看到该条目)。或者它可能完全是良性的。
/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables
声明STATE NEW
可确保不会错误地吸收INVALID数据包。
并阐明其含义: