可以在不失去系统正常性的情况下将几条指令填充到iptables中?


9

假设有人希望列出被阻止的IP地址。

我看过以下示例脚本:

BLOCKDB="/path/to/ip.blocked.file"
# omit comments lines
IPS=$(grep -Ev "^#" $BLOCKDB)
for i in $IPS
do
    iptables -A INPUT -s $i -j DROP
    iptables -A OUTPUT -d $i -j DROP
done

是几千行,转换成几千个iptables条目,是理智的吗?

最高限制是多少?超过此最高限制,系统效率将受到显着影响?


2
看来您找到了问题的答案。如果是这样,您应该将答案从问题中移出,并使用“回答您的问题”按钮,然后将答案发布在此处。然后,您可以接受您的回答,事情将会井井有条。
Scott Severance

@ScottSeverance已按照您的建议完成,但是要花4个小时才能让人接受自己的回答。
Tzury Bar Yochay 2011年

Answers:


8

我想我已经通过本文找到了解决方案,而IPSet似乎是答案

总共:

如果一组IP地址包含数千个项目,则iptables的性能会降低(实际上,只要iptables只是用于管理防火墙的工具,netfilter的性能就会降低)。您的CPU负载也会增加。幸运的是,有一个完美的解决方案– ipsets

如果您要:IPSet是理想的工具:

  • 一口气存储多个IP地址或端口号,并与iptables进行匹配;
  • 针对IP地址或端口动态更新iptables规则,而不会影响性能;
  • 通过一个iptables规则表达复杂的基于IP地址和端口的规则集,并受益于IP集的速度

直接安装ipset sudo apt-get install ipset

然后运行以下命令

ipset -N autoban iphash ––hashsize 4096 ––probes 2 ––resize 50

将其添加到您的iptables链中。根据您的防火墙设置,它可能会有所不同。在这里,我们使用乙炔链。

iptables -I ethin 2 -p tcp -m multiport ––dport 80,443 -m set ––match-set autoban src -j DROP

现在,您可以将所有错误的IP添加到您的ipset中。例如,您有一个名为bots.txt的文本文件,每行一个IP。因此,您可以使用简单的bash脚本将它们添加到ipset中:

for i in $( cat /tmp/bots.txt ) ; do ipset -A autoban $i ; done

要检查运行:

ipset -L autoban

感谢您的回答。这是针对ipset的快速教程,适用于不熟悉ipset的用户(例如我8-)- linuxjournal.com/content/advanced-firewall-configurations-ipset
Tzunghsing David Wong
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.