如何防止VPS被暴力破解
起因
半个月没有上VPS,用xshell登陆以后发现一个warning:
There were 25005 failed login attempts since the last successful login.
Google了一下原来是公网IP扫描到,自己在登录的时候使用的是root密码登录模式,也就被robots疯狂尝试登录了,所以才会出现这么多失败登录。
是谁在尝试登录?
root@Chevy:~# lastb | head
dutch ssh:notty 172.81.253.175 Mon Apr 27 13:37 - 13:37 (00:00)
anna ssh:notty 36.153.0.229 Mon Apr 27 13:36 - 13:36 (00:00)
jenkins ssh:notty 118.25.96.30 Mon Apr 27 13:36 - 13:36 (00:00)
dd ssh:notty 153.ip-51-75-140 Mon Apr 27 13:36 - 13:36 (00:00)
fedele ssh:notty 123.207.92.254 Mon Apr 27 13:36 - 13:36 (00:00)
web2 ssh:notty 172.81.253.175 Mon Apr 27 13:35 - 13:35 (00:00)
swen ssh:notty ns527545.ip-198- Mon Apr 27 13:34 - 13:34 (00:00)
mh ssh:notty 125.124.147.191 Mon Apr 27 13:34 - 13:34 (00:00)
deploy ssh:notty 94.191.127.153 Mon Apr 27 13:34 - 13:34 (00:00)
marton ssh:notty 118.25.96.30 Mon Apr 27 13:33 - 13:33 (00:00)
原来一直在被尝试,当然我们也可以通过查看log文件统计一下攻击者的ip:
root@Chevy:~# cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' | head
101.71.28.72=9
101.89.145.133=35
103.108.87.133=12
103.123.8.221=32
103.218.240.17=1
103.242.56.174=50
103.38.215.237=1
104.131.189.116=41
104.211.50.174=11
104.236.142.89=44
解决办法
经过Google以后,我发现大佬们给出的建议可以分为两类:
- 禁用root登录,不使用root登录,避免用户名和密码被猜到然后暴力破解,同时修改SSH端口
- 关闭密码登录,启用密钥登录,可以的说是安全系数最高的解决办法
那么我选择的是使用密钥登录的方法,我用来连接shell的软件是xshell,传输文件的软件是Winscp,下面我就分享一下我是如何关闭root账户同时启动密钥登录的:
1.打开xshell,在登录属性栏,打开用户身份验证
2.在方法部分选择使用Public Key的选择项,随后点击用户密钥(此处我创建好了一个密钥)
3.选择生成新的密钥,参数默认即可
4.随后命名一下密钥名称,密码可以留空,点击下一步
5.生成好了以后,点击密钥的属性,就可以看到公钥的信息了
6.将其保存为文件(这里保存的是公钥,待会用来上传至服务器),同时在用户密钥栏也将该密钥的private key导出,待会Winscp会用到
7.随后我们使用Winscp将公钥上传到服务器,在家目录下创建.ssh
文件夹,将公钥mv
到该文件夹下并将添加到authorized_keys
cat your_public_key >> authorized_keys
# 同时考虑到SSH对权限的要求,执行一下操作
mkdir /etc/ssh/user
cp /home/user/.ssh/authorized_keys /etc/ssh/user/
chmod 755 /etc/ssh/user
chmod 600 /etc/ssh/user/authorized_keys
chown -R user:user /etc/ssh/user
8.编辑一下SSH配置文件,禁止使用密码登录:
vim /etc/ssh/sshd_config
# 将PasswordAuthentication 这一行后面的yes改为no
# 重启SSH服务使其生效
systemctl restart sshd.service
9.目前就可以通过xshell使用密钥进行登陆了。但是如果需要使用Winscp传输文件呢?下面分享一下如何使用Winscp密钥登录,第6步已经将私钥导出,打开winscp,在会话的工具栏里打开putty key generator
,load进刚才导出的私钥,将其转为winscp可以识别的.ppk密钥文件,随后将其导入到winscp高级选项的验证栏里面即可(记得保存哦),这里就可以使用密钥登录winscp了。