跳到主要内容

加固你的 VPS:20 分钟即可完成的清单

本指南译自英文。部分链接页面仅提供英文版本。

能挡住绝大多数机会主义攻击的具体步骤。

你永远无法让服务器绝对安全。但你可以在大约二十分钟内让它成为一个没有吸引力的目标,这几乎能挡住所有自动化攻击。

1. 仅使用密钥的 SSH

在 SSH 密钥与访问中有完整说明。这是价值最高的单一步骤。密码暴力破解是公共互联网上最常见的入侵方式,这一步可将其消除。

text
PasswordAuthentication no
PermitRootLogin prohibit-password

2. 默认拒绝的防火墙

只允许你实际提供的服务。在 Debian/Ubuntu 上:

bash
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:

bash
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. 自动安全更新

bash
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 基础。

bash
apt install -y fail2ban
systemctl enable --now fail2ban

5. 关闭你不用的东西

每个监听的服务都是潜在的入口。

bash
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(主机入侵检测)能带来真正的纵深防御。两者都记录在我们的应用托管指南中。

延伸阅读