1. #!/bin/bash  
  2. SCANIP=`grep "Failed" /var/log/secure | awk '{print $(NF-3)}'| sort |uniq -c | awk '{print $1":"$2}' |awk -F: '$1 >= 10 {print $5}'`  
  3. if [ -z "`iptables -vnL INPUT | grep $SCANIP`" ]  
  4. then 
  5.     for i in $SCANIP  
  6.         do iptables -I INPUT -s $i -m state -state NEW,RELATED,ESTABLISHED -j DROP 
  7.     done  
  8. fi 

        简单解释一下,由于用户通过SSH登陆Linux服务器的信息都记录在了/var/log/secure这个日志文件里面,我们可以通过less等命令看一下这个文件,内容如图:

用iptables防范SSH暴力破解密码_第1张图片

        可以看到很多Failed记录,这些记录就是通过ssh登录时密码输入错误的信息,从对应的条目里面可以看到对方是通过什么IP地址进行的登陆。

        所以我们用awk对这个文件进行分析,提取出来标记为Failed登陆的IP,并通过sort|uniq -c这个命令对这些记录进行排序和合并,这样就能知道每个IP登陆错误的次数,这里由于操作人员的失误造成密码输入错误的可能性是存在的,所以我们需要设置一个认定***的值,我这里选择的是在一天里面有10次登陆密码输入错误的IP。把这些IP筛选出来之后再利用iptables防火墙的命令把这些IP添加进列表就OK了!