Shell
阻止 proftp 嘗試失敗的 Shell 腳本
我想過濾並阻止訪問我的 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的範例設置。