防止ssh密码遭暴力破解

 Aug. 13, 2011, 5:43 p.m.   2 comments    密码 ssh bash

最近把/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

没怎么写过脚本,这次现学现卖了...汗


Ernest

Ernest Aug. 13, 2011, 6:11 p.m. Reply

我的Ubuntu Server找不到类似的文件啊。

Chon

Chon Aug. 13, 2011, 7:15 p.m. Reply

好像不太一样...看看这个吧https://help.ubuntu.com/community/SSH/OpenSSH/Configuring
p.s.我才发现有DenyHosts这种东西= =