我有以下 iptables 配置:
Chain INPUT (policy DROP 11 packets, 604 bytes)
num pkts bytes target prot opt in out source destination
1 127 11093 BLACKLIST all -- * * 0.0.0.0/0 0.0.0.0/0
2 127 11093 UNCLEAN all -- * * 0.0.0.0/0 0.0.0.0/0
3 115 10437 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
4 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
... followed by rules for state=NEW for running services like SSH
该链BLACKLIST
阻止了一些源 IP。该链UNCLEAN
丢弃带有不干净 TCP 标志的数据包。我喜欢将ACCEPT state RELATED,ESTABLISHED
规则(当前规则 3)尽可能移到顶部,以获得最佳响应行为 - 但不会失去安全性。
据我所知,我可以将这BLACKLIST
两个位置向下移动,因为仅检查 就足够了state=NEW
。一旦established
它已经通过了BLACKLIST
之前的检查,因此ACCEPT state RELAED,ESTABLISHED
可以放置在BLACKLIST
规则之前。对吗?
您是否建议移动其他规则?(例如lo
移至顶部或类似位置)
答案1
Netfilter 按顺序处理防火墙规则。出于安全性和性能方面的考虑,您希望数据包在被批准或拒绝之前经过尽可能少的防火墙规则。
根据默认策略,您可能需要或可能需要允许lo
环回接口上的所有流量的规则-A INPUT -i lo -j ACCEPT
作为-A OUTPUT -i lo -j ACCEPT
第一条规则。
在外部接口上采用状态防火墙并将该-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
规则作为第一项是非常有意义的,因为这些流量之前已经成功通过了防火墙规则,这使得连接得到批准,并且处理这些后续数据包也不会有任何好处。在大多数具有大量合法流量的系统上,该规则将匹配绝大多数数据包。
在授予访问权限之前,您可能需要黑名单规则。
然后,您通常会根据规则的相关可能性对其进行排序,例如,在 Web 服务器上,您可能希望经常触发的规则位于-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -j ACCEPT
很少触发的规则之前,例如允许从办公网络访问管理端口的规则。
不时查看计数器以检查哪些规则经常匹配,以确认您的配置是合理的。
答案2
可以,我已经将 related/established 放在了 iptables 链的顶部。它不允许任何额外内容进入,只允许任何与已建立连接相关的内容,例如高端口响应或已建立连接本身。
至于移动其他规则,您要考虑的就是像处理列表一样处理它们,因此命中的任何规则都将由其命中的第一个规则处理。您也可以将 lo 移到顶部,但您的其他规则可能不太可能与环回规则发生冲突,尤其是因为它们与其他目的地/源有关。