适用于 Linux 的 OpenSSH 安全加固指南
在此页
- SSH 是如何工作的?
- 使用最佳实践配置 SSH
- 1。更改默认端口
- 2。禁止以根用户身份登录
- 3。设置协议版本
- 4。密码复杂度
SSH 是 Linux 平台上使用最广泛的系统管理协议之一。它可用于许多基于 Unix、Linux 和 MacOS 的操作系统。它基于客户端-服务器模型,其中一台机器运行服务器组件,另一台机器使用客户端工具访问它。
SSH 是如何工作的?
客户端 (ssh) 通过向服务器发送请求来启动连接。服务器使用服务器守护进程 (sshd) 侦听传入的请求。它使用其公钥向尝试连接到它的客户端验证自己:
通过这种方式,客户端可以确保它正在连接到正确的 SSH 服务器。完成后,客户端就可以访问服务器了。如果您使用的是 Windows 客户端,则必须使用 putty 等工具连接到服务器。客户端和服务器可以安装在同一系统上,这意味着您可以使用客户端工具访问其他机器,或者您的系统可以是服务器本身,可以被其他人访问。在这种情况下,配置文件位于同一目录中,但名称略有不同。目录位置是“/etc/ssh”,ssh 客户端配置文件的名称是“ssh_config”,服务器配置文件的名称是“sshd_config”:
如果你的系统上有这两个文件,你应该明智地选择你需要配置的文件。在大多数情况下,这是我们需要为安全性配置的服务器,因为它为系统上的潜在访问打开了大门。我们首先从检查服务器上 SSH 守护进程或 sshd 的状态开始。通过这种方式,我们可以看到它是否正在运行并启用开机自动启动。下面的命令将检查 sshd 状态:
$systemctl 状态 ssh.service
或者使用下面的:
$systemctl 状态 sshd.service
从屏幕截图中我们可以看到该服务处于活动状态并已启用。它已经运行了过去 6 个小时。当您按向右箭头展开终端视图时,您会注意到它正在侦听默认端口 22。
有时,当我们使用 SSH 本身连接到远程系统时,我们会更改远程系统的 SSH 配置文件。在这种情况下,我们应该使用重新加载命令而不是重新启动命令。这样我们就不太可能断开连接。
使用最佳实践配置 SSH
我认为现在是开始配置 SSH 服务器配置的时候了。在我们开始使用 SSH 配置文件之前,我们应该使用默认设置备份该文件:
$sudo cp /etc/ssh/sshd_config ~/sshd_config.bkp
执行备份后,我们可以放心,如果我们弄乱了主文件并破坏了 SSH,我们可以使用备份文件恢复正常。1.更改默认端口
sshd 守护进程默认监听服务器的 22 端口。建议将此值更改为其他数字,以减少使用脚本进行自动攻击的范围。这种方法称为通过默默无闻的安全性。为此,打开以下文件并查找包含文本“#Port 22”的行。
$sudo nano /etc/ssh/sshd_config
取消注释“#Port 22”行并将“22”更改为其他未在您的系统上使用的端口号。我们必须将其更改为 222 并重新启动服务。现在使用带有选项 p 的 ssh 命令来指定新端口:
$ssh [电子邮件受保护]_ip -p 222
2.禁止以root用户登录
Root 是任何 Linux 系统上的最终用户,可以访问系统上的所有资源。如果您不需要严格的 root 访问权限,则应在您的服务器上禁用 root 登录功能。为此打开上面相同的文件:
$sudo nano /etc/ssh/sshd_config
并将“PermitRootLogin”参数设置为“no”。这将确保服务器免受针对根帐户的随机攻击。默认选项是“禁止密码”,它允许基于公钥身份验证的登录但拒绝基于密码的登录。
3.设置协议版本
SSH 的旧协议版本是 1,与 SSH2 相比,它的安全性较低,并且它们确实具有不同的网络实现,并且彼此也不兼容。要检查哪个协议版本在您的服务器上处于活动状态,请再次打开 sshd_config 文件并查找协议行:
$cat /etc/ssh/sshd_config | grep协议
如果您的输出为空,则 OpenSSH 可能正在使用版本 2,因为在我们的例子中就是如此。另一种方法是使用 netcat 命令实用程序:
$nc 本地主机 22
示例输出:
SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.4
从输出中我们可以看到 SSH2 在我们的系统上处于活动状态。
要检查远程服务器正在运行的协议版本,请尝试使用带有 -Q(查询)选项的 ssh 客户端连接到它:$ssh -Q 协议版本 [电子邮件保护]_name
上图显示了从 Kali Linux 访问 Ubuntu ssh 服务器时的 SSH 版本 2。
4. 密码复杂度
弱密码总是容易被利用,因此空密码更容易被利用。因此,应在 sshd_config 文件中将 PermitEmptyPasswords 选项设置为“no”。同样,应限制使用错误密码登录尝试的次数,以减少暴力攻击的机会。这可以通过将“MaxAuthTries”选项设置为一些较小的值(如 3)来实现。
从上图我们可以看到,当我们将‘MaxAuthTries’的值设置为3时,我们在输错3次密码后SSH被拒绝。另一个主要的安全方面是使用公钥身份验证进行登录。基于密钥的身份验证模型不易受到暴力攻击。同样,我们可以使用 PAM 身份验证模块来进一步加强 SSH 服务器。结论
在本指南中,我们试图涵盖保护 SSH 服务器的最重要的要点,并将它们总结为四个要点。虽然本指南并不完整,但您甚至可以找到更多领域来进一步加强您的 SSH 服务器。例如您可以尝试添加横幅消息来提醒用户通过 SSH 使用您的系统。您还可以拒绝使用密码登录,并使用基于密钥的身份验证进行无密码登录。另一个有趣的事情是你可以限制 SSH 用户的数量和他们的连接时间。