2017-07-18 120 views
1

我已经为fail2ban创建了自己的自定义操作。这是一个用Python编写的脚本。fail2ban自定义脚本启动功能

  • _init _
  • 开始: 我已经根据文档创建了以下功能当的fail2ban开始
  • 停止:当的fail2ban停止
  • 禁令 :当fail2ban禁止ip时
  • 黑名单中删除:当解除禁止的fail2ban一个IP

我用这个动作对于很多监狱,似乎每个监狱的fail2ban调用start功能,并在我的情况下创建新规则的iptables。 所以我有很多重复的iptables规则,因为fail2ban调用几次启动函数。

我试图提出一个条件。 “如果规则不存在,我创建它”。但所有的监狱似乎都是从线程开始的。在这种情况下,我可以将重复规则限制为2或3.

是否有技巧或永久性解决方案?也许在启动函数信号量或锁定文件或其他东西?

回答

0

所以我用下面的脚本解决我的问题:

#!/bin/bash 

RED='\033[0;31m' 
GREEN='\033[0;32m' 
NC='\033[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 

它会得到jail.d等每一个监狱使用命令的fail2ban客户端重装启动它们(不fail2ban-工作客户端启动)并负责服务器的负载。

监狱不会一个接一个地开始,我的初始条件将起作用