网站搜索

如何保护和强化 OpenSSH 服务器


在访问服务器、路由器和交换机等远程设备时,强烈建议使用 SSH 协议,因为它能够加密流量并阻止任何可能试图窃听您连接的人。

尽管如此,SSH 的默认设置并非万无一失,需要进行额外的调整才能使协议更加安全。在本指南中,我们将探讨可用于保护和强化服务器上 OpenSSH 安装的不同方法。

1. 设置 SSH 无密码身份验证

默认情况下,SSH 要求用户在登录时提供密码。但事实是:黑客可以猜测密码,甚至使用特殊的黑客工具进行暴力攻击,并获得对您系统的访问权限。为了安全起见,强烈建议使用 SSH 无密码身份验证。

第一步是生成由公钥私钥组成的 SSH 密钥对。 私钥驻留在您的主机系统上,而公钥随后被复制到远程服务器。

成功复制公钥后,您现在可以通过 SSH 无缝连接到远程服务器,而无需提供密码。

下一步是禁用密码验证,为此,您需要修改 SSH 配置文件。

sudo vim /etc/ssh/sshd_config

在配置文件中,滚动并找到以下指令。取消注释并将选项 'yes' 更改为 'no'

PasswordAuthentication no

然后重新启动 SSH 守护进程。

sudo systemctl restart sshd

此时,您只能使用 SSH 密钥身份验证访问远程服务器。

2. 禁用用户 SSH 无密码连接请求

加强服务器安全性的另一种推荐方法是禁用没有密码的用户的 SSH 登录。这听起来有点奇怪,但有时系统管理员可以创建用户帐户并忘记分配密码 - 这是一个非常糟糕的主意。

要拒绝没有密码的用户的请求,请再次转到 /etc/ssh/sshd_config 处的配置文件,并确保您具有以下指令:

PermitEmptyPasswords no

然后重新启动 SSH 服务以使更改生效。

sudo systemctl restart sshd

3. 禁用 SSH Root 登录

如果黑客设法暴力破解您的 root 密码,那么毫无疑问会发生什么。允许远程 root 登录总是一个坏主意,可能会危及系统的安全。

因此,始终建议您禁用 SSH 远程 root 登录,而坚持使用常规非 root 用户。再次转到配置文件并修改此行,如图所示。

PermitRootLogin no

完成后,重新启动 SSH 服务以使更改生效。

sudo systemctl restart sshd

此后,远程 root 登录将被停用。

4.使用SSH协议2

SSH 有两个版本:SSH 协议 1协议 2。 SSH 协议 2 于 2006 年推出,由于其强大的加密检查、批量加密和强大的算法,比协议 1 更安全。

默认情况下,SSH 使用协议 1。要将其更改为更安全的协议 2,请将以下行添加到配置文件中:

Protocol 2

与往常一样,重新启动 SSH 以使更改生效。

sudo systemctl restart sshd

今后,SSH 将默认使用协议 2

要测试是否不再支持 SSH 协议 1,请运行以下命令:

ssh -1 user@remote-IP

您将收到一条错误消息“不再支持 SSH 协议 v.1”。

在本例中,命令是:

ssh -1 [email 

此外,您只需指定 -2 标记即可确保协议 2 是正在使用的默认协议。

ssh -2 [email 

5.设置SSH连接超时空闲值

如果您的 PC 长时间无人看管且 SSH 连接处于空闲状态,可能会带来安全风险。有人可以简单地经过并接管您的 SSH 会话并做任何他们想做的事。因此,为了解决这个问题,明智的做法是设置一个空闲超时限制,超过该限制后,SSH 会话将被关闭。

再次打开 SSH 配置文件并找到指令“ClientAliveInterval”。分配一个合理的值,例如我将限制设置为180秒。

ClientAliveInterval 180

这意味着如果 3 分钟(相当于 180 秒)后没有注册任何活动,则 SSH 会话将被删除。

然后重新启动 SSH 守护程序以使所做的更改生效。

sudo systemctl restart sshd

6. 限制某些用户的 SSH 访问

为了增加安全层,您可以定义需要 SSH 协议登录并在系统上执行远程任务的用户。这可以阻止任何其他可能在未经您批准的情况下尝试访问您的系统的用户。

与往常一样,打开配置文件并附加指令“AllowUsers”,后跟您要授予的用户名。在下面的示例中,我允许用户“howtoing”和“james”通过 SSH 远程访问系统。任何其他尝试获得远程访问权限的用户都将被阻止。

AllowUsers tecmint james

此后重新启动 SSH 以使更改保留。

sudo systemctl restart sshd

7. 配置密码尝试次数限制

添加安全层的另一种方法是限制 SSH 登录尝试的次数,这样在多次尝试失败后,连接就会断开。因此,再次转到配置文件并找到“MaxAuthTries”指令并定义最大尝试次数的值。

在此示例中,限制已设置为 3 次尝试,如图所示。

MaxAuthTries 3

最后,像前面的场景一样重新启动 SSH 服务。

您可能还会发现以下与 SSH 相关的文章很有用:

  • 如何在 Linux 中从源代码安装 OpenSSH 8.0 服务器
  • 如何在 CentOS/RHEL 8 上安装 Fail2Ban 来保护 SSH
  • 如何在 Linux 中更改 SSH 端口
  • 如何在 Linux 中创建 SSH 隧道或端口转发
  • 在 Linux 中加速 SSH 连接的 4 种方法
  • 如何在 Linux 中查找所有失败的 SSH 登录尝试
  • 如何在 Linux 中断开不活动或空闲的 SSH 连接
结论

这是您可以采取的一些保护 SSH 远程连接的措施的综述。需要补充的是,您应该始终为具有远程访问权限的用户分配强密码,以阻止暴力攻击。我们希望您认为本指南富有洞察力。非常欢迎您的反馈。