开发者生态
morning
FreeBSD – 不良默认设置的教训
2026-05-10
1 阅读
jruohonen
FreeBSD - 不良默认设置的教训,作者:@blakkheim 最后更新于 2026 年 4 月 5 日。在此处发送任何反馈/更正。本页列出了我为了加强安全性而对 FreeBSD 的普通安装所做的一些更改。还包括一些提高网络性能或使事情变得更加理智的更改。它仅涵盖系统管理员可以对正在运行的系统进行的基本更改。它也可以被认为是对 FreeBSD 开发生态系统安全状况的评论,强调了他们对变革的强烈抵制以及不愿意用现代替代品取代旧的东西。该项目的安全页面如下: FreeBSD 非常重视安全性,其开发人员不断致力于使操作系统尽可能安全。但这真的是真的吗?让我们来看看吧。目录 OpenSSH 修改 Mailer Daemon 防火墙端口和软件包 NTP sysctl.conf 定期 SSL/TLS 库交换权限 rc.conf loader.conf 编译时选项 关闭附录 OpenSSH 修改 FreeBSD 一直以来都对基本系统中捆绑的 OpenSSH 版本做出“有趣”的选择,通常以保留向后兼容性或获得感知性能改进的名义故意与上游相反。为了性能而禁用或忽略安全功能似乎是一个反复出现的主题,我们稍后会看到。我相信在这个领域做出了很多错误的决定。举个主要例子,他们在相当长的一段时间内坚持维护 HPN-SSH 补丁集并默认启用它。您可能会说“好吧,但是这些补丁到底有什么问题呢?”几年前,OpenSSH 增加了通道限制,足以支持跨国千兆连接而不会减慢速度。对于大多数用户来说,这意味着 HPN 补丁是不必要的复杂性,几乎没有任何好处。除此之外,由于 HPN 向后移植和手动重构补丁集,他们经常会阻止 FreeBSD 更新其 OpenSSH 版本。当 FreeBSD 最终在其 OpenSSH 构建中禁用 HPN 时,这似乎是由于构建失败而不是安全考虑。 OpenSSH 上游很久以前就放弃了对 tcp_wrappers 的支持,但 FreeBSD 仍然修补它并为每个人启用它。对于弱 DSA 主机密钥也是如此,他们重新打开该密钥以与旧客户端兼容。 FreeBSD 还在其构建中重新启用了上游禁用的不安全加密密码,向后兼容性显然对他们来说比用户的安全更重要。如果我们不在生态系统中的某个地方一点一点地弃用不安全的选项,我们最终会遇到像 OpenSSL 这样的情况。压力必须施加在某个地方。一个人可以成为该团队的一员,也可以与他们对抗。在这种情况下,FreeBSD 就是试图增加风险的团队。他们对 OpenSSH 版本及其默认配置文件进行了本地更改,这使得用户在其他平台不受影响时容易受到攻击。以下是示例列表(可能不完整): FreeBSD-SA-00:21.ssh FreeBSD-SA-03:15.openssh FreeBSD-SA-06:09.openssh FreeBSD-SA-08:05.openssh FreeBSD-SA-14:24.sshd FreeBSD-SA-16:14.openssh 这两个中的 PAM 问题: FreeBSD-SA-15:16.openssh FreeBSD-SA-15:22.openssh FreeBSD 对代码和配置文件的修改列表可以在此处查看基本系统(可能已过时/未维护),以及此处查看 ports 版本。值得庆幸的是,正如上面所暗示的,在删除所有 FreeBSDism 的情况下,从端口安装 OpenSSH 相当容易。他们的 openssh-portable 端口有大量可以切换的选项: BLACKLISTD FreeBSD blacklistd(8) 支持 BSM OpenBSM 审核 DOCS 构建和/或安装文档 FIDO_U2F FIDO/U2F 支持(security/libfido2) HPN HPN-SSH 补丁 KERB_GSSAPI Kerberos/GSSAPI 补丁(要求:GSSAPI) LDNS SSHFP/LDNS 支持 LIBEDIT 命令通过 libedit 进行行编辑 NONECIPHER NONE 密码支持 PAM 可插入身份验证模块支持 TCP_WRAPPERS tcp_wrappers 支持 XMSS XMSS 密钥支持(实验性) MIT MIT Kerberos (security/krb5) HEIMDAL Heimdal Kerberos (security/heimdal) HEIMDAL_BASE Heimdal Kerberos (base) 除了上述修改之外,另外两个补丁特别受到 FreeBSD 用户的欢迎: AES-CTR 和“NONE”密码。顾名思义,线程 AES-CTR 为代码引入了线程。 OpenSSH 开发者公开表示线程风险太大,不会添加。更重要的是,它在很大程度上已被现代 CPU 中的 AES-NI 所淘汰,而且考虑到消息验证码 (MAC) 时,ChaCha20-Poly1305(当前默认密码)甚至更快。 NONE 密码有些缺陷,它删除了加密位,只保留了数据的完整性。它让用户很容易意外地搬起石头砸自己的脚。性能的权衡是'