如何使用 konstruktoid 的加固脚本防止服务器沦为活靶子
想象一下,你刚刚部署了一个全新的 Ubuntu 实例。一切都在运行,SSH 已开放,软件包已更新。你感觉安全了——直到你查看日志,发现来自全球的无限暴力破解登录尝试。默认的 Linux 发行版设置优先考虑便利性而非安全性,因此加固系统需要花费数小时调整 SSH 配置、配置防火墙和限制服务权限。
用户名 konstruktoid 的仓库作者决定简化这一流程,汇编了一套自动加固 Ubuntu 的脚本。这不仅仅是一组命令——而是一套将普通操作系统转变为数字堡垒的完整策略,其中通过 systemd 进行控制是基石。
这个脚本具体做什么
该项目的核心思想是尽可能减少攻击面。如果某个服务不需要,就应将其禁用。如果某个服务正在运行,它应该只有执行其任务所需的精确权限。
该脚本根据综合标准列表检查系统,其中许多标准来自 CIS(互联网安全中心)的建议。以下是它能带来改善的几个方面:
- 通过 sysctl 配置内核参数。包括阻止数据包转发(IP 转发)、欺骗保护和限制访问内核调试功能。
- 加固系统文件的文件权限。脚本检查
/etc/shadow、/etc/gshadow和其他关键配置文件的权限,以防止普通用户或被入侵的 Web 应用程序读取它们。 - 限制 systemd 服务。这也许是最有趣的部分。脚本使用现代 systemd 隔离功能,例如
PrivateTmp、NoNewPrivileges和ProtectSystem。 - 内核模块管理。禁用很少使用的协议(如 DCCP 或 SCTP)和经常成为漏洞来源的文件系统。
实际工作原理
该项目使用 Shell 编写,这使其对审计透明。你可以在运行前直接阅读代码,准确了解系统将发生什么变化。要开始使用,只需克隆仓库并以 root 身份运行主脚本即可。
顺便说一句,作者有一个适用于 Debian 的单独版本,但这个仓库专门针对 Ubuntu(20.04、22.04 和 24.04 版本)。有趣的是,该脚本不仅修改配置——还安装额外的安全工具,例如用于深度系统调用日志记录的 auditd。
根据需求进行微调
直接在生产系统上运行该脚本是有风险的。加固始终是安全性与功能性之间的权衡。如果你禁用了加载某些内核模块的能力,Docker 或特定网络硬件可能会停止工作。
该项目包含一个配置文件,你可以在其中覆盖变量。例如,如果你绝对需要 IPv6(脚本默认尝试限制它),你可以在设置中调整它。我建议首先在完全复制生产技术栈的测试虚拟机上运行该脚本。
为什么要关注 systemd 版本
许多较旧的 Linux 安全指南仍然建议编辑 /etc/ 中的数十个文件。konstruktoid 的方法更加现代化:它积极利用 systemd 的模块化特性。不必重写主服务单元文件,而是创建 drop-in 文件。这允许通过 apt 更新软件包而不会产生配置冲突,同时你的安全自定义设置仍然有效。
该脚本还会检查被篡改的软件包,并建议删除经常成为安全漏洞的软件,例如旧版的 rsh 或 telnet。
谁会发现这个项目有用
如果你为个人项目管理几台服务器,这个仓库将成为一个很好的检查清单。你不必运行整个脚本——你可以借鉴配置 ufw 或 sysctl 参数的良好解决方案。
对于公司中的系统管理员来说,这是一个现成的基础,可用于创建你自己的企业黄金镜像。与其重新发明轮子,不如采用 konstruktoid 的工作并根据你的合规要求进行调整。
但是,请记住:安全是一个过程。今天运行脚本并不能保证抵御明天出现的漏洞。但它肯定会将潜在攻击者的门槛提高到他们很可能去寻找更容易的目标的程度。
从哪里开始学习
- 查看
ubuntu.sh文件。这是入口点,其他模块从这里被调用。 - 探索
scripts/文件夹。逻辑按类别细分:网络、文件系统、权限。 - 务必阅读 README 中关于环境变量的部分,以了解如何在不编辑代码的情况下控制脚本的行为。
该项目是活跃的,并定期为新的 Ubuntu 版本更新,并纳入最新的安全建议。这是一个很好的示例,展示了自动化如何将数小时的常规工作转变为只需几分钟的任务。
相关项目