Shell脚本阻止proftp失败尝试

我想筛选和阻止尝试访问我的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 

我怎样才能select“awk”的IP。 用当前脚本完全select“(93.218.93.95 [93.218.93.95])”这一行。 但我只想selectIP。

如果您使用的是GNU awk( gawk ),则可以使用正则expression式作为字段分隔符。

 $ 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 

你也可以看看有没有例子设置ProFTPd的 Fail2Ban。

 tail -1000 /var/log/secure | awk '/proftpd/ && /Maximum login attempts/' | awk -F "[][]" '{print $(NF-1)}' | while read ip do # note: check if IP is already blocked... /sbin/iptables -L -n | grep $ip > /dev/null if [ $? -eq 0 ] ; then # echo "already denied ip: [$ip]" ; true else # echo "Subject: denying ip: $ip" | /usr/sbin/sendmail [email protected] logger -p authpriv.notice "*** Blocking ProFTPD attempt from: $ip" /sbin/iptables -I INPUT -s $ip -j DROP fi done