最近把/var/log/secure
给导出了一下,发现里面有很多登录失败的记录,很明显是有人在暴力破解ssh的密码,绝大部分是在尝试root账户的密码,也有一部分是在试不同的账户,虽然密码被试出来的可能性不大,但是为了保险起见,还是打算写个脚本用来自动屏蔽掉这些暴力破解密码的主机。
用来检测主机IP地址的脚本:从/var/log/secure
中提取出登录失败的记录,然后把其中失败次数超过10次的IP记录下来,设置iptables规则屏蔽之,并写入ssh_err.log
文件。然后只需在crontab中设置定时器每隔5分钟执行一次即可。
#!/bin/bash
#Protecting server from brute force password cracking
#by Chon http://ichon.me
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
LOG_PATH="/home/ssh_err.log" #指定log文件路径
iptables -F #清除所有规则
date >> $LOG_PATH #在log文件中写入时间
echo " Times IP address" >> $LOG_PATH
#列出所有登录错误次数大于10次的IP地址
IP_LIST=`cat /var/log/secure | grep Failed | sed 's/^.*from //g' |sed 's/ port.*//g'| sort | uniq -ic | tee -a $LOG_PATH | awk ' $1>10 {print $2}'`
#将IP地址添加到iptables规则中
for EACH_IP in $IP_LIST
do
iptables -I INPUT -p tcp -s $EACH_IP -j DROP
done
自动将屏蔽结果通过email发送到邮箱的脚本:直接将ssh_err.log
文件作为附件发送到电子邮箱,同时删除旧的ssh_err.log
文件,每天执行一次即可。
#!/bin/bash
#SSH login failure notification via Email.
#by Chon http://ichon.me
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
LOG_PATH="/home/ssh_err.log"
MAILTO="chon219@gmail.com"
if [ -f $LOG_PATH ]; then
date | mutt -a $LOG_PATH -s "login failure notify" $MAILTO
rm $LOG_PATH
fi
没怎么写过脚本,这次现学现卖了...汗
Leave a Comment