我正在使用此命令行列出服务器中的 IP
netstat -ntu|awk '{print $5}'|cut -d: -f1 -s|sort|uniq -c|sort -nk1 -r
我总是得到这样的结果:
36 142.251.9.26
31 64.233.184.27
26 142.250.153.27
23 142.250.27.26
22 142.250.27.27
19 142.250.153.26
15 64.233.184.26
13 142.251.0.27
11 195.3.223.154
然后我手动阻止大量 IP。
我已经在 robots、htaccess、apache 配置和 mod_security 中阻止了机器人,但这并不能帮助机器人使服务器超载
是否有任何 bash、shell 或 python 脚本可以帮助我阻止大量 IP 并添加到 CSF?
我感谢任何帮助或建议
谢谢你。
您当前处理
netstat
输出的命令管道:
netstat -ntu|
awk '{print $5}' | cut -d: -f1 -s | sort | uniq -c | sort -nk1 -r
可以简化为单个 awk 命令(输出顺序与我们接下来要做的操作无关):
netstat -ntu |
awk 'sub(/:.*/,"",$5){cnt[$5]++} END{for (ip in cnt) print cnt[ip], ip}'
您可以调整它以仅输出“高”计数 IP:
netstat -ntu |
awk -v high=20 'sub(/:.*/,"",$5){cnt[$5]++} END{for (ip in cnt) if (cnt[ip] >= high) print ip}'
然后您可以循环访问该输出,执行您当前正在执行的任何操作来阻止 IP:
while IFS read -r ip; do
current blocking command
done < <(
netstat -ntu |
awk -v high=20 '
sub(/:.*/,"",$5) { cnt[$5]++ }
END { for (ip in cnt) if (cnt[ip] >= high) print ip }
'
)
上面的内容未经测试,但可以使用任何 awk 来工作,假设它确实有效。