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