放2个bash脚本,用于屏蔽ssh的穷举密码攻击!
为了更好的保护linux的ssh 不被坏人用于 密码穷举,首先必须保证 ssh 的配置是:#vim /etc/ssh/sshd_config
里面有一行是
MaxAuthTries 3
==================================
然后可以写2个小脚本,
A--ssh_scan.sh---用iptables屏蔽ssh穷举密码的 ip地址 (记得先安装好 iptables 软件包)
B---secure_ssh.sh---用hosts.deny 同样也是屏蔽在不断猜密码的 对方ip地址
==================================
我举例,是用在 centos 上(debian 则需要更改一个小地方,就没问题了的)
源码如下所列
A--ssh_scan.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#export LC_ALL=UTC
#扫描10分钟内的登陆失败的IP
SCANNER=$( tm=$(date -d '10 minutes ago' +"%h %d %H") && \
awk -v tm="$tm" ' $0 ~ tm &&/Failed password/ && /ssh2/ { print $(NF-3) ; } ' /var/log/secure \
| sort \
| uniq -c \
| awk '{print $1"="$2;}' \
)
for i in $SCANNER
do
#截取IP与数量
IP=`echo $i|awk -F= '{print $2}'`
NUM=`echo $i|awk -F= '{print $1}'`
#数量大于8次,则使用iptables禁止IP
if [ $NUM -gt 8 ]
then
iptables -vnL | grep DROP | grep $IP &>/dev/null
[ $? -eq 0 ] || /sbin/iptables -I INPUT -s $IP -j DROP
echo "`date` $IP($NUM)" >> /var/log/scanner.log
fi
done
#End of Script
================================================
B--secure_ssh.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /root/black.txt
DEFINE=5
for i in `cat/root/black.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:deny" >> /etc/hosts.deny
fi
fi
done
========================================
工作原理大致是 一样的!
然后 可以在定时任务器里面添加
添加定时任务
.# crontab -e
*/2 * * * * /bin/bash /home/softs/ssh_scan.sh
*/1 * * * * /bin/bash /home/softs/secure_ssh.sh
========================================
最后说明一下,debian的 记录被人在穷举密码的文件是
/var/log/auth.log
centos 下 则是 /var/log/secure
因此,稍微替换一下 脚本的对应位置,则同样可以放在 debian 下运行的!
感谢
最后,打包好了 脚本,我放压缩包,给大家下载 研究的!
[ 本帖最后由 imacintosh 于 2014-11-29 16:43 编辑 ]
页:
[1]