NordBastion 北极熊吉祥物在 Nordic 石质锻造间,将装甲板和黄铜挂锁焊接到铁砧上的小型服务器塔上,青色防护符文缠绕其底座,琥珀色炉火与焊接火花四溅
操作指南 · 清单·阅读 10 分钟 · 实操 60 分钟

VPS 加固——上线第一小时操作安全清单。
八个步骤。在每台新服务器上执行。

在任何工作负载上线全新 VPS 之前的通用预上线清单。仅 SSH 密钥认证、自定义端口、防火墙、自动更新、fail2ban、快照、文档化恢复流程。已在 Debian 12 / Ubuntu 22-24 / Alpine 上测试。

八个步骤
  1. 01

    SSH key auth

  2. 02

    Disable root + change port

  3. 03

    Firewall baseline

  4. 04

    Unattended-upgrades

  5. 05

    Fail2ban

  6. 06

    Time + swap

  7. 07

    Baseline snapshot

  8. 08

    Recovery doc

第 01-02 步 · SSH

密钥,而非密码。自定义端口,而非 22。

在笔记本电脑上,生成一个 ed25519 密钥对(更小、更快、更现代):

ssh-keygen -t ed25519 -C "you@laptop"
ssh-copy-id -p 22 root@<vps-ip>
ssh root@<vps-ip>     # should now work without password

在 VPS 上,编辑 /etc/ssh/sshd_config:

Port 54871                  # pick a random number 1024-65535
PermitRootLogin no          # use a non-root user with sudo
PasswordAuthentication no   # keys only
PubkeyAuthentication yes

首先创建非 root sudo 用户(adduser bear; usermod -aG sudo bear; ssh-copy-id -p 22 bear@vps),测试登录,然后重启 sshd:systemctl restart sshd。若将自己锁定在外,面板控制台可在不使用 SSH 的情况下提供 shell 访问。

第 03 步 · 防火墙

默认拒绝入站。将所需内容加入白名单。

apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 54871/tcp      # custom SSH port
ufw allow 80/tcp         # if running a web service
ufw allow 443/tcp        # if running TLS
ufw enable
ufw status verbose

通过控制面板在 NordBastion 堡垒级防火墙中复制相同规则集(网络 → 防火墙)。堡垒防火墙在数据包到达 VPS 之前即拦截,节省了大流量扫描时的 CPU 开销。纵深防御。

第 04-05 步 · 自动更新 + fail2ban

两个软件包,五分钟,实质效果。

apt install -y unattended-upgrades fail2ban
dpkg-reconfigure -plow unattended-upgrades   # accept defaults
systemctl enable --now fail2ban
fail2ban-client status                       # shows sshd jail

unattended-upgrades 自动应用安全补丁;fail2ban 将 10 分钟内 5 次认证失败的 IP 封锁 1 小时。基本使用场景下两者均无需进一步配置——都是对所有人有效的激进默认设置。

第 06 步 · 时间 + swap

设置时区为 UTC。添加 swapfile。

timedatectl set-timezone UTC

fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo "/swapfile none swap sw 0 0" >> /etc/fstab
free -h                                       # confirm swap is active

服务器使用 UTC 可简化跨堡垒节点与任意时区客户端的日志关联。2-4 GB 的 swapfile 可防范 OOM 杀进程峰值;对小配置套餐而言至关重要,对大配置套餐也是低成本保险。

第 07-08 步 · 快照 + 恢复文档

记录干净状态。写下恢复路径。

快照。 在面板中:Servers → 你的服务器 → Snapshots → Create。命名为 baseline-hardened-YYYY-MM-DD。NordBastion 快照存储在主机外,加密处理,仅需数秒。可在约 90 秒内恢复——第一次升级出错时,未来的你会感谢现在的你。

恢复文档。 在纸上或密码管理器中,记录下:

  • NordBastion 账户邮箱 +(密码助记词,而非密码本身)
  • SSH 私钥在笔记本电脑上的存放位置
  • 自定义 SSH 端口号
  • VPS 上的非 root sudo 用户名
  • 要恢复的基准快照名称
  • 注意:"面板控制台无需 SSH 即可使用——可用于锁定恢复"

OPSEC 是今天将事情记录下来的纪律,这样当现在的你遗忘时,未来的你可以恢复。文档完成时,工作才算结束。

FAQ · 安全加固

问题,已解答。

首次 VPS 客户在执行清单时提出的八个问题。

SSH 密钥认证真的比强密码更安全吗?

是的,差距显著。密码——即使是 16 字符的随机密码——在某些现实威胁模型下是可暴力破解的;ed25519 SSH 密钥具有 256 位熵,无法被暴力破解。密钥还绑定在它所在的设备上,因此攻击者需要同时拥有密钥文件和解密它的密钥短语。在 sshd_config 中完全禁用 PasswordAuthentication,暴力破解攻击面降至零。

将 SSH 端口从 22 改为随机端口真的有帮助吗?

这不能阻止有针对性的攻击者——他们会扫描全部 65,535 个端口。它确实减少了仅尝试 22 端口的机器人产生的自动化噪音,意味着日志更清洁,fail2ban 压力更小。在 1024 至 65535 之间选一个随机端口,记录到不会丢失的地方,更新防火墙允许它通过。净收益:约减少 90% 的日志噪音。

UFW 还是 nftables——选哪个?

UFW 适合学习者或运营单台 VPS 的用户——它是友好的封装层,语法易读,底层可选 iptables 或 nftables。若需要更严格的规则组合、匿名集合,或运营多台服务器并希望保持一致性,请直接使用 nftables。两者产生相同的内核级结果。

我是否也应该对内核启用 unattended-upgrades?

安全补丁——是的,应当安装,它们修复关键 CVE,不装则意味着漏洞敞开。完整内核包升级风险更高,因为需要重启才能生效;unattended-upgrades 默认不会为您自动重启。请阅读 /etc/apt/apt.conf.d/50unattended-upgrades 后自行决定:大多数 NordBastion 用户将 unattended 配置保持在「仅安全更新」,并在每月低峰期手动重启。

如果我已经禁用密码认证,还需要 fail2ban 吗?

严格来说不是必须的——一旦关闭密码认证,SSH 暴力破解便无从得逞。fail2ban 对其他服务仍有价值(邮件、Web 应用登录页等任何有凭证层的服务)。低成本保险:apt install fail2ban,接受默认配置,继续前进。安装所需的 30 秒换来更干净的日志和对其他服务的额外保护,完全值得。

关于全盘加密?

不属于第一小时的范畴——用户持有密钥的全盘加密需要自定义 ISO 安装(启动时以某人必须输入的密码短语挂载 LUKS)或即将推出的 NordBastion LUKS 配置时启用选项(面板路线图)。目前,将磁盘视为可被 NordBastion 读取(在传票的小概率情况下),并将 NordBastion 的司法管辖保护视为保障安全的层。若你的威胁模型要求在启动前进行 FDE,通过救援 ISO 将 Debian 安装到 LUKS 根卷,并在每次启动时通过面板控制台解锁——可行但运营负担有实质性增加。

我应该多久创建一次快照?

三种实用节奏。(1)在每次有意义的变更前(软件包升级、配置编辑、操作系统升级)。(2)按计划——每周一次对任何生产工作负载都是合理的默认值。(3)在每次备份验证演练前,以便证明恢复可行。NordBastion 快照是离机加密存储的;不占用 VPS 磁盘,约 90 秒内可恢复。

我是否应该监控 VPS?如何监控?

在第一个小时:暂不需要——先完成安全加固,运行工作负载,然后在有值得监控的内容时再添加监控。轻量选项:在第二台小型 VPS 上部署 node_exporter + Prometheus + Grafana;Netdata 作为单二进制自托管仪表板;或更简单的,免费层外部在线检测工具(UptimeRobot、BetterStack)ping 公共端口。选一个,配置好,然后忘掉它——监控在保持沉默时最有价值。

下一步

服务器已加固。现在可以在上面构建项目了。

最后审核 · 2026-05-20 · 已测试 · Debian 12 · Ubuntu 22.04 / 24.04 · Alpine 3.19+