如何防止VPS被暴力破解

因过竹院逢僧话,偷得浮生半日闲。

Posted by Chevy on April 28, 2020

如何防止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,在登录属性栏,打开用户身份验证

1.md.png

2.在方法部分选择使用Public Key的选择项,随后点击用户密钥(此处我创建好了一个密钥)

2.md.png

3.选择生成新的密钥,参数默认即可

3.md.png

4.随后命名一下密钥名称,密码可以留空,点击下一步

4.md.png

5.生成好了以后,点击密钥的属性,就可以看到公钥的信息了

5.md.png

6.将其保存为文件(这里保存的是公钥,待会用来上传至服务器),同时在用户密钥栏也将该密钥的private key导出,待会Winscp会用到

6.md.png

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

7.md.png

9.目前就可以通过xshell使用密钥进行登陆了。但是如果需要使用Winscp传输文件呢?下面分享一下如何使用Winscp密钥登录,第6步已经将私钥导出,打开winscp,在会话的工具栏里打开putty key generator,load进刚才导出的私钥,将其转为winscp可以识别的.ppk密钥文件,随后将其导入到winscp高级选项的验证栏里面即可(记得保存哦),这里就可以使用密钥登录winscp了。

8.md.png

10.md.png

9.md.png

参考blog

增强VPS安全性的常用方法

腾讯云