感谢该脚本的原创者,我只是纠正了一些错误,添加了几行说明,并测试成功。
该脚本适用于密码验证的SSH服务端。


脚本说明:
利用iptables把超过10次SSH登陆失败的IP拒绝掉。
建议定期自动恢复iptables初始配置,被拒绝的IP在恢复后解封。
IP解封周期由iptables恢复初始配置的周期,及secure日志滚动周期共同决定(默认每周滚动一次)

/etc/crontab中追加以下计划任务,iptables.sh是初始配置脚本,可参考iptables的详细配置。
01 1 * * 1 root /root/script/iptables.sh
*/1 * * * * root /root/script/ssh_deny.sh

#!/bin/bash
#######################################################################
#author      unknown
#update      zhaoyn   2011/03/23
#
#######################################################################
 
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 "`iptables -vnL INPUT|grep $SCANIP`" ]
then
/sbin/iptables -I INPUT -s $SCANIP -m state --state NEW,RELATED,ESTABLISHED -j DROP
echo "`date` $SCANIP($NUMBER)" >> /root/script/scanip.log
fi
 
done


附件中的脚本文件是有DOS换行符(CR/LF)的,复制文件中的内容到一般的SSH客户端没有问题,如果直接拷贝文件到Linux系统中,可先运行下面的命令:
mv ssh_deny.sh.txt ssh_deny.sh
dos2unix  ssh_deny.sh


原文:http://www.zhaoyanan.cn/use-iptables-to-prevent-ssh-brute-force.html