我已经为fail2ban做了自己的自定义操作。它是用Python编写的脚本。 我根据文档创建了以下函数:
- _init_
- start: 当 fail2ban 启动时 停止
- :当失败2禁止停止时 禁止
- :当失败2禁止IP时
- 解禁:当失败2禁止解禁IP时
我在许多监狱中使用此操作,似乎每个监狱 fail2ban 调用 start 函数,并在我的情况下创建一个新的规则 iptables。 所以我有很多重复的iptables规则,因为fail2ban调用了几次启动函数。
我试图提出一个条件。"如果规则不存在,我创建它"。但所有的监狱似乎都是从线程开始的。在这种情况下,我可以将重复规则限制为 2 或 3。
有技巧或永久解决方案吗?也许在启动功能期间的信号量或锁定文件或其他东西?
所以我使用以下脚本解决了我的问题:
#!/bin/bash
RED=' 33[0;31m'
GREEN=' 33[0;32m'
NC=' 33[0m' # No Color
/usr/bin/fail2ban-server
grep "^[" /etc/fail2ban/jail.d/* | grep -v "#" | cut -d"[" -f 2 | cut -d "]" -f 1 | while read jail
do
load=$(uptime | cut -d ":" -f5 | cut -d"," -f 1)
compare=$(bc <<< "$load>3")
while [[ $compare -eq "1" ]]
do
echo -e "Load too ${RED}high${NC} ($load) .... sleep 5 secondes"
sleep 5
load=$(uptime | cut -d ":" -f5 | cut -d"," -f 1)
compare=$(bc <<< "$load>3")
done
echo -n -e "$1 starting jail $jail ..."
fail2ban-client reload $jail
echo -e "[${GREEN}OK${NC}] "
done
它将通过使用命令fail2ban-client reload(不适用于fail2ban-client start(并照顾服务器的负载来启动prison.d et中的每个jail。
监狱不会一个接一个地开始,我的初始条件会起作用