每次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
转载于:https://blog.51cto.com/davewang/1859278