防止暴力破解服务器密码的脚本

思路

分析登录日志/var/log/secure中登录失败的记录,组成“ ip号=失败次数 ”这样的日志(如下图),然后记录登录失败超过10次的ip放入hosts.deny做黑名单处理,最后根据自身情况添加定时任务

脚本

#!/bin/bash
#防暴力破解密码
cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2"="$1;}' > /tmp/denyhosts.txt
DEFINE=10
for i in cat /tmp/denyhosts.txt
do
IP=echo $i | awk -F= '{print $1}'
NUM=echo $i | awk -F= '{print $2}'
if [ $NUM -gt $DEFINE ]
then
ipExists=grep $IP /etc/hosts.deny | grep -v grep | wc -l
if [ $ipExists -lt 1 ]
then
echo "sshd:$IP" >> /etc/hosts.deny
fi
fi
done

添加定时任务

编辑定时任务(crontab命令学习点击此处

#crontab -e

每过半小时执行一次脚本(在每个小时的0分和30分执行,例如15:00,15:30,16:00,16:30……) 解释器/bin/bash,我的脚本在/root/denyHosts.sh。

0,30 * * * * /bin/bash /root/denyHosts.sh