编写脚本防止ssh被暴力登录破解

有一段事件,通过mac终端登录腾讯云服务器特卡,在网上仔细搜了下原因,是因为服务器被暴力ssh登录给刷爆了。


通过Google,找到如下解决方案,是通过编写脚本统计secure日志中某一时间段失败次数超过三十次的登录IP,然后通过iptables进行封禁。


详细脚本如下:


#!/bin/bash
LIMIT=30     #这边可以自定义限制次数
LOGFILE="/var/log/block_ssh.log"     #日志路径
TIME=$(date '+%b %e %H')     #example: Apr 11 11
BLOCK_IP=$(grep "$TIME" /var/log/secure|grep Failed|awk '{print $(NF-3)}'|sort|uniq -c|awk '$1>"$LIMIT"{print $1":"$2}')     #将1小时内ssh认证失败超过30次的ip抓出来
for i in $BLOCK_IP
do
     IP=$(echo $i|awk -F: '{print $2}')
     iptables-save|grep INPUT|grep DROP|grep $IP>/dev/null #先判断下是否已经被屏蔽
     if [ $? -gt 0 ];then
          iptables -A INPUT -s $IP -p tcp --dport 22 -j DROP     #屏蔽ip
          NOW=$(date '+%Y-%m-%d %H:%M')
          echo -e "$NOW : $IP">>${LOGFILE}
     fi
done


将脚本放在某个目录中,例如:/home/secure.sh。然后赋予其可执行权限,并添加进crontab定时任务中



chmod +x  /home/secure.sh

crontab -e #添加如下

*/10 0 * * * /home/crontab/secure_ssh.sh

service crond restart  # 重启crontab服务


当然,也可以将统计出来的IP写入/etc/hosts.deny 文件中,解决的办法不只有一种,毕竟古谚云:条条大路通罗马。


脚本运行一段时间后,状况着实改变了不少。


参考:

shell http://linux.it.net.cn/e/server/ssh/2015/0511/15331.html

iptables:https://www.centos.bz/2017/08/iptables-rules-add-delete-modify-save/

crontab:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html

确认 取消