防止ssh暴力破解,自动提交黑名单

近日系统发现多例ssh登录失败记录,明显是有人ssh暴力破解,百度了下[1]参考,做了以下处理
一、系统:Centos

二、方法:读取/var/log/secure,查找关键字 Failed,例如(注:文中的IP地址特意做了删减):

Sep 17 09:08:09 localhost sshd[29087]: Failed password for root from 13.7.3.6 port 44367 ssh2
Sep 17 09:08:20 localhost sshd[29087]: Failed password for root from 13.7.3.6 port 44367 ssh2
Sep 17 09:10:02 localhost sshd[29223]: Failed password for root from 13.7.3.6 port 56482 ssh2
Sep 17 09:10:14 localhost sshd[29223]: Failed password for root from 13.7.3.6 port 56482 ssh2

从这些行中提取IP地址,如果次数达到10次(脚本中判断次数字符长度是否大于1)则将该IP写到 /etc/hosts.deny中。

三、步骤:

1、先把始终允许的IP填入 /etc/hosts.allow ,这很重要!比如:
sshd:19.16.18.1:allow
sshd:19.16.18.2:allow

2、脚本 /usr/local/bin/secure_ssh.sh

#! /bin/bash
cat /var/log/secure|awk '/Failed/{print (NF-3)}'|sort|uniq -c|awk '{print2"="1;}'>/usr/local/bin/black.list
for i in `cat  /usr/local/bin/black.list`
do
  IP=`echoi |awk -F= '{print 1}'`
  NUM=`echoi|awk -F= '{print 2}'`
  if [{#NUM} -gt 1 ]; then
    grep IP /etc/hosts.deny>/dev/null
    if [? -gt 0 ];then
      echo "sshd:$IP:deny" >> /etc/hosts.deny
    fi
  fi
done

3、将secure_ssh.sh脚本放入cron计划任务,每1分钟执行一次。

crontab -e

*/1 * * * * sh /usr/local/bin/secure_ssh.sh


这样脚本检查到暴力破解ip就会自动提交到黑名单禁止访问
最后做出总结:
– 修改默认22端口
– 禁止root用户登录,使用其他用户操作root命令[2]
– 使用秘钥登录ssh,不使用密码登录
– 添加上诉脚本自动提交黑名单,封禁IP

发表评论