假设一个人希望有一个被阻止的 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
Run Code Online (Sandbox Code Playgroud)
几千行,转换成几千个iptables条目,理智吗?
上限是多少,超过这个上限,系统效率会受到显着影响?
我想我已经通过这篇文章找到了解决方案,而 IPSet 似乎就是答案
总共:
如果一组IP地址包含数千个项目,iptables的性能会下降(实际上,netfilter的性能,只要iptables只是一个管理防火墙的工具)。您的 CPU 负载也会增加。好在有一个完美的解决方案——ipsets
如果您想:IPSet 是完美的工具:
安装 ipset 很简单 sudo apt-get install ipset
然后运行以下命令
ipset -N autoban iphash ––hashsize 4096 ––probes 2 ––resize 50
Run Code Online (Sandbox Code Playgroud)
将它添加到您的 iptables 链中。它可能因您的防火墙设置而异。这里我们使用 ethin 链。
iptables -I ethin 2 -p tcp -m multiport ––dport 80,443 -m set ––match-set autoban src -j DROP
Run Code Online (Sandbox Code Playgroud)
现在您可以将所有坏 IP 添加到您的 ipset。例如,您有一个名为 bots.txt 的文本文件,每行一个 IP。因此,您可以使用简单的 bash 脚本将它们添加到 ipset:
for i in $( cat /tmp/bots.txt ) ; do ipset -A autoban $i ; done
Run Code Online (Sandbox Code Playgroud)
要检查运行:
ipset -L autoban
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3345 次 |
| 最近记录: |