最近我的阿里云主机的openssh老是被别人暴力破解。我已经修改的ssh端口号,也把openssh升级到了最新版OpenSSH9.0,虽然没被暴破成功,但看着日志里的信息也是感觉很不爽。 于是写了个定时脚本,功能是每10分钟和每小时检测一次,如果有一个IP在这两个时间段内输入密码错误大于等于5次,就把IP封掉。 计划任务里添加定时任务 #crontab -e*/10 * * * * /opt/script/check.sh >/dev/null 2>&1
脚本内容如下: [root@ttl ~]# cat /opt/script/check.sh #!/bin/bashPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binexport PATHcheck(){ ip_list='$(lastb|grep -o '[0-9]\ .[0-9]\ .[0-9]\ .[0-9]\ .*[0-9]\ [0-9]\ :[0-9]'|grep '$1'|awk ' { sum[$1]=sum[$1] 1 }END{ for(i in sum) { if(sum[i]>=5)print i; } }')' echo '$ip_list'|while read line;do if [ '$line' != '' ];then if [ '$(iptables -nL|grep $line|grep 'dpt:9999')' == '' ];then iptables -I INPUT 1 -p tcp --dport=9999 -s $line -j REJECT fi fi done}last_10_minutes='$(date -d '-10 minutes' '%b %_d %H:%M'|awk '{print $1,$2,substr($3,1,4)}')'last_1_hour='$(date -d '-1 hour' '%b %_d %H')'check '$last_10_minutes'if [ '$(date %M|awk '{print substr($0,1,1)}')' == '0' ];then check '$last_1_hour'fi
成果
|