#/bin/bash

number="10"  #定义注册最大次数
cat /var/log/asterisk/messages | grep -o -E "failed for.*" | grep -o -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" > $$.cat   ###取注册攻击IP存到$$.cat文件
awk '{++ip[$(NF)]} END {for (i in ip) print i"="ip[i]}' $$.cat > $$ #统计每个攻击ip的次数存到$$文件
for i in `cat $$`
do
   IP=`echo $i | awk -F"=" '{print $1}'` ##取IP
   NU=`echo $i | awk -F"=" '{print $2}'` ##取次数
   if [ $NU -gt $number ]    ##次数跟10比大小
    then
       grep $IP /etc/sysconfig/iptables > /dev/null  #判断IP是否在防火墙里面
               if [ $? -gt 0 ]       #判断值是否为假
               then
               iptables -I INPUT -s $IP -j DROP   #封IP
               #echo $IP
               fi
      fi
done
rm -f $$.cat   #删除临时文件
rm -f $$       #删除临时文件