在不影响系统健全性的情况下可以将多少条指令塞入 iptables 中?

在不影响系统健全性的情况下可以将多少条指令塞入 iptables 中?

假设某人希望获得被阻止的 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 条目,是合理的吗?

这个上限是多少?超过这个上限,系统效率会受到显著影响吗?

答案1

我认为我已经通过这篇文章找到了解决方案,而 IPSet 似乎就是答案

总共:

如果 IP 地址集包含数千个项目,iptables 性能就会下降(实际上,netfilter 的性能会下降,因为 iptables 只是一个管理防火墙的工具)。您的 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 链中。它可能因您的防火墙设置而异。这里我们使用 ethin 链。

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

相关内容