用于计算服务器中 IP 的脚本,并使用 bash、shell 或 python 在 CSF 中自动添加高数块

问题描述 投票:0回答:1

我正在使用此命令行列出服务器中的 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?

我感谢任何帮助或建议

谢谢你。

python linux bash netstat csf
1个回答
0
投票

您当前处理

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 来工作,假设它确实有效。

© www.soinside.com 2019 - 2024. All rights reserved.