适用于 Linux 的 OpenSSH 安全加固指南适用于 Linux 的 OpenSSH 安全加固指南适用于 Linux 的 OpenSSH 安全加固指南适用于 Linux 的 OpenSSH 安全加固指南
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

适用于 Linux 的 OpenSSH 安全加固指南

在此页

  1. SSH 是如何工作的?
  2. 使用最佳实践配置 SSH
    1. 1。更改默认端口
    2. 2。禁止以根用户身份登录
    3. 3。设置协议版本
    4. 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 用户的数量和他们的连接时间。

©2015-2025 艾丽卡 support@alaica.com