前言
因为之前提到的Gihub学生包,我入手了 DigitalOcean
的VPS,由于刚刚接触VPS,对于VPS的安全性并没有什么概念,所以我直接使用一个汉化版PuTTY客户端,以root账户在22端口登录的,刚开始登录几次都没出现什么状况,然而隔天登录的时候就出现了类似以下的提示,这才让我产生了要提高VPS安全性的想法。
Last failed login: Tue Feb 10 23:32:08 EST 2017 from static-15-64-34.rpnspl.com on ssh:notty There were 166 failed login attempts since the last successful login. Last login: Tue Feb 10 18:54:37 2017 from
ip
这里的 ip
并不是我的IP地址,也就是说有人(或机器人)在恶意试探我的VPS密码。看到这提示,我马上上谷歌搜索,发现这个现象非常普遍,多数都是被机器人扫描然后试图暴力破解,如果不加以防范,代价会很大。
我在查问题的时候发现,PuTTY官方并没有提供中文版本,所以网上的汉化版有可能被植入后门,非常不安全,所以在此提醒,这一类涉及重要密码的软件绝对不要用民间汉化版!
那么如何知道自己的VPS账号正在遭受扫描和暴力破解呢?简单的方法就是查看日志:
|
|
也可以执行以下命令,查询出来的结果中包含了ip地址=数量
就是攻击者信息。
|
|
如何来增强VPS账号的安全性呢?除了养成使用正规软件的好习惯外,还要从VPS本身来加强VPS账号的安全性。
- Linux有一个自动统计VPS登录错误的工具:
Denyhosts
,一旦登录VPS账号错误次数超过了Denyhosts
的安全设置,Denyhosts
就会将该IP记录下来,同时将其放入黑名单当中,禁止该IP在某一段时间内继续访问VPS,通过它可以实现自动封锁恶意IP - 默认的SSH端口是22,通过修改自己的SSH端口先为扫描者增加一道端口门槛
- VPS默认的账号是root,如果我们禁用了root,那么要攻破账号又得先暴力猜测VPS的账号,难度又增加几分
- 如果还不放心,我们可以直接禁用密码登录验证VPS的方式,改用密钥登录,这样安全系数是相当高了
注:本人主机为CentOS 7 x64系统,以下内容均基于此环境
Denyhosts攻击
- Linux各平台现在基本上都可以直接安装Denyhosts了,直接运行命令安装
|
|
安装好了Denyhosts,默认的配置基本上就可以防御一定的暴力攻击了,
/etc/hosts.deny
文件里保存了被屏蔽的记录。如果你要自定义Denyhosts的相关配置,执行:
vi /etc/denyhosts.conf
,相关参数的说明可以自行搜索,一般用户默认即可。
修改SSH端口
输入命令
|
|
编辑SSH服务的配置文件,找到 #port 22
,将前面的 #
去掉,然后将 22
修改为你自己设定的端口号,如 12345
,保存后重启SSH服务以使配置生效
|
|
禁用Root账户
禁用root账户之前,必须先新建一个新的账户。
|
|
然后编辑配置文件
|
|
找到里面的 PermitRootLogin yes
,将后面的 yes
改成 no
,如果没有这一行则直接加入即可。保存后重启SSH服务以使配置生效
|
|
使用密钥登录
生成密钥
SSH登录方式有账号+密码和密钥认证两种形式,为了阻止暴力破解VPS的账号和密码,我们可以放弃密码验证的方式,改用密钥文件验证。
以普通用户(如user)执行以下命令,在VPS上生成密钥文件
|
|
生成密钥时会询问你密钥保存的位置,默认是 /username/.ssh
,保持默认即可,你还可以为你的密钥设置一个密码,默认为空。
密钥生成后,进入密钥存放的目录中,执行以下命令,将公钥生成一个新的文件。
|
|
将id-rsa这个私钥文件用winSCP下载到本地,打开PuTTYGen软件,执行Conversions->Import Key,导入这个私钥文件,然后选择Save private key,这时会在本地生成一个PPK文件,在PuTTY的 Connection/SSH/Auth
中选择刚刚保存的PPK文件,以后即可用密钥认证登录VPS了。
CentOS 7权限问题
CentOS 7系统下,用户user的home目录: /home/user
的权限变成了 777
,造成不能正常登陆SSH,报如下错误: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
SSH对公钥、私钥的权限和所有权的要求是非常严格的,总结如下:
1、下面两个目录的所有权必须是 user
,所属组也应该是 user
,权限必须为 700
/home/user /home/user/.ssh
2、下面公钥文件的所有权必须是 user
,所属组也应该是 user
,权限必须为 644
/home/user/.ssh/authorized_keys
3、下面私钥文件的所有权必须是 user
,所属组也应该是 user
,权限必须是 600
/home/user/.ssh/id_rsa
接着上面的操作,这次需要获取root权限,首先输入命令 su
再输入root密码获取root权限,然后依次执行以下命令
|
|
编辑SSH配置文件
|
|
找到 AuthorizedKeysFile
这项(如果没有则添加),修改为
|
|
保存后重启SSH服务以使配置生效
|
|
禁止密码登录
注意:请确认你已经可以通过密钥认证的方式登录VPS
有了密钥登录VPS,我们就可以禁止用密码登录这种验证方式了,还是 编辑SSH配置文件
|
|
找到 PasswordAuthentication
(没有则添加)并修改后面的 yes
为 no
,保存后重启SSH服务以使配置生效
|
|
小结
通过以上这些措施可以有效防范暴力破解VPS,平时使用官方软件也是提升安全性的一大举措,总而言之,没有绝对的安全,但是只要我们平时稍加留心就不会给破解者可乘之机。