每次SSH登录服务器,/var/log/secure都会记录了相应的登录者的IP地址,所以收集 /var/log/secure 里面的信息,就能获得相应的IP,若是某个IP 链接失败次数超过一定次数 ,则会把相应的IP记录到/etc/hosts.deny里面,从而拒绝这个IP ssh登录。


1、用脚本来获取登录失败的IP地址,并设置登录失败多少次后拒绝此IP


#cat /root/Denyhosts.sh

#!/bin/bash

#Denyhosts SHELL SCRIPT

cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"=" $1;}' > /root/Denyhosts.txt          #截取IP并追加到Denyhosts.txt

DEFINE="10"                     #这里设置登录失败10次后拒绝登录

for i in `cat /root/bin/Denyhosts.txt`

do 

        IP=`echo $i|awk -F= '{print $1}'`

        NUM=`echo $i|awk -F= '{print $2}'`

        if [ $NUM -gt $DEFINE ]

        then

                grep $IP /etc/hosts.deny >/dev/null //看IP是否已存在

                if [ $? -gt 0 ];      //若不存在,则执行下面的语句

                then

                echo "sshd:$IP" >> /etc/hosts.deny

                fi

        fi

done


2、通过crontab计划任务定时执行脚本,这里设置每30分钟执行一次


# crontab -e

*/30 * * * * sh /root/Denyhosts.sh


参考:https://my.oschina.net/qianglong/blog/140230