linux问题解决:多种方法处理ssh暴力攻击

Posted 河边小咸鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux问题解决:多种方法处理ssh暴力攻击相关的知识,希望对你有一定的参考价值。

linux问题解决:多种方法处理ssh暴力攻击

一、前言

  说实话挺离谱的,昨晚登我云服务器的时候,感觉root登录有点卡,然后登进去阿里云那边提醒说自上次登录至现在有xxx条登录失败结果。我一瞅,这量有点大啊,然后用命令lastb看了眼登录失败的日志。如下图:

  可以看出来,这人应该是广撒网瞎捕鱼,因为攻击频率不算高并且IP都源自一个地方江苏省宿迁市 电信。说实话我感觉这人没跳代理,应该是真实IP,结合攻击频率不够,应该是个技术不咋地的**。但是说实话,他给我来这么一手,正好让我可以实操相关的内容,感恩就完事了。
  昨天因为有点事情没空管他,结果今天一看他还在冲我的服务器,所以把这事办了,下面记录一下我思考与实操的处理方式。

二、处理方式

1. 更改ssh端口

  这是最简单的方式,因为这种**都是扫一个IP段的22端口暴力破解,所以改一下ssh的端口,换个别的隐藏一下ssh的端口就行。不过如果别人的目标就是我,nmap扫描一下也能把端口扫出来,这样改只是躲了流弹罢了。

具体操作如下:

  1. vim /etc/ssh/sshd_config 进去ssh的配置文件
  2. 找到配置项 Port 22 改成别的端口
  3. 如果没 Port 配置项或者被注释掉了就自己改一下
  4. service sshd restart 重启ssh服务

  但是说实话这种处理方式有点怂,我不想这样搞。而且这样搞了的话,以后跳转登录ssh还得带个-p选项,我觉得麻烦,所以我就放弃这么搞了。
  

2. 禁止root用户登录

  这是个更怂的方法,就是直接禁止root登录,通过首先登录普通用户再su root来实现root的登录。这玩意流程想想就麻烦,我这又不是什么机密服务器,不至于因噎废食,所以也放弃这么搞。

禁止root用户登录的方法: (这部分内容我在笔记用户与/etc/passwd与/etc/shadow中有详细介绍)

  1. 修改/etc/passwd/etc/shadow文件
  2. 使用命令usermod -L xxx
      

3. RSA密钥登录

  就是通过生成公私钥来通过ssh协议登录,公私钥相关的内容可以看我的这篇笔记公钥、私钥与证书 —— 相关内容分析与实践。简单来说就是取消密码登录,改为通过密钥登录。优点是不用登录,缺点是每个机子都需要生成公钥再放到机子里,有点麻烦,所以我也不用这种方法。

因为我也没试过,所以我就不写步骤了
  

4. 修改配置文件

  在linux中,存在两个文件白名单 /etc/hosts.allow黑名单 /etc/hosts.deny,二者中可以添加IP或IP段来实现黑白名单的效果。
  有一说一啊,这个可能是效果最好的处理方法了,只需要在白名单里加上自己用的IP段,再在黑名单里禁止所有IP段登录即可。因为白名单的优先级比黑名单高,所以这样可以完美的规避ssh暴力攻击。但是缺点也有,就是如果想在一个新的IP段环境下登录,必须得在白名单内添加新内容。

我更改后的内容如下:

[root@Zhao_Server ~]# cat /etc/hosts.allow
sshd:xx.xxx.*.*:allow
sshd:xxx.xxx.*.*:allow
[root@Zhao_Server ~]#
[root@Zhao_Server ~]# cat /etc/hosts.deny
sshd:all:deny

  上面的白名单IP数字被我用x替换掉了,sshd:xx.xxx.*.*即代表sshd服务允许向IP地址为xx.xxx开头的IP地址提供服务。而黑名单里的sshd:all:deny即代表sshd服务不允许向所有IP地址提供服务。
  这样一来,即可避免ssh暴力攻击。

说明:

  1. 一个IP请求连入,linux的检查策略是先看/etc/hosts.allow中是否允许,如果允许直接放行;如果没有,则再看/etc/hosts.deny中是否禁止,如果禁止那么就禁止连入
  2. 实验发现对/etc/hosts.allow/etc/hosts.deny的配置不用重启就立即生效,但不管重启不重启当前已有会话都不会受影响;也就是说对之前已经连入的,即便IP已配置为禁止登录会话仍不会强制断开
      

5. 使用iptables工具

  这个也是个很好的解决方案,iptables是linux下的一个防火墙工具,可以很好的实现包过滤功能。在这里我们只要能把攻击来源方的IP给ban掉,即可避免ssh暴力攻击。

这里简单列一下可能会用到的命令:

  1. iptables -I INPUT -s 221.0.0.0/8 -j DROP 封禁整个221开头的网段
  2. iptables -I INPUT -s 221.181.185.159 -j DROP 封禁指定IP
  3. iptables -L --line-numbers 展示iptables策略列表并显示序号
  4. iptables -D INPUT 1 根据上一条显示的序号,删除INPUT链的第一条

  按照上面的命令对想要封禁的IP段进行封禁即可。

总结:
  这玩意是真的好用,而且功能远不止如此,可能抽空我会在csdn上补充记录一下iptables的使用方法。
  这个东西在重启后会失效,所以需要做持久化的措施,具体步骤我会在下面记录。
  

三、后续补充

1. iptables 持久化操作

  在系统重启后,iptables的策略并不会保存,所以就会面临着持久化的问题。但是持久化还是相对方便的。

下面是步骤:

  1. iptables-save > /etc/sysconfig/iptables 使用该命令将 iptables 的配置保存在/etc/sysconfig/iptables
  2. /etc/rc.d/rc.local中添加iptables-restore < /etc/sysconfig/iptables 即在开机后自动导入之前保存的 iptables 策略

  按如上几步操作,即可完成 iptables 的持久化操作。
  

2. 关于/etc/hosts.allow/etc/hosts.deny失效的问题

  配好这俩文件以后,我发现没有用,还是能被攻击到。就找了哥们测试了一下,发现防火墙策略没有生效。所以就研究了下是怎么回事。

下面是解决步骤:

  1. 首先是查看是否存在libwarp库,通过命令ll /lib64/libwrap.so.0即可查看这个库是否存在
  2. 如果这个库不存在的话,则使用命令yum install -y tcp_wrappers来安装这个库
  3. ldd /usr/sbin/sshd | grep libwrap 可以查看sshd功能是否支持libwarp库,如果没用结果则说明是不支持的问题
  4. 但是有一点需要注意…openssh6.7开始默认关闭TCPwrappers支持,所以想要支持libwarp库,就需要安装6.6及以下的版本,或者重新编译一次openssh。下面我预计会记录一下重新编译openssh的方法。

  

四、总结

  在绿盟实习俩月多了,好歹也是安全公司,而且这段时间的实习内容也和操作系统底层的安全策略有关,所以接触学习到了很多关于系统安全的内容。这次加强我服务器安全配置的经历可以说是让我对相关内容有了更深入的了解,毕竟可以大刀阔斧的在我的系统上大改乱改。
  在实习中学习并分析系统上的配置,在自己的服务器上根据自己的理解进行改动查看结果,并尝试各种操作深入理解。我觉得目前我这种学习流程还是蛮好的。

以上是关于linux问题解决:多种方法处理ssh暴力攻击的主要内容,如果未能解决你的问题,请参考以下文章

Linux SSH密码暴力破解技术及攻击实战

Linux主机预防SSH暴力攻击

腾讯云CVM&Linux CentOS 7 防止暴力SSH登录实践

腾讯云CVM&Linux CentOS 7 防止暴力SSH登录实践

linux服务器被SSH暴力破解引发的安全加固计划之打流氓脚本

linux服务器被SSH暴力破解引发的安全加固计划之打流氓脚本