我刚刚换了一台新的 VPS,安装了 Linux,我想通过使用 iptables 应用防火墙规则来加强它。我使用防火墙生成器制定我的规则,并希望得到一些建议或您的意见。
vps 带有一个具有公共 IP 的 NIC(在规则中标记为外部)。
具体来说,我希望您就以下方面提出意见:
- 规则的顺序
- 关于包含/排除某些私有 IP 范围(或者可能完全删除规则 #1)
- 规则是否必须是无国籍的(注意新的连接)
- 规则 #4 和 #5 使用 iptables 的限制模块来缓解 RST 数据包泛滥和 DOS 攻击。无论我尝试什么,规则 #5 似乎都不起作用,并且被禁用,如规则编号中的红色 X 所示。我使用 Apache bench 工具创建了数百个到服务器的连接,它们都通过了,所以我猜这些规则不起作用。规则 #4 也可能因同样的原因而不起作用。
- 您可能认为需要添加或删除的其他重要内容
编译规则#5 为:
$IPTABLES -N In_RULE_5
$IPTABLES -A INPUT -i eth0 -p tcp -m tcp --tcp-flags ACK,RST,SYN,FIN SYN -m limit --limit 3/second --limit-burst 5 -j In_RULE_5
$IPTABLES -A In_RULE_5 -j LOG --log-level info --log-prefix "SYN FLOOD: "
$IPTABLES -A In_RULE_5 -j ACCEPT
这是防火墙生成器中显示的策略规则的屏幕截图。
答案1
1)规则顺序:
看起来还不错;没有那么多,可能也没有太大的区别。
2)关于包含/排除某些私有 IP 范围(或者可能完全删除规则 #1)
具体来说,我不会排除 127.0.0.0/8。据我所知,这不会产生任何影响(我预计内核会丢弃任何到达实际外部网络接口的带有该源地址的数据包),只会造成一点混乱。丢弃其他的就可以了,敌我识别区您的 VPS 仅具有公共 IP,并且不在(例如像 AWS)RFC1918 网络上,NAT 会通过魔法使其看起来像是公共 IP。
3)规则是否必须是无状态的(仅监视新连接):
一个有趣的问题。简短回答:可能不会,因为这样你就需要将每个入站规则与允许回复数据包通过的出站规则配对(也是无状态规则,但源端口是,例如,为了匹配规则 7,端口 22、80 和 443。但是:在高流量情况下,入站流量的状态规则可能被视为有害,在这种情况下,防火墙状态跟踪会成为瓶颈。如果你只期望中低流量,并且可以接受所有流量都受到 DoS 的影响(这在单服务器情况下很可能发生,DoS 很容易发现限制因素是 CPU/内存,而不是并发连接),那么不要太担心无状态。我希望我能找到对此的引用(某处有一篇关于它的史诗般的咆哮,但它不在手边)
4) 规则 #5(可能还有规则 #4)该规则被满足,并且数据包被接受,直到达到速率限制为止。超过速率限制后,该规则不是命中,因此处理继续执行链中后面的规则,然后命中规则 7,允许流量通过。思考你想要的是规则 #5 之后立即有另一条规则,然后滴任何仅设置了 SYN 的数据包。如果超出速率限制规则,处理将触及该规则,数据包将被丢弃。我建议您首先仔细尝试,也许将端口 80/443 作为目标服务也添加到这些规则中,这样即使您做错了也不会失去 SSH 访问权限 :)
5)其他评论:
也许将 ICMP 放在一起,或者更确切地说使用内置的“有用的 ICMP”组,而不是丢弃坏的 ICMP 并允许“任何 ICMP”。