=============================

#! /bin/bash
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /root/black.txt
awk '/no such user/' /var/log/secure|awk '{print $7}'|cut -d ":" -f4|sed "s/\[//g"|sort|uniq -c|awk '{print $2"="$1;}' >> /root/black.txt
DEFINE="5"
for i in `cat  /root/black.txt`
do
        IP=`echo $i |awk -F= '{print $1}'`
        NUM=`echo $i|awk -F= '{print $2}'`
        if [ $NUM -gt $DEFINE ];
        then

/sbin/iptables -L -n|awk '{print $4}'|grep [0-9]|sort|uniq>/root/ipbad.list
#         grep $IP /etc/hosts.deny > /dev/null
          grep $IP /root/ipbad.list > /dev/null
          if [ $? -gt 0 ];
          then
          /sbin/iptables -A INPUT -s $IP -p tcp --dport 21 -j DROP
          /sbin/iptables -A INPUT -s $IP -p tcp --dport 20 -j DROP
          echo "sshd:$IP" >> /etc/hosts.deny
          fi
        fi
done

======================

以上内容写入/home/denyip.sh

放定时任务执行

*/1 * * * *  /home/denyip.sh

由于iptbales会越来越大,建议定期执行iptables -F,可以根据实际需要来配置

此脚本提供思路