
我照着 30k Star 的指南加固了一台 Linux 服务器,记下这些坑
前言
新买的 VPS,装完 Debian,开了 SSH,就开始跑服务。
很多人的服务器安全就停在这一步。
直到某天发现它在帮别人挖矿。
我照着 GitHub 上 30.1k Star 的 How To Secure A Linux Server 把一台服务器完整加固了一遍。这篇不讲概念,讲实操顺序、每步为什么、以及我会怎么做的不一样的地方。
指南地址:https://github.com/imthenachoman/How-To-Secure-A-Linux-Server(CC-BY-SA-4.0)
一、动手前先想清楚一件事
指南开篇不是命令,是三个问题:
- 你要保护什么?
- 你愿意用多少便利换安全?
- 你的威胁模型是什么?
别跳过。这决定了你后面所有取舍。
比如我的场景:个人 VPS,只跑 Web 服务,只有我从固定网络登录。那么 2FA 可以从简,但 SSH 必须只对我的方式开放。
没有威胁模型,加固就是背题。
二、我的实操顺序(和踩的坑)
指南步骤有依赖关系,顺序错了会把自己锁在门外。这是我的顺序:

第 0 步:留好后门再动手
改 SSH 配置前,确认你有 VPS 控制台(VNC/Rescue 模式)。
这是我唯一会加感叹号的提醒。所有把自己锁在服务器外的人,都是跳过了这一步。
第 1 步:SSH 密钥登录,但先别关密码
# 本地生成密钥
ssh-keygen -t ed25519 -a 100
# 推到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server然后开一个新的终端窗口测试密钥登录成功,再回来改 sshd_config:
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
PermitEmptyPasswords no坑:改完配置 systemctl reload sshd 后,别关旧会话。旧会话是你的后悔药。用新窗口验证能登录,才关。
我还建了 sshusers 组并加 AllowGroups——将来有新用户,不进组就连 SSH 都摸不到,比逐个排除干净。
第 2 步:防火墙,先放行再启用
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh # 先放行!
sudo ufw allow http
sudo ufw allow https
sudo ufw enable坑:enable 之前必须先 allow ssh。顺序反了,正在跑的会话能活,断线后就再也连不上。
第 3 步:Fail2Ban
前面关了密码认证后,SSH 暴力破解基本无效,但 Fail2Ban 仍然值得装——它防的不只是 SSH:
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# jail.local 里配置 [sshd]:maxretry=5,bantime=3600
sudo systemctl restart fail2ban我的判断:关密码认证是治本,Fail2Ban 是治标+兜底。两个都要,但别指望 Fail2Ban 替代密钥认证。
第 4 步:自动安全更新
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades个人服务器建议直接开。你手动打补丁的速度,永远追不上自动化扫描的速度。
第 5 步:审计,看看自己的成果
sudo apt install lynis
sudo lynis audit systemLynis 会给一个 hardening index 和逐条建议。第一遍跑完通常一堆黄色警告,正常。挑_warnings_里影响大的先修,别追求满分。
三、我会砍掉和保留的
指南很全,但不是每条都要照做。我的取舍:
必须做:SSH 密钥 + 禁密码、UFW、Fail2Ban、自动更新。这四样挡住 95% 的自动化攻击——绝大多数入侵不是黑客盯上你,是脚本扫到你。
建议做:密码策略(libpam-pwquality,minlen=14)、Lynis 定期审计、logwatch 邮件日报。
看情况做:
- 2FA/MFA:你已经禁了密码认证,私钥+口令已经很强。服务器上有值钱东西再加。
- CrowdSec:比 Fail2Ban 新,有社区威胁情报。个人服务器 Fail2Ban 够用,企业场景值得上。
- SELinux/AppArmor:跑对外服务(尤其 Docker)建议上 AppArmor,SELinux 学习曲线是真的陡。
- 磁盘加密(LUKS):防的是物理接触。云 VPS 场景意义有限。 " 一个细节:指南提到移除短 Diffie-Hellman 密钥。这个属于"不做不炸,做了加分",我排在最后处理——它是为抵御国家级算力的中间人攻击,普通威胁模型里优先级最低。
四、五个最常见的翻车现场
都是真实高频事故:
- 禁了 root 但没建 sudo 用户 → 永久失去管理员权限。先建用户、验证 sudo、再禁 root。
- 改 SSH 配置没开新窗口测试 → 锁死在门外。旧会话 + VPS 控制台,双保险。
- 防火墙 enable 前没放行 SSH → 断线即失联。
- 密码策略太狠 → 自己都记不住,写在便利贴上反而更不安全。
- 只加固不备份 → 入侵可以恢复,数据没了就是没了。备份要离线,要定期演练恢复。
五、想省事的人
指南有社区维护的 Ansible 版本:How-To-Secure-A-Linux-Server-With-Ansible。
一条 playbook 跑完所有加固。我的建议:第一台服务器手动做一遍,理解每一行;第二台开始用 Ansible。 直接跑 playbook 而不知道它干了什么,出问题时你连排查方向都没有。
记住
服务器暴露在公网的第一天,它就是目标——不是因为你重要,是因为扫描器不分你我。
SSH 密钥 + 防火墙 + Fail2Ban + 自动更新,四步挡住绝大多数攻击。
安全不是一次配置,是持续过程。 Lynis 跑一遍,你就知道自己还差多远。
参考资源
- 指南:https://github.com/imthenachoman/How-To-Secure-A-Linux-Server
- Ansible 版:https://github.com/moltenbit/How-To-Secure-A-Linux-Server-With-Ansible
- CIS Benchmarks:https://www.cisecurity.org/cis-benchmarks/
