SSH遭遇暴力破解简单解决方案

2021-08-17 18:28:20 303

简介

暴露在公网的服务器,肯定会遭受来自各方的攻击,比如DDoS、ssh暴力破解等。本文介绍一下关于ssh遭遇到暴力破解时,比较简单的解决方法。

1.事件复盘

今早登录服务器,想查看一下gunicorn的运行日志,阴差阳错的打开了log目录下的auth.log日志文件,之前不是很了解这个日志文件的作用是啥,文件里面包含了大量的sshd登录失败日志,而且登录IP都不是我经常使用的登录IP,sshd登录失败日志如下图所示

通过IP查询工具去查看这些登录IP的所在地,发现很多都是国外的,当然也存在一些国内的IP,我就很纳闷了,干点什么事情不好,为什么偏偏要搞这些东西?之后通过lastb命令查看登录失败日志,如下图,lastb命令是通过读取/var/log/btmp文件,去获取ssh登录失败日志,具体的使用方法可以自行百度,这里不详细说明。

2.定时脚本监听日志

既然通过日志文件可以查看到ssh登录失败的IP,那么我们就可以通过解析日志获取登录失败的IP,然后将这些IP加入到黑名单中,就可以有效的防止暴力破解登录密钥了。在Linux系统中通过/etc目录中的hosts.allowhosts.deny两个文件来配置允许以及拒绝登录主机的IP,因此我们只需要通过解析/var/log/auth.log日志文件中的IP,然后将IP加入到hosts.deny文件中,这样在hosts.deny文件中的IP如果再视图连接登录我们的主机,就会出现connect refuse,通过下面的shell脚本来解析auth.log日志

#! /bin/bash
cat /var/log/auth.log|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.list
for i in `cat  /usr/local/bin/black.list`
do
  IP=`echo $i |awk -F= '{print $1}'`
  NUM=`echo $i|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

上面的脚本十分简单,就是通过解析auth.log文件,通过失败登录次数来判断是否将其加入到/etc/hosts.deny文件中。之后我们可以将此脚本设置进定时任务中,定时执行脚本,刷新hosts.deny中的数据,关于定时任务的设置可以查看使用crontab定时备份数据库博客。

3.更改ssh登录端口号

默认的我们的Linux主机的ssh登录端口号一般为22,我们将端口号修改端口号之后,可以大幅的减少他人暴力破解登录我们主机频率,因为如果ssh所连接的端口号错误的话,会直接返回Connection refused的连接拒绝信息。

ssh的的配置信息在/etc/ssh目录中的sshd_config文件,通过如下的命令可以修改ssh的连接端口号

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo vim /etc/ssh/sshd_config

修改文件内容,把22端口关闭,然后改为其他的端口

Port 7895
Port 5555

上述内容就是将端口号改为78955555,修改完后保存文件,然后通过下面的命令重启ssh服务

sudo service ssh restart

然后通过远程主机进行连接,通过上面修改的端口号。

4.禁用密码登录

在日常开发中很多人都是通过ssh登录密钥进行ssh远程登录,其实如果黑客知道了你的主机密钥,那么他也可以通过密码远程连接你的主机,然后对你的主机造成不必要的破坏,甚至勒索等等。ssh除了通过密码登录之外还可以通过PublicKey登录,其实就是将你们需要访问主机的目标机器的id_ras.pub内容添加到你的主机know_hosts文件中去,具体操作方法可以参考使用ssh时的一些骚操作

同样的修改配置文件的内容,就可以关闭密码登录,只能通过PublicKey认证登录了,修改完之后记得保存文件,然后重启ssh服务。

PasswordAuthentication no
ChallengeResponseAuthentication no

进行此项操作之前请务必先将你个人电脑的Publickey添加到你需要登录的主机中去,进行测试,如果成功免密登录,在进行此项设置,以防登录不了主机!!!切记!!!!!

5.小记

暴露在公网的服务器请务必注意安全!上面的方案其实最有效可行的是修改ssh的登录端口,在我修改端口之后,就没有出现过类似的日志信息了!!!