Shell

阻止 proftp 嘗試失敗的 Shell 腳本

  • May 21, 2012

我想過濾並阻止訪問我的 proftp 伺服器的失敗嘗試。以下是 /var/log/secure 文件中的範例行:

Jan  2 18:38:25 server1 proftpd[17847]: spy1.XYZ.com (93.218.93.95[93.218.93.95]) - Maximum login attempts (3) exceeded  

有幾行這樣的。我想兩次阻止來自任何 IP 的任何此類嘗試。這是我試圖執行以阻止這些 IP 的腳本。

tail -1000 /var/log/secure | awk '/proftpd/ && /Maximum login/ { if (/attempts/) try[$7]++; else try[$11]++; }
END { for (h in try) if (try[h] > 4) print h; }' |
while read ip
do

   /sbin/iptables -L -n | grep $ip > /dev/null
   if [ $? -eq 0 ] ; then
       # echo "already denied ip: [$ip]" ;
       true
   else
       logger -p authpriv.notice "*** Blocking ProFTPD attempt from: $ip"
       /sbin/iptables -I INPUT -s $ip -j DROP
   fi
done

如何使用“awk”選擇 IP。使用目前腳本,它正在選擇“(93.218.93.95

$$ 93.218.93.95 $$)”這條線完全。但我只想選擇IP。

如果您使用 GNU awk ( gawk),您可以使用正則表達式作為欄位分隔符。

$ echo 'Jan  2 18:38:25 server1 proftpd[17847]: spy1.XYZ.com (93.218.93.95[93.218.93.95]) - Maximum login attempts (3) exceeded' \
 | awk -F'\\[|]' '{print $4}'
93.218.93.95

您還可以查看諸如 Fail2Ban 之類的東西,它確實有ProFTPd的範例設置。

引用自:https://serverfault.com/questions/219962