SSH是 Linux 服务器的通用系统管理实用程序。无论您运行的是 CentOS、Debian、Ubuntu 还是介于两者之间的任何系统;如果您以前登录过 Linux 服务器,您可能至少听说过它。
SSH 的缩写代表“Secure Socket Shell”,顾名思义,该协议在构建时就考虑到了安全性。许多服务器管理员认为 SSH 开箱即用就非常安全,而且在大多数情况下,他们是正确的。默认情况下,SSH 具有出色的开箱即用安全功能,例如通信加密以防止中间人攻击,以及主机密钥验证以在用户上次登录后服务器身份发生更改时提醒用户。
尽管如此,Internet 上仍有大量运行 SSH 的服务器,攻击者喜欢寻找可能影响大量服务器的攻击媒介。为了安全,往往会牺牲便利性,因此许多服务器管理员有意或不假思索地让他们的服务器运行默认的 SSH 安装。在大多数情况下,这对他们中的大多数人来说都不是问题,但是您可以采取一些步骤来领先一步。毕竟,我相信稍微领先一点是可以达到的最佳安全实践之一,这样您的服务器就可以避免成为容易吸引攻击者的悬而未决的成果之一。
考虑到这一点,您可能希望为您的 Linux 服务器考虑一些技术,以帮助提高 SSH 安全性。
蛮力保护
提高 SSH 安全性的最常用技术之一是暴力破解保护。这是因为运行 SSH 服务的服务器管理员面临的最常见的安全问题之一是来自自动机器人的暴力攻击。机器人会尝试猜测服务器上的用户名和密码,但暴力保护可以在一定次数的失败后自动禁止其 IP 地址。
一些常见的开源暴力破解保护解决方案是ConfigServer Firewall (CSF)和Fail2Ban。CSF 在 cPanel 服务器上最常见,因为它有一个 WHM 插件。
蛮力保护的优缺点
优点
将通过自动禁止机器人来帮助减少机器人登录失败,从而大大降低机器人有机会猜测您的 SSH 帐户之一的登录详细信息的可能性。
非常容易实施,无需更改所需的 SSH 配置。
缺点
这些蛮力程序无法将机器人与您和您的用户区分开来。如果您不小心多次登录失败,您可能会将自己锁在门外。如果发生这种情况,请确保您有可靠的方法来访问服务器,例如将您自己的 IP 地址列入白名单,并使用 KVM 或 IPMI 控制台作为最后的手段。
更改 SSH 端口号
我看到的最常见的技术之一是将 SSH 端口号更改为默认端口 22/tcp 以外的其他端口号。
此更改相对简单,例如,如果您想将 SSH 端口从 22 更改为 2222,您只需要像这样更新 sshd_config 文件的端口行: 顺便说一下,端口 2222 是一个很常见的
Port 2222
端口“备用”端口,因此一些暴力机器人可能仍会尝试此端口。最好选择更随机的东西,例如 2452。它甚至不必包含 2,如果您愿意,您的 SSH 端口可以是 6543。任何未被服务器上的其他程序使用的最大 65535 的端口号都是公平的。
更改 SSH 端口号的优缺点
优点
- 这种技术在减少自动机器人攻击方面通常非常有效。其中大部分是非智能脚本,只会寻找在端口 22 上运行的服务器。
缺点
- 这种技术相当于“默默无闻的安全”。正在尝试备用端口的机器人或任何配备了 nmap 等端口扫描工具的人都可以在几分钟内轻松找到服务器的新端口。
- 这种技术会使 SSH 服务器的访问更加不便,因为您现在需要在连接时指定端口号,而不仅仅是 IP。
通过 SSH 禁用根登录
另一种常见技术是完全禁止 root 用户帐户通过 SSH 登录,或者在没有授权 SSH 密钥的情况下登录。您仍然可以通过 SSH 获得 root 访问权限,方法是向您的一个受限用户授予“sudo”权限,或者使用“su”命令使用密码切换到 root 帐户。
这可以通过调整 sshd_config 文件中的“PermitRootLogin”设置来配置。
要仅允许使用 SSH 密钥进行 root 登录,您可以将行更改为:PermitRootLogin without-password
要完全禁止通过 SSH 进行 root 登录,您可以将行更改为:PermitRootLogin no
通过 SSH 禁用根登录的优缺点
优点
这种技术有点用处,因为用户名“root”对于大多数 LInux 服务器来说很常见(比如 Windows 服务器上的“Administrator”),所以很容易猜到。现在禁止此帐户登录意味着攻击者还必须正确猜测用户名才能获得访问权限。
如果您不使用 sudo,此技术会将 root 访问置于第二个密码之后,要求攻击者在获得对服务器的完全访问权限之前正确知道或猜测两个密码。(Sudo 会在一定程度上减少这种好处,因为通常它被配置为允许使用与用户登录时相同的密码进行 root 访问。)
缺点
如果您的 sudo 配置出现问题,此方法可能会增加您被锁定在服务器之外的风险。如果您被锁定在 root 之外,使用此方法访问服务器仍然是一个好主意,例如远程控制台。
禁用密码验证,支持密钥验证
关于密码,每个人告诉您的第一件事就是密码要长,难以猜测,并且不要基于字典单词。SSH 密钥可以用密钥文件的身份验证代替密码身份验证。
与密码相比,SSH 密钥非常安全,因为它们包含大量随机数据。如果您见过 SSL 证书或密钥文件,SSH 密钥看起来与此类似。这是一串非常大的随机字符。
您无需输入密码即可登录 SSH 服务器,而是使用此密钥文件进行身份验证,这与网站上 SSL 证书的工作方式大致相同。
如果您想禁用密码身份验证,可以通过修改 sshd_config 文件中的“PasswordAuthentication”设置来实现,如下所示:PasswordAuthentication no
禁用密码身份验证的优点和缺点,有利于密钥身份验证。
优点
- 此方法大大降低了针对 SSH 服务器的暴力破解尝试成功的可能性。
- 大多数暴力机器人只是尝试密码开始,他们将使用完全错误的身份验证方法来尝试闯入,因此这些机器人永远不会成功。
- 即使有人在进行有针对性的攻击,SSH 密钥也比密码长得多,以至于正确猜测一个密码要困难几个数量级,这仅仅是因为有太多的熵和潜在的组合。
缺点
- 这种技术会使访问服务器变得不那么方便。如果您手边没有密钥文件,您将无法通过 SSH 登录。
- 由于上述原因,您也增加了被 SSH 锁定的风险,例如,如果您丢失了密钥文件。因此,如果您需要让自己重新进入,最好有一种替代方法来访问服务器,例如远程控制台。
如果有人得到了您的密钥文件,就像密码一样,他们现在将能够以您的身份登录。但是,与密码不同,密钥可以很容易地过期并创建新密钥,并且新密钥将以相同的方式运行。
关于 SSH 密钥方法的另一个有趣的怪癖是您可以在一个帐户上授权多个 SSH 密钥,而一个帐户通常只能有一个密码。
值得注意的是,即使打开了密码验证,您也可以使用 SSH 密钥访问帐户。默认情况下,如果您授权密钥,SSH 密钥将用作身份验证方法。
仅允许列入白名单的 IP
一种非常有效的安全技术是只允许列入白名单的 IP 地址连接到 SSH 服务器。这可以通过防火墙规则来完成,只打开授权 IP 地址的 SSH 端口。
这对于家庭用户或共享网络托管服务提供商来说可能不切实际,因为很难知道哪些 IP 地址需要访问,而且家庭 IP 地址往往是动态的,因此您的 IP 地址可能会发生变化。但是,对于您使用 VPN 或主要从静态 IP 地址访问的情况,它可能是一种维护成本低且极其安全的解决方案。
仅允许列入白名单的 IP 的优点和缺点
优点
- 这种方法提供了非常强大的安全性,因为攻击者需要已经访问您列入白名单的 IP 之一才能尝试通过 SSH 登录。
- 可以说,这种方法可以取代对暴力保护或禁用密码验证等其他安全方法的需求,因为现在基本上消除了暴力攻击的威胁。
缺点
- 这种方法会增加您被锁定在服务器之外的机会,尤其是当您位于 IP 地址可能会更改的位置时,例如住宅 Internet 连接。
- 访问的便利性也会降低,因为您将无法从未提前列入白名单的位置访问服务器。
- 这需要付出一些努力,因为您现在必须根据需要更改通过添加和删除 IP 来维护您的 IP 地址白名单。
在我自己的个人服务器上,这通常是我使用的技术。这样我仍然可以方便地使用密码进行身份验证并使用普通的 SSH 端口,同时具有很强的安全性。我也经常更换我的服务器,在需要时创建新的,我发现实现这个白名单是让我的新服务器安全而不干扰其他配置的最快方法,我可以简单地从另一台服务器复制我的白名单。
混合方法:允许来自 IP 列表的密码,但允许来自所有 IP 的密钥。
如果您喜欢,可以实施多种“混合”方法,这些方法结合了这些安全技术中的一种或多种。
我曾经遇到过GigeNET的一位客户的情况,他们想为员工提供密码访问权限,以便他们可以在我们的档案中留下密码,但他们只想自己使用密钥身份验证,而不想打开密码身份验证到互联网。
这实际上实现起来非常简单,它提供了禁用密码验证的大部分安全性,同时在大多数情况下仍然允许密码验证的便利性。
为此,您需要将以下行添加到您的 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 方法,即使你没有被列入白名单。
最终,您必须选择最适合您的用例的内容
希望这个技术和示例列表提供了一些思考,供您在保护服务器安全时使用:风险是什么以及存在哪些可能的技术来减轻这些风险。根据您认为服务器安全性的重要性,以及实施各种安全解决方案以减轻您关注的风险的实用性,您可以选择一种或多种技术来推进。
归根结底,我总是提醒大家,安全是相对的。你永远不会有任何完全无法理解的东西,最主要的是让自己至少比其他人领先一步。即使您只实施了这些安全实践中的一种,您也比大量使用默认设置运行的 Linux 服务器更安全,并且 SSH 对任何想要尝试登录的人都开放。