最近有台站群服务器,老是出问题,被攻击了,宝塔进不去,SSH链接服务器也不行,是在无语了。通过一番纠结,处理了,也总结了一些linux问题,如何用多种方法处理病毒入侵服务器ssh。分享下吧。
可以看出来,这人应该是广撒网瞎捕鱼,因为攻击频率不算高并且IP都源自一个地方江苏省宿迁市 电信。说实话我感觉这人没跳代理,应该是真实IP,结合攻击频率不够,应该是个技术不咋地的**。但是说实话,他给我来这么一手,正好让我可以实操相关的内容,感恩就完事了。
昨天因为有点事情没空管他,结果今天一看他还在冲我的服务器,所以把这事办了,下面记录一下我思考与实操的处理方式。
处理方式
1. 更改ssh端口
这是最简单的方式,因为这种**都是扫一个IP段的22端口暴力破解,所以改一下ssh的端口,换个别的隐藏一下ssh的端口就行。不过如果别人的目标就是我,nmap扫描一下也能把端口扫出来,这样改只是躲了流弹罢了。
具体操作如下:
vim /etc/ssh/sshd_config 进去ssh的配置文件
找到配置项 Port 22 改成别的端口
如果没 Port 配置项或者被注释掉了就自己改一下
service sshd restart 重启ssh服务
但是说实话这种处理方式有点怂,我不想这样搞。而且这样搞了的话,以后跳转登录ssh还得带个-p选项,我觉得麻烦,所以我就放弃这么搞了。
2. 禁止root用户登录
这是个更怂的方法,就是直接禁止root登录,通过首先登录普通用户再su root来实现root的登录。这玩意流程想想就麻烦,我这又不是什么机密服务器,不至于因噎废食,所以也放弃这么搞。
禁止root用户登录的方法: (这部分内容我在笔记用户与/etc/passwd与/etc/shadow中有详细介绍)
修改/etc/passwd或/etc/shadow文件
使用命令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暴力攻击。
说明:
一个IP请求连入,linux的检查策略是先看/etc/hosts.allow中是否允许,如果允许直接放行;如果没有,则再看/etc/hosts.deny中是否禁止,如果禁止那么就禁止连入
实验发现对/etc/hosts.allow和/etc/hosts.deny的配置不用重启就立即生效,但不管重启不重启当前已有会话都不会受影响;也就是说对之前已经连入的,即便IP已配置为禁止登录会话仍不会强制断开
5. 使用iptables工具
这个也是个很好的解决方案,iptables是linux下的一个防火墙工具,可以很好的实现包过滤功能。在这里我们只要能把攻击来源方的IP给ban掉,即可避免ssh暴力攻击。
这里简单列一下可能会用到的命令:
iptables -I INPUT -s 221.0.0.0/8 -j DROP 封禁整个221开头的网段
iptables -I INPUT -s 221.181.185.159 -j DROP 封禁指定IP
iptables -L --line-numbers 展示iptables策略列表并显示序号
iptables -D INPUT 1 根据上一条显示的序号,删除INPUT链的第一条
按照上面的命令对想要封禁的IP段进行封禁即可。
总结:
这玩意是真的好用,而且功能远不止如此,可能抽空我会在csdn上补充记录一下iptables的使用方法。
这个东西在重启后会失效,所以需要做持久化的措施,具体步骤我会在下面记录。
后续补充
1. iptables 持久化操作
在系统重启后,iptables的策略并不会保存,所以就会面临着持久化的问题。但是持久化还是相对方便的。
下面是步骤:
iptables-save > /etc/sysconfig/iptables 使用该命令将 iptables 的配置保存在/etc/sysconfig/iptables中
在/etc/rc.d/rc.local中添加iptables-restore < /etc/sysconfig/iptables 即在开机后自动导入之前保存的 iptables 策略
按如上几步操作,即可完成 iptables 的持久化操作。
- 关于/etc/hosts.allow和/etc/hosts.deny失效的问题
配好这俩文件以后,我发现没有用,还是能被攻击到。就找了哥们测试了一下,发现防火墙策略没有生效。所以就研究了下是怎么回事。
下面是解决步骤:
首先是查看是否存在libwarp库,通过命令ll /lib64/libwrap.so.0即可查看这个库是否存在
如果这个库不存在的话,则使用命令yum install -y tcp_wrappers来安装这个库
ldd /usr/sbin/sshd | grep libwrap 可以查看sshd功能是否支持libwarp库,如果没用结果则说明是不支持的问题
但是有一点需要注意...openssh6.7开始默认关闭TCPwrappers支持,所以想要支持libwarp库,就需要安装6.6及以下的版本,或者重新编译一次openssh。下面我预计会记录一下重新编译openssh的方法。
总结
好吧,就聊这么多,有问题随时咨询哦。