使用Shell 脚本防止SSH暴力破解

回复 收藏
本帖最后由 balich 于 2016-1-29 20:43 编辑

利用 /etc/hosts.deny可以现状某些IP连接服务器。可以利用/var/log/secure日志筛选,只有是登陆失败的、并且超过一定次数的就将这个IP 加入的/etc/hosts.deny文件里面,从而拒绝这个IP连接服务器。代码如下,也参考了网络上的资料。
  1. #/bin/bash
  2. #OS:CentOS 6.7
  3. #
  4. #http://yuhongchun.blog.51cto.com/1604432/662500
  5. #定义一个登录失败的次数,如果超过这数字就把这个ip加入到/etc/hosts.deny文件上
  6. DefineTimes="3"
  7. ToDay=`date +"%y-%m-%d"`
  8. #过滤/var/log/secure 日志文件,把里面登录失败的ip过滤出来并且排序、汇总失败的次数,重定向到一个文件上,
  9. #然后通过for循环把ip地址和错误次数过滤出来,并个设定的错误次数对比,如果超过了,就到/etc/hosts.deny
  10. #文件上匹配,如果有,$?的返回值会大于0,然后就把这IP追加到/etc/hosts.deny文件上,从而达到拒绝多次失败的登录链接。
  11. cat /var/log/secure |awk '/Failed/ {print $(NF-3)}'|sort|uniq -c |awk '{print $2 ":" $1;}' > /data/Ssh_login_Failed_ip_${ToDay}_.txt
  12. for i in `cat /data/Ssh_login_Failed_ip_${ToDay}_.txt`
  13.   do
  14.   Failed_IP=`echo $i |awk -F ':' '{print $1}'`
  15.   Failed_Num=`echo $i |awk -F ':' '{print $2}'`
  16.   if [ $Failed_Num -gt $DefineTimes ]
  17.     then
  18.       grep $Failed_IP /etc/hosts.deny > /dev/null
  19.       if [ $? -gt 0 ]
  20.         then
  21.           echo "sshd:$Failed_IP" >> /etc/hosts.deny
  22.       fi
  23.   fi
  24. done
然后在将这个脚本放入到任务计划执行,比如10分钟执行一次,如下:
  1. */10 * * * * root /bin/bash /data/Check_Ssh_IP_Failed_ToDeny.sh




参考:http://yuhongchun.blog.51cto.com/1604432/662500


2016-01-29 20:41 举报
已邀请:
0

weifeng1463

赞同来自:

看下

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: