2017-07-18 117 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-工作客戶端啓動)並負責服務器的負載。

監獄不會一個接一個地開始,我的初始條件將起作用