# 顶级SSH安全最佳实践

> 来源：梦飞idc云平台 | 原文：https://www.mfisp.com/8864.html | 发布：2022-08-03 | 更新：2022-08-03 | 分类：IDC云库

SSH是 Linux 服务器的常用系统管理实用程序。无论您是在运行 CentOS、Debian、Ubuntu 还是介于两者之间的任何东西；如果您以前登录过 Linux 服务器，那么您可能至少听说过它。

**SSH**是 Linux 服务器的常用系统管理实用程序。无论您是在运行 CentOS、Debian、Ubuntu 还是介于两者之间的任何东西；如果您以前登录过 Linux 服务器，那么您可能至少听说过它。

 

![SSH是如何工作的？如何在您的VPS上设置SSH？](https://www.mfisp.com/wp-content/uploads/2022/05/20220509113326eUTBxk.jpg)

 

首字母缩略词 SSH 代表“安全套接字外壳”，顾名思义，该协议的构建考虑了安全性。许多服务器管理员认为 SSH 开箱即用是非常安全的，而且在大多数情况下，他们是正确的。默认情况下，SSH 具有开箱即用的出色安全功能，例如对通信进行加密以防止中间人攻击，以及主机密钥验证以提醒用户自上次登录后服务器的身份是否发生变化。

 

尽管如此，互联网上仍有大量服务器运行 SSH，攻击者喜欢寻找可能影响大量服务器的攻击媒介。在安全性方面，往往会牺牲便利性，因此许多服务器管理员有意或不加思索地让他们的服务器运行默认的 SSH 安装。在大多数情况下，这对他们中的大多数人来说不是问题，但是您可以采取一些步骤来领先一步。毕竟，我相信稍微领先一点是可以达到的最佳安全实践之一，这样您的服务器就可以避免成为可能吸引攻击者的低垂果实之一。

 

考虑到这一点，这里有一些你可能想要为你的 Linux 服务器考虑的技术，以帮助提高你的 SSH 安全性。

 

## **蛮力保护**

 

提高 SSH 安全性的最常用技术之一是蛮力保护。这是因为运行 SSH 服务的服务器管理员面临的最常见的安全问题之一是来自自动机器人的暴力攻击。机器人会尝试猜测服务器上的用户名和密码，但暴力保护可以在一定数量的失败后自动禁止他们的 IP 地址。

 

一些常见的开源蛮力保护解决方案是ConfigServer Firewall (CSF)和Fail2Ban。CSF 在 cPanel 服务器上最常见，因为它有一个 WHM 插件。

 

![顶级SSH安全最佳实践](https://www.mfisp.com/wp-content/uploads/2021/12/2021122305535218.jpg)

 

#### **蛮力保护的优缺点**

 

**优点**

 
 
- 通过自动禁止它们来帮助减少来自机器人的登录失败，从而使机器人有机会猜测您的一个 SSH 帐户的登录详细信息的可能性大大降低。 
- 非常容易实现，无需更改 SSH 配置。 

 

**缺点**

 
 
- 这些蛮力程序无法将机器人与您和您的用户区分开来。如果您意外登录失败太多次，您可能会将自己锁定在外。如果发生这种情况，请确保您有可靠的方法来连接服务器，例如将您自己的 IP 地址列入白名单，并使用 KVM 或 IPMI 控制台作为最后的手段。 

 

## **更改 SSH 端口号**

 

我看到的最常见的技术之一是将 SSH 端口号更改为默认端口 22/tcp 以外的其他值。

 

此更改相对简单，例如，如果您想将 SSH 端口从 22 更改为 2222，您只需像这样更新 sshd_config 文件的 Port 行：

 

`Port 2222`

 

顺便说一句，端口 2222 是一个非常常见的“备用”端口，因此一些蛮力机器人可能仍会尝试此端口。最好选择更随机的东西，比如 2452。它甚至不必包含 2，如果你想要的话，你的 SSH 端口可以是 6543。任何不被服务器上其他程序使用的端口号高达 65535 都是公平的游戏。

 

![顶级SSH安全最佳实践](https://www.mfisp.com/wp-content/uploads/2021/12/2021121506315230.jpg)

 

#### **更改 SSH 端口号的优缺点**

 

**优点**

 
 
- 这种技术通常在减少自动机器人攻击方面非常有效。其中大部分是非智能脚本，只会寻找在端口 22 上运行的服务器。 

 

**缺点**

 
 
- 这种技术相当于“默默无闻的安全”。正在尝试备用端口的机器人或任何配备了诸如 nmap 之类的端口扫描工具的人将在几分钟内轻松找到服务器的新端口。 
- 这种技术会使 SSH 服务器的访问更加不便，因为您现在需要在连接时指定端口号，而不仅仅是 IP。 

 

## **通过 SSH 禁用 Root 登录**

 

另一种常见的技术是完全禁用 root 用户帐户通过 SSH 登录，或者没有授权的 SSH 密钥。您仍然可以通过 SSH 获得 root 访问权限，方法是向您的受限用户之一授予“sudo”权限，或者使用“su”命令使用密码切换到 root 帐户。

 

这可以通过调整 sshd_config 文件中的“PermitRootLogin”设置来配置。

 

要仅允许使用 SSH 密钥进行 root 登录，您可以将这一行更改为：

 

`PermitRootLogin without-password`

 

要完全禁止通过 SSH 进行 root 登录，您可以将该行更改为：

 

`PermitRootLogin no`

 

![顶级SSH安全最佳实践](https://www.mfisp.com/wp-content/uploads/2021/12/2021121306385539.jpg)

 

#### **通过 SSH 禁用 Root 登录的优缺点**

 

**优点**

 
 
- 这种技术有点帮助，因为用户名“root”对于大多数 LInux 服务器（如 Windows 服务器上的“Administrator”）是通用的，所以很容易猜到。现在禁用此帐户登录意味着攻击者还必须正确猜测用户名才能获得访问权限。 
- 如果您不使用 sudo，此技术会将 root 访问权限置于第二个密码之后，要求攻击者在完全访问服务器之前正确知道或猜测两个密码。（Sudo 可以在一定程度上减少这种好处，因为它通常被配置为允许使用与用户登录相同的密码进行 root 访问。） 

 

**缺点**

 
 
- 如果您的 sudo 配置出现问题，这种方法可能会增加您被锁定在服务器之外的风险。在这种方法中，如果您被锁定在 root 之外，使用另一种访问服务器的方法（例如远程控制台）仍然是一个好主意。 

 

## **禁用密码验证，支持密钥验证。**

 

每个人告诉你的关于密码的第一件事就是让它们变长，难以猜测，而不是基于字典单词。SSH 密钥可以将密码验证替换为通过密钥文件进行的验证。

 

与密码相比，SSH 密钥非常安全，因为它们包含大量随机数据。如果您曾经看过 SSL 证书或密钥文件，那么 SSH 密钥看起来与此类似。这是一个非常大的随机字符串。

 

您无需输入密码即可登录 SSH 服务器，而是使用此密钥文件进行身份验证，这与网站上 SSL 证书的工作方式非常相似。

 

![顶级SSH安全最佳实践](https://www.mfisp.com/wp-content/uploads/2021/12/2021121306123177.jpg)

 

如果您想禁用密码验证，您可以通过修改 sshd_config 文件中的“PasswordAuthentication”设置来实现，如下所示：

 

密码验证无

 

#### **禁用密码身份验证的优点和缺点，有利于密钥身份验证。**

 

**优点**

 
 
- 此方法大大降低了对您的 SSH 服务器的暴力尝试成功的可能性。 
 
  - 大多数蛮力机器人一开始只是尝试输入密码，他们将使用完全错误的身份验证方法尝试闯入，因此这些机器人永远不会成功。 
  - 即使有人在进行有针对性的攻击，SSH 密钥也比密码长得多，以至于正确猜测一个数量级要困难几个数量级，这仅仅是因为存在如此多的熵和潜在的组合。 

 

**缺点**

 
 
- 这种技术会使访问服务器变得不那么方便。如果您手边没有密钥文件，您将无法通过 SSH 登录。 
- 由于上述原因，您也增加了被锁定在 SSH 之外的风险，例如，如果您丢失了密钥文件。因此，如果您需要让自己重新进入服务器，最好有另一种访问服务器的方法，例如远程控制台。 

 

如果有人掌握了您的密钥文件，就像密码一样，他们现在将能够以您的身份登录。但是，与密码不同，密钥很容易过期并创建新密钥，并且新密钥将以相同的方式运行。

 

关于 SSH 密钥方法的另一个有趣的怪癖是您可以在一个帐户上授权多个 SSH 密钥，而一个帐户通常只能有一个密码。

 

值得注意的是，即使打开了密码验证，您也可以使用 SSH 密钥访问帐户。默认情况下，如果您授权密钥，SSH 密钥将用作身份验证方法。

 

![顶级SSH安全最佳实践](https://www.mfisp.com/wp-content/uploads/2021/12/2021121306074757.jpg)

 

## **仅允许列入白名单的 IP**

 

一种非常有效的安全技术是只允许列入白名单的 IP 地址连接到 SSH 服务器。这可以通过防火墙规则来完成，只向授权的 IP 地址开放 SSH 端口。

 

这对于家庭用户或共享网络托管服务提供商来说可能是不切实际的，因为很难知道哪些 IP 地址需要访问，而且家庭 IP 地址往往是动态的，因此您的 IP 地址可能会改变。但是，对于您使用 VPN 或主要从静态 IP 地址访问的情况，它可能是一种低维护且极其安全的解决方案。

 

#### **仅允许列入白名单的 IP 的利弊**

 

**优点**

 
 
- 这种方法提供了非常强大的安全性，因为攻击者需要已经访问您的白名单 IP 之一才能尝试通过 SSH 登录。 
- 可以说，这种方法可以取代对其他安全方法的需求，例如暴力保护或禁用密码身份验证，因为现在暴力攻击的威胁已经基本消除。 

 

**缺点**

 
 
- 这种方法会增加您被锁定在服务器之外的机会，尤其是如果您位于 IP 地址可能会更改的位置，例如住宅 Internet 连接。 
- 访问的便利性也降低了，因为您将无法从未提前列入白名单的位置访问服务器。 
- 这需要付出一些努力，因为您现在必须根据需要更改添加和删除 IP，从而维护您的 IP 地址白名单。 

 

在我自己的个人服务器上，这通常是我使用的技术。这样我仍然可以方便地使用密码进行身份验证和使用普通的 SSH 端口，同时具有很强的安全性。我还经常更换我的服务器，在需要时创建新的服务器，我发现实施这个白名单是让我的新服务器安全而又不影响其他配置的最快方法，我可以简单地从另一台服务器复制我的白名单。

 

![美国站群多IP服务器有什么用？美国站群多IP服务器如何选择？](https://www.mfisp.com/wp-content/uploads/2022/06/202206201207122q94Ng.jpg)

 

## **混合方法：允许来自 IP 列表的密码，但允许来自所有 IP 的密钥。**

 

如果您想花点心思，可以实施许多“混合”方法，它们结合了这些安全技术中的一种或多种。我曾经在与我们的一位客户遇到过这样一种情况，他们希望为员工提供密码访问权限，以便他们可以将密码留给我们存档，但他们只想自己使用密钥身份验证而不打开密码身份验证到互联网。

 

这实际上实现起来非常简单，它提供了禁用密码验证的大部分安全性，同时在大多数情况下仍然允许密码验证的便利性。

 

为此，您需要将以下行添加到 sshd_config：

 

`# Global Setting to disable password authentication`

 

`PasswordAuthentication no`

 

`[...]`

 

`# Override the Global Settings for IP Whitelist`

 

`# Place this section at the -end- of your sshd_config file.`

 

`Match address 1.2.3.4/32`

 

`PasswordAuthentication yes`

 

对于上述情况，1.2.3.4 是列入白名单的 IP 地址。您可以重复配置的该部分以将多个 IP 列入白名单，并且可以将 /32 更改为另一个 IPv4 CIDR，例如 /28、/27 等，以便将一系列 IP 列入白名单。

 

请记住，匹配地址块应该放在 sshd_config 文件的最后。

 

## **混合方法的优缺点**

 

**优点**

 
 
- 这种技术可以通过防止密码在大多数 Internet 上工作来提供密钥验证的安全性，但允许从频繁访问位置进行密码验证的便利性。因此，它可以让您在保持大部分安全性的同时减少一些缺点。 
- 如果您的 IP 地址发生更改并且您不再被列入白名单，您仍然可以使用密钥文件通过 SSH 登录，只要您将其保存在本地即可。 

 

**缺点**

 
 
- 与 IP 白名单防火墙方法一样，此方法需要一些维护，因为如果您的 IP 地址更改或您需要将其他位置列入白名单，您必须更新您的 SSH 配置，但与其他方法不同，此处更​​新白名单不太重要，因为您仍然可以访问即使您没有被列入白名单，也可以通过 key 方法。 

 

## ![顶级SSH安全最佳实践](https://www.mfisp.com/wp-content/uploads/2021/12/2021121402421888.jpg)

 

## **最终，您将不得不选择最适合您的用例的方案。**

 

希望这份技术和示例列表为您在保护服务器安全时可以使用提供一些思考的食物：风险是什么以及存在哪些可能的技术来减轻风险。根据您认为服务器安全性的重要性，以及实施各种安全解决方案以减轻您担心的风险的实用性，您可以选择一种或多种技术来推进。

 

归根结底，我总是提醒大家，安全是相对的。你永远不会有任何完全无法穿透的东西，最重要的是让自己至少领先其他人一步。即使您只实施这些安全实践中的一种，您也比使用默认设置运行的大量 Linux 服务器更安全，并且 SSH 对任何想要尝试登录的人都开放。

---
本页由 梦飞idc云平台（https://www.mfisp.com）提供。站点导航见 https://www.mfisp.com/llms.txt
