目录
Linux 提升VPS安全性

刚刚接触VPS的时候,对于VPS的安全性并没有什么概念,使用PuTTY客户端,以root账户在22端口登录的,刚开始登录几次都没出现什么状况,然而隔数分钟登录的时候就出现了类似以下的提示,这才让我产生了要提高VPS安全性的想法。

Last failed login: Sat DEC 6 22:45:12 EST 2020 from static-15-64-34.rpnspl.com on ssh:notty
There were 24 failed login attempts since the last successful login.
Last login: Sat DEC 6 23:16:26 2020 from ip

这里的ip并不是我的IP地址,也就是说有人(或机器人)在恶意试探我的VPS密码。看到这提示,搜索发现这个现象非常普遍,多数都是被机器人扫描然后试图暴力破解,如果不加以防范,代价会很大。

那么如何知道自己的VPS账号正在遭受扫描和暴力破解呢?简单的方法就是查看日志:

1
2
3
4
5
6
7
8
# 查看登录成功的用户信息
last
# 最新的登录记录在最前面,所以可以用以下命令来查看。
last | less
# 查看登录失败的用户信息
lastb
# 查看登录日志
tail /var/log/secure

也可以执行以下命令,查询出来的结果中包含了ip地址=数量就是攻击者信息。

1
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}'

如何来增强VPS账号的安全性呢?除了养成使用正规软件的好习惯外,还要从VPS本身来加强VPS账号的安全性。

  • Linux有一个自动统计VPS登录错误的工具:Denyhosts,一旦登录VPS账号错误次数超过了Denyhosts的安全设置,Denyhosts就会将该IP记录下来,同时将其放入黑名单当中,禁止该IP在某一段时间内继续访问VPS,通过它可以实现自动封锁恶意IP
  • 默认的SSH端口是22,通过修改自己的SSH端口先为扫描者增加一道端口门槛
  • VPS默认的账号是root,如果我们禁用了root,那么要攻破账号又得先暴力猜测VPS的账号,难度又增加几分
  • 如果还不放心,我们可以直接禁用密码登录验证VPS的方式,改用密钥登录,这样安全系数是相当高了

Denyhosts攻击

  1. Linux各平台现在基本上都可以直接安装Denyhosts了,直接运行命令安装

    1
    yum install denyhosts
  2. 安装好了Denyhosts,默认的配置基本上就可以防御一定的暴力攻击了,/etc/hosts.deny文件里保存了被屏蔽的记录。

  3. 如果你要自定义Denyhosts的相关配置,执行:vi /etc/denyhosts.conf,相关参数的说明可以自行搜索,一般用户默认即可

修改SSH端口

第一步、使用xshell或者putty登录VPS,找到其中的#Port 22(约第13行),去掉#,把port 22修改为任意的5个数字,如:port 16753

为避免修改删除默认端口22后无法链接SSH,应先在默认的SSH端口配置下面添加一个我们要用的新的端口。
Port 22
Port 16753

输入命令

1
vi /etc/ssh/sshd_config

第二步、重启SSH。保存退出后,需要重启SSH才可以生效。

centos系统重启SSH命令

1
service sshd restart

debian或者ubuntu系统SSH重启命令

1
service ssh restart

第三步、设定防火墙开启端口

输入命令

1
2
3
/sbin/iptables -I INPUT -p tcp --dport 16753(这里的数字改成你刚才修改的端口) -j ACCEPT

/etc/init.d/iptables save

iptables -L -n检查端口是否开启。

禁用Root账户

禁用root账户之前,必须先新建一个新的账户。

1
2
useradd user #添加用户名
passwd user #为user用户设置密码

然后编辑配置文件

1
vi /etc/ssh/sshd_config

找到里面的PermitRootLogin yes,将后面的yes改成no,如果没有这一行则直接加入即可。保存后重启SSH服务以使配置生效。

1
systemctl restart sshd.service

使用密钥登录

生成密钥

SSH登录方式有账号+密码和密钥认证两种形式,为了阻止暴力破解VPS的账号和密码,我们可以放弃密码验证的方式,改用密钥文件验证。

以普通用户(如user)执行以下命令,在VPS上生成密钥文件

1
ssh-keygen -t rsa

生成密钥时会询问你密钥保存的位置,默认是/username/.ssh,保持默认即可,你还可以为你的密钥设置一个密码,默认为空。密钥生成后,进入密钥存放的目录中,执行以下命令,将公钥生成一个新的文件。

1
cat id_rsa.pub >> authorized_keys

将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

1
2
/home/user
/home/user/.ssh

2、下面公钥文件的所有权必须是user,所属组也应该是user,权限必须为644

1
/home/user/.ssh/authorized_keys

3、下面私钥文件的所有权必须是user,所属组也应该是user,权限必须是600

1
/home/user/.ssh/id_rsa

接着上面的操作,这次需要获取root权限,首先输入命令su再输入root密码获取root权限,然后依次执行以下命令

1
2
3
4
5
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

编辑SSH配置文件

1
vi /etc/ssh/sshd_config

找到AuthorizedKeysFile这项(如果没有则添加),修改为

1
AuthorizedKeysFile /etc/ssh/%u/authorized_keys

保存后重启SSH服务以使配置生效

1
systemctl restart sshd.service

禁止密码登录

注意:请确认你已经可以通过密钥认证的方式登录VPS

有了密钥登录VPS,我们就可以禁止用密码登录这种验证方式了,还是编辑SSH配置文件

1
vi /etc/ssh/sshd_config

找到PasswordAuthentication(没有则添加)并修改后面的yesno,保存后重启SSH服务以使配置生效

1
systemctl restart sshd.service

总结

通过以上这些措施可以有效防范暴力破解VPS,平时使用官方软件也是提升安全性的一大举措,总而言之,没有绝对的安全,但是只要我们平时稍加留心就不会给破解者可乘之机。

参考

文章作者: Kylen Chan
文章链接: https://booku.ltd/posts/ssh-port/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kylen's Blog

评论