最近有人问我这个问题,我却无言以对。我知道这是一个开放式的问题,但您在表/链中可以安装的规则数量是否有限制?如果有,我该如何找出答案?我猜这会因机器而异。
答案1
引自Jan Engelhardt
The theoretical upper limit of maximum number of rules for a 32-bit
environment would be somewhere around 38 million, but you could also
construct a rule that is so crowded with matches that even it won't
fit, so the lower limit of max rules is 0.
答案2
根据linuxquestions.org在 32 位机器上,IPTables 将支持大约 25,000 条规则。超过这个数字,尤其是从 27,000 条开始,事情就开始变得不稳定了。
答案3
问题
我认为这个问题源于将攻击性 IP 添加到防火墙的想法/概念。其中有很多。因为我们不断受到黑客、垃圾邮件发送者等的轰炸。
不久前,我在一台 64 位机器上尝试过这种方法,当 IP 达到 4,000 个左右时,我发现速度开始变慢。因此,这不是一个好主意。
解决方案 1:ipset
一段时间以来,出现了一个iptables
名为的扩展ipset
。要执行诸如向防火墙添加新 IP 之类的操作。要阻止的 IP。我强烈建议您使用集合。IP 和集合以及规则的数量仍然限制在某些数字内,但在这种情况下会少得多。
它会是这样的:
ipset create deny_list hash:ip
sudo iptables -A INPUT -p tcp -m tcp --syn \
-m set --match-set deny_list src \
-j ACCEPT
然后将攻击性 IP 添加到列表中,如下所示:
ipset add deny_list 10.0.0.10
您可以设置 TTL 或使用自己的软件在一段时间后删除这些 IP。
解决方案 2:recent
对于非常动态的防火墙,另一种解决方案是使用扩展recent
。它允许您将 IP 添加到类似于ipset
IP 列表的列表中。然后,您可以检查另一个传入数据包的 IP 是否与该集合中的某个 IP 匹配,如果匹配,则检查DROP
该数据包。
在我看来,这比较难处理。但它的威力很大。
您的其他工具(例如检测黑客攻击的网站)可以将 IP 添加到最近的列表中:
echo +10.0.0.10 >/proc/net/xt_recent/<name>
手册页中有关于此内容的文档iptables-extensions
。