SSH 是 Secure Shell 的缩写,用来管理 Linux 服务器。如果大家购买的不是 managed VPS 的话,需要大家自己 SSH 登录到 VPS 进行管理,作为一个必备的服务,我们一定要做好安全优化,这篇日志给大家介绍一下 SSH 服务器端的安全优化。
前言
1、SSH服务的配置文件位于 /etc/ssh/sshd_config
,我们可以使用vi编辑器进行修改编辑,修改配置文件前,先备份一份。
2、修改完配置文件后,使用配置文件测试工具进行校验一遍,看看配置文件有没有问题,如果没有问题,就不会有任何的输出,代码如下:
sshd -t
3、配置文件没有问题后,需要重新加载 SSH 服务使配置文件生效:
systemctl reload sshd.service
4、查看 SSH 服务配置信息:
sshd -T
服务器端配置
1、修改端口号
SSH服务默认使用的是22端口,可以修改成不常用的端口,再使用防火墙对端口进行访问过滤,确保安全。
Port 22222
2、禁用 rhosts
rhosts 是一种不是很安全的身份验证系统,现在也不常用了。默认情况下是处于禁用状态的,为了安全起见,再次检查一下。
IgnoreRhosts yes
3、禁用空密码
每个账户应该有密码保护,默认情况下就是禁用空密码。
PermitEmptyPasswords no
4、限制密码尝试错误次数
这个可以用来防止暴力破解。
MaxAuthTries 3
5、采用公钥登录
相比帐号密码方式,公钥登录( macOS 、 Windows )方式更方便,也更安全,可以有效阻止暴力破解。
PubkeyAuthentication yes PasswordAuthentication no
6、禁用root登录
建议使用一般用户登录,再进行提权登录root账户。因为 Linux 都有一个 root 用户,很容易遭受暴力破解,其他用户登录,选一个好的用户名,大家很难猜到用户名。
PermitRootLogin no
7、设置SSH协议版本
目前一般都是第二版,虽然第一版仍然可用,但是不够安全,建议设为2。
Protocol 2
8、关闭 X11Forwarding
X11Forwarding 协议没有考虑安全因素,在于本地建立连接的时候,服务器端可能会发送恶意指令到本地。如果使用不到,建议关闭。
X11Forwarding no
9、使用 HashKnownHosts
每次登录,在客户端的 known_hosts 文件中有一条关于远程主机的签名记录,恶意程序可能会利用这个记录进行扩散。 HashKnownHosts 会对这些记录进行哈希处理。注意,这条参数在本地客户端的 /etc/ssh/ssh_config
配置文件中修改。
HashKnownHosts yes
下面两张图是对比,第一张图是没有开启 HashKnownHosts 的记录,第二张是开启 HashKnownHosts 后的记录。
扩展阅读
1、本文主要翻译自:https://linux-audit.com/audit-and-harden-your-ssh-configuration/
2、HashKnownHosts 参数配置:https://linux-audit.com/audit-ssh-configurations-hashknownhosts-option/