安全地配置我的 sshd(通过自动化)

安全地配置我的 sshd(通过自动化)

我手动配置了几个系统。我想现在开始更系统地工作。

我对 openssh-server 的配置比 Debian 默认设置更严格,以排除密码猜测攻击。

所以我研究了一些系统配置序列。我注意到 SSH 是一个问题。当您在 Debian 上安装 openssh-server 时,它会立即开始以默认配置运行(与 Fedora 不同)。

问题:建议安全配置 SSH 的顺序,以避免这种竞争情况。


例如,我想在一个桌面系统上使用 SSH,而其他用户从来不需要 SSH 访问。他们不使用任何远程访问系统。强制执行“安全密码”会浪费我们的时间。限制远程访问/etc/sshd_config更简单,安全性也更好。

我有时还会创建本地帐户用于测试目的。 (令人尴尬的是,我有一个这样的帐户成为 SSH 蠕虫病毒的受害者)。

答案1

顺序

  1. /etc/ssh/sshd_not_to_be_run如果未安装 openssh-server,则创建一个空文件。 (编写此条件的一些选项这里
  2. 安装 openssh-server
  3. /etc/ssh/sshd_config根据需要编辑
  4. 消除/etc/ssh/sshd_not_to_be_run

  5. 跑步

    systemctl enable ssh
    systemctl systemctl restart ssh
    

    或经过充分测试的等效项。 restart如果服务尚未启动,则似乎工作正常(比较condrestart try-restart)。我注意到systemctl enable --now如果服务已启用但未运行,则不会启动该服务。

未使用的选项

这些是我发现并决定不使用的其他选项。

  1. 这个问题已在以下位置讨论过:Debian 用户。遗憾的是,竞争条件尚未解决。 Debian 维护者建议配置policy-rc.d为阻止invoke-rc.d ssh start程序包中的调用postinstall。有笨重的细节细节虽然笨拙,但可以实现。不幸的是,事实并非如此。它不会阻止竞争条件。 与包也运行的命令policy-rc.d无关。update-rc.d ssh enable这可能会因错误时间的电源故障或系统崩溃而暴露。

  2. 请注意openssh-server包装上的建议ufw:)。 Ubuntu 创建ufw为一个非常简单的防火墙。我有点困惑它是什么“用户故事”起初编写的,但在 Ubuntu Oneiric 中它用于支持可信网络的概念,就像 Windows 一样。

    您可以安装ufw并滥用它来阻止 SSH,直到您配置它为止。当然,这假设不存在将ufw当前网络视为可信的配置。呵呵。

    我不喜欢这个选项还有两个原因。我一直在将序列作为单独的ansible角色来编写。首先,此选项意味着 SSH 角色会干扰防火墙配置。即使主机不需要防火墙。 (或者,如果您正在增量地编写这些序列......也许您有一个现有的防火墙,它甚至没有像 ufw 这样方便自动化的命令)。

    第二个缺点是 ansible 角色被设计为幂等的。您可以更新您的 ansible 角色并运行单个命令来应用它们。它将突出显示实际改变系统的任务与已经匹配的任务。您可以根据服务的配置是否已修改(而不是已经匹配)来重新启动服务。它不适合无条件打开和关闭防火墙配置的模型。您可以在尚未安装 openssh-server 的情况下将此设置为条件,但这不是您在文档示例中看到的常见习惯用法之一。您要么需要 ansible 2.2,才能申请check_mode: yesservice name=ssh或者您需要围绕 dpkg 的脚本

  3. 编辑:你可以创建一个符号链接mask ssh.service,在安装包之前。我不介意假设使用 systemd,但是自动化这会有点烦人。我认为软件包安装会返回错误,并保留已安装的软件包,但状态为“未配置”。修复配置后“重新配置”包并不难。令人烦恼的是,您必须忽略软件包安装过程中的错误。当可能出现另一个错误时,您可能会冒继续操作的风险。对于适当的自动化来说,这尤其是一个问题,但如果您遵循手动检查表,它也可能很烦人

  4. sshd_config提前创建一个。我测试了这个,它没有被覆盖。问题:包装sshd_config不见了。 (我也在 Fedora 上尝试过这个 - 他们会给你一个警告并创建 sshd_config.rpmnew)。如果您想将配置基于打包的配置...即使包没有丢失其文件,它也会变得复杂。

  5. @Ipor-Sircer 链接的答案之一指出 Debian 可以使用dpkg-divert. debootstrap在 上使用这个start-stop-daemon。我们可以update-rc.d结合选项 1 来转移。现在我们正在编写两个临时脚本......

  6. 侵入性较小,我们可以尝试使用它来转移/etc/sshd_config.这将允许保留打包的配置文件以供检查,并且通过明确防止覆盖,它可能会更加健壮。不幸的是,事实证明它dpkg-divert不会影响sshd_config,因为该文件是由安装后脚本动态生成的。这可能解释了选项 5 中缺少警告的原因。

最后一点是有人指着包裹向我解释的源代码。然后我注意到sshd_not_to_be_runpostrm 脚本中对 的引用。

相关内容