防止SSH暴力破解

我的服务器整天被全世界各种黑客工具扫描破解SSH,所以还是把默认的端口改了

附上两个失败登录拉黑的bash,由于/var/log/secure是以星期为轮询的,所以我们每次可以查看这个文件,利用shell脚本统计出其中访问失败比较频繁的IP,并定义一个阀值为10(可自行修改为合适的值),如果超过这个阀值并且查看防火墙列表中有没有这条IP的记录,如果没有则添加相应防火墙规则,阻止此IP进行SSH登录,每隔一段时间进行一次检查,如果下次排查的某IP次数又大于10,并且检查它在不在我们的防火墙列表中,如果在的话就无视过去;如果不在,就继续添加进iptables中。然后我们定义一个计划任务,让每一个小时检测一次

2.将/root/scan_sshd_linux.sh添加至crontab,一小时执行一次

#!/bin/bash
#Denyhosts SHELL SCRIPT
#2013-6-24
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"=" $1;}' >/root/bin/Denyhosts.txt
DEFINE="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
if [ $? -gt 0 ];
then
echo "sshd:$IP" >> /etc/hosts.deny
fi
fi
done

#!/bin/sh
SCANIP=`grep "Failed" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | awk '{print $1"="$2;}'`
for i in $SCANIP
do
NUMBER=`echo $i | awk -F= '{print $1}'`
SCANIP=`echo $i | awk -F= '{print $2}'`
echo "$NUMBER($SCANIP)"
if [ $NUMBER -gt 10 ] && [ -z "`/sbin/iptables -vnL INPUT | grep $SCANIP`" ]
then
/sbin/iptables -I INPUT -s $SCANIP -m state --state NEW,RELATED,ESTABLISHED -j DROP
echo "`date` $SCANIP($NUMBER)" >> /var/log/scanip.log
fi
done

上一篇
下一篇