前段时间 OpenSSH 爆出一个高危漏洞 CVE-2024-6387,影响诸多版本,当然涉及到数量庞大的 Linux 服务器。

针对这种漏洞的补丁当然出的也很及时,给自己的服务器更新一下最新的 OpenSSH 就可以了。注意这里说的最新,是指当前服务器所安装的版本的最新更新,没必要非得去更新为不受影响的最新版 9.8p1 (2024-07-01),因为很多 Linux 发行版自带的版本都不是最新的。当然也可以自己下载最新的源码编译安装,但是我觉得这样太麻烦了,我还是喜欢自带的更新源里面的。

漏洞补好了,但是也让我意识到一个问题,其实也不是刚刚产生的这个想法,很早很早之前就有了,那就是何不直接把 SSH 的监听端口改了,把默认的 22 端口改成一个只有自己知道的随机端口。这样还是可以稍微增加一点安全性的,因为至少在被暴力破解前坏人们得先知道你的 SSH 的真实端口。

之所以说很早就想到了,而没有去实施,是因为我觉得我已经把服务器配置得相对来说比较安全了。首先,我启用了服务器运营商自带的防火墙,只允许自己的 IP 访问特定端口。其次,我还禁用了 SSH 的密码登录和 root 登录方式,只能使用普通用户配合私钥来登录。最后,我的服务器也没有什么值得攻破的,不会有人来强力攻击。综上,我就没有去更改 SSH 默认端口。

那么如何更换 SSH 默认的 22 端口呢,网上教程一大堆,随便一搜就能找到。不过这里提一点,网上很多教程都是说修改 /etc/ssh/sshd_config 文件,我觉得这样做不好,我还是更喜欢通过引用自定义配置文件来覆盖的方式,而且明明 /etc/ssh/sshd_config 文件里面也写的很清楚:

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

# To modify the system-wide sshd configuration, create a  *.conf  file under
#  /etc/ssh/sshd_config.d/  which will be automatically included below
Include /etc/ssh/sshd_config.d/*.conf

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#

所以,我们按照官方说的来,在 /etc/ssh/sshd_config.d/ 目录下面新建一个 *.conf 文件(文件名随意,比如 90-override.conf),然后只需要在里面添加一行,比如我们要修改端口为 7890:

Port 7890

保存后,我们还需要通知防火墙放行 7890 端口(如果在服务器运营商那里也设置有防火墙,记得放行 7890 端口,同时删除 22 端口),另外,如果启用了 SELinux,还要额外告诉 SELinux 这一更改,运行 sudo semanage port -a -t ssh_port_t -p tcp 7890 即可。然后我们来验证一下,改动是否都生效了:

sudo semanage port -a -t ssh_port_t -p tcp 7890 #通知 SELinux 新增端口

sudo semanage port -l | rg ssh #查看是否生效
ssh_port_t                     tcp      7890, 22 #此时我们能看到有两个端口了,那么可不可以删除 22 端口呢?我觉得没必要了,因为很麻烦😅

sudo systemctl restart sshd #重启 SSH 服务器

sudo ss -tuln | rg 7890 #运行此命令,能看到系统已经在监听修改后的端口
tcp   LISTEN 0      128                            0.0.0.0:7890       0.0.0.0:*
tcp   LISTEN 0      128                               [::]:7890          [::]:*

再次确认没有问题了,就可以登出当前终端,重新登录测试一下,正常情况是 22 端口无法登录,7890 端口可以登录。至此,我们就把 SSH 的默认 22 端口更换为自己想要的端口了。