加固你的 VPS:20 分钟即可完成的清单
本指南译自英文。部分链接页面仅提供英文版本。
能挡住绝大多数机会主义攻击的具体步骤。
你永远无法让服务器绝对安全。但你可以在大约二十分钟内让它成为一个没有吸引力的目标,这几乎能挡住所有自动化攻击。
1. 仅使用密钥的 SSH
在 SSH 密钥与访问中有完整说明。这是价值最高的单一步骤。密码暴力破解是公共互联网上最常见的入侵方式,这一步可将其消除。
PasswordAuthentication no
PermitRootLogin prohibit-password2. 默认拒绝的防火墙
只允许你实际提供的服务。在 Debian/Ubuntu 上:
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp # SSH — see the warning below
ufw allow 80,443/tcp # web
ufw enable
ufw status verbose在 RHEL 系列上,使用 firewalld:
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload**警告:*请在 SSH 会话保持打开的状态下启用防火墙,并在断开连接之前*确认 SSH 已被允许。如果你更改了 SSH 端口,请先放行新端口。详情见防火墙基础,其中包括必须始终放行的我们的私有网状网络接口。
3. 自动安全更新
apt install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades # choose yes
# verify:
systemctl status unattended-upgrades --no-pager在 RHEL 系列上,dnf-automatic 起同样的作用。自动安全补丁能缩短漏洞公开到被利用之间的窗口——实际上这往往只有几个小时。
4. Fail2ban
在多次登录失败后封禁对应 IP,把无休止的暴力破解变成死胡同。参见 Fail2ban 基础。
apt install -y fail2ban
systemctl enable --now fail2ban5. 关闭你不用的东西
每个监听的服务都是潜在的入口。
ss -tulpn # what is listening, and who owns it
systemctl --type=service --state=running # what is running停止并禁用任何你没有主动要求的服务。精简的服务器就是安全的服务器。
6. 以非特权用户运行服务
数据库、Web 应用和 worker 不应以 root 运行。大多数软件包会自动创建自己的服务用户,请使用它。如果你自己编写 unit 文件,请显式设置 User= 和 Group=。
7. 保护机密
切勿将机密提交到 git。使用
chmod 600的环境文件。如果配置文件包含密码或密钥,切勿使其对所有人可读。
优先为每个服务使用独立凭据,而不是共用一个管理员凭据。
8. 准备好重新进入的途径
在需要之前,先确认 /panel/vps 中的救援控制台可以正常使用。
在进行有风险的更改之前创建快照——参见调整大小、快照与重装。
至少把一把 SSH 密钥保存在日常笔记本电脑以外的地方。
9. 监控
一台你从不查看的服务器,是你无法守护的服务器。添加一个监控检查,并偶尔阅读日志——阅读你的日志会告诉你方法。
可选:入侵检测
对于价值更高的主机,CrowdSec(众包封禁,MIT 许可)和 Wazuh(主机入侵检测)能带来真正的纵深防御。两者都记录在我们的应用托管指南中。
延伸阅读