用于阻止 proftp 失败尝试的 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。

答案1

如果您使用 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

答案2

你也可以看看 Fail2Ban 之类的东西,它确实有示例设置FTP 服务

答案3

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

相关内容