10 个可操作的 SSH 加固技巧来保护你的 Linux 服务器

SSH 是访问远程服务器最常用的方法之一。 SSH 也是 Linux 服务器受损的最常见原因之一。

不要误会我的意思。 SSH(安全外壳)在设计上是一个非常安全的协议,但这并不意味着您应该将其保留为默认配置。

在本文中,我将分享一些提高 SSH 安全性从而保护您的 Linux 服务器的实用方法。

在 Linux 服务器上保护 SSH 的提示

不要盲目地遵循这里提到的所有 SSH 加固技巧。 阅读所有这些,然后看看哪些适合您的需要。 另请记住,某些提示可能与其他提示不兼容。

为了 example,如果您禁用基于密码的 SSH 登录,则无需使用 Fail2Ban 类型的解决方案。

如果您了解 SSH 基础知识,您就会知道 SSH 配置文件位于 /etc/ssh/sshd_config.

此处提到的大多数 SSH 加固技巧都需要您编辑此配置文件。 这就是为什么备份原始文件是个好主意。 如果您对 SSH 配置文件进行任何更改,您还需要重新启动 SSH 服务。

让我们看看您可以采取哪些步骤来保护您的 SSH 服务器。

1.禁用空密码

是的。 在 Linux 中可以拥有没有任何密码的用户帐户。 如果这些用户尝试使用 SSH,他们也不需要密码来通过 SSH 访问服务器。

这是一个安全风险。 您应该禁止使用空密码。 在 /etc/ssh/sshd_config 文件中,确保将 PermitEmptyPasswords 选项设置为 no。

PermitEmptyPasswords no

2.更改默认SSH端口

默认的 SSH 端口是 22,大多数攻击脚本检查都是围绕这个端口编写的。 更改默认 SSH 端口应该会增加一个额外的安全层,因为攻击次数(来自端口 22)可能会减少。

在配置文件中搜索端口信息,改成不同的:

Port 2345

您必须记住或记下端口号,否则您也可能无法使用 SSH 访问您的服务器。

3.禁用通过SSH的root登录

老实说,应该禁止使用服务器作为 root 本身。 这是有风险的,而且不会留下任何审计线索。 机制如 sudo 仅出于这个原因而存在。

如果你有 sudo 在您的系统上添加的用户,您应该使用它 sudo 用户通过 SSH 而不是 root 访问服务器。

您可以通过修改 PermitRootLogin 选项并将其设置为 no 来禁用 root 登录:

PermitRootLogin no

4.禁用ssh协议1

这是如果您使用的是较旧的 Linux 发行版。 一些较旧的 SSH 版本可能仍然有 SSH 协议 1 可用。 该协议存在已知漏洞,不得使用。

较新的 SSH 版本会自动启用 SSH 协议 2,但仔细检查它并没有什么坏处。

Protocol 2

5.配置空闲超时间隔

空闲超时间隔是 SSH 连接可以在没有任何活动的情况下保持活动的时间量。 这种空闲会话也是一种安全风险。 配置空闲超时间隔是个好主意。

超时间隔以秒为单位,默认为 0。您可以将其更改为 300 以保持五分钟的超时间隔。

ClientAliveInterval 300

在此时间间隔之后,SSH 服务器将向客户端发送一条活动消息。 如果没有得到响应,连接将被关闭,最终用户将被注销。

您还可以控制在断开连接之前发送活动消息的次数:

ClientAliveCountMax 2

6. 只允许选定用户通过 SSH 访问

在安全方面,您应该遵循最小特权原则。 不要在不需要的时候赋予权利。

您的 Linux 系统上可能有多个用户。 您是否需要允许对所有这些设备进行 SSH 访问? 也许不是。

这里的一种方法是允许对选定的少数用户进行 SSH 访问,从而限制所有其他用户。

AllowUsers User1 User2

您还可以将选定的用户添加到新组,并只允许该组访问 SSH。

AllowGroups ssh_group

您还可以使用 DenyUsers 和 DenyGroups 来拒绝某些用户和组的 SSH 访问。

7.禁用X11转发

X11 或 X 显示服务器 是图形环境的基本框架。 这 X11转发 允许您通过 SSH 使用 GUI 应用程序。

基本上,客户端在服务器上运行 GUI 应用程序,但由于 X11 转发,机器之间打开了一个通道,并且 GUI 应用程序显示在客户端计算机上。

X11 协议不是面向安全的。 如果您不需要它,您应该在 SSH 中禁用 X11 转发。

X11Forwarding no

8. 自动缓解蛮力攻击

要阻止 SSH 暴力攻击,您可以使用安全工具,例如 Fail2Ban.

Fail2Ban 检查来自不同 IP 地址的失败登录尝试。 如果这些不良尝试在设定的时间间隔内超过阈值,则会在一段时间内禁止 IP 访问 SSH。

您可以根据自己的喜好和要求配置所有这些参数。 我已经写了一份关于使用 Fail2Ban 的详细介绍指南,你应该阅读它。

9.禁用基于密码的SSH登录

无论您尝试了多少,您总是会在您的 Linux 服务器上看到通过 SSH 进行的错误登录尝试。 攻击者很聪明,他们使用的脚本通常会处理 Fail2Ban 之类的工具的默认设置。

要摆脱持续的暴力攻击,您可以选择仅基于密钥的 SSH 登录。

在这种方法中,您将远程客户端系统的公钥添加到 SSH 服务器上的已知密钥列表中。 这样,这些客户端机器无需输入用户帐户密码即可访问 SSH。

完成此设置后,您可以禁用基于密码的 SSH 登录。 现在,只有具有指定 SSH 密钥的客户端机器才能通过 SSH 访问服务器。

在您采用这种方法之前,请确保您已将自己的公钥添加到服务器并且它可以工作。 否则,如果您使用像 Linode 这样的云服务器,而您没有对服务器的物理访问权限,您将自己锁定并可能无法访问远程服务器。

阅读此详细教程以了解如何禁用基于密码的 SSH 身份验证。

10. 使用 SSH 的两因素身份验证

要将 SSH 安全性提升到一个新的水平,您还可以启用双因素身份验证。 在这种方法中,您会通过手机、电子邮件或第三方身份验证应用程序收到一次性密码。

您可以阅读有关使用 SSH 设置两因素身份验证的信息 这里.

结论

您可以使用以下命令查看 SSH 服务器的所有参数:

sshd -T

这样,您可以轻松查看是否需要更改任何参数以增强 SSH 服务器的安全性。

您还应该保持 SSH 安装和系统更新。

我列出了一些实用的 SSH 加固方法。 当然,还有其他几种方法可以保护 SSH 和 Linux 服务器。 不可能在一篇文章中列出所有这些。

我希望这些提示对您有所帮助。 请让我知道您认为哪些技巧有用。

您知道有关 SSH 安全性的任何其他提示吗? 为什么不在评论部分与我们分享呢?