所有系统运行正常 21 支持的加密货币 · 欢迎使用 Monero 无需 KYC 政策
ChainVPS

安全

如何加固新VPS:安全检查清单

新服务器第一小时的有序、可照做清单——从SSH密钥到默认拒绝防火墙——堵住攻击者真正利用的漏洞。

安全8 分钟阅读 readChainVPS 团队

如何加固新VPS:安全检查清单

全新的 VPS 在上线后几分钟内就会暴露在自动化攻击面前——本清单将引导你完成开局第一小时的加固工作,确保服务器始终掌握在你自己手中。

每一台新服务器一开始都存在相同的弱点:默认的 root 登录、仅靠密码认证的 SSH 大门、完全开放的防火墙,以及没有自动打补丁机制。机器人会持续扫描整个 IPv4 地址空间,所以“还没人知道我的 IP”这种想法从来都不成立。

本指南是一份按顺序排列、可直接照做的加固清单。在全新的 Debian 或 Ubuntu 服务器上按从上到下的顺序执行,你将堵住攻击者真正会利用的漏洞,而不是“安全表演”式关注的那些。

动手之前的准备工作

在第一次登录之前做好两个决定,能为你日后节省数小时的时间:准备好 SSH 密钥,并选定一个非 root 的用户名。

  1. 1

    生成一个现代化的 SSH 密钥

    在你自己的电脑上运行 ssh-keygen -t ed25519 -C "you@device"。Ed25519 密钥更短、更快,并且比旧式默认的 RSA-2048 更安全。

  2. 2

    私钥绝不能留在服务器上

    私钥的那一半永远不会离开你的笔记本电脑,你只需要把 .pub 文件复制到主机上。忘记这条规则,就是很多人把自己逼到不得不重新部署服务器的原因。

  3. 3

    记录好你的开通凭证

    大多数服务商会通过邮件发送一个临时的 root 密码,或者在创建服务器时直接注入你的密钥。如果密钥已被注入,你可以直接跳到创建用户这一步。

如果你的服务商在部署时就注入了 SSH 密钥,那么你根本不会经历基于密码认证的窗口期——服务器开机之前,最大的攻击面就已经被消除了。

第一步——先打齐所有补丁,再持续保持更新

未打补丁的内核或 OpenSSL,是任何防火墙规则都无法弥补的漏洞。在配置其他任何东西之前,先完成系统更新。

  • Debian/Ubuntu:运行 apt update && apt full-upgrade -y,如果内核发生了变化,随后重启。
  • 启用 unattended-upgrades,让安全补丁自动安装:apt install unattended-upgrades && dpkg-reconfigure unattended-upgrades。
  • 按你自己掌控的时间表重启——将 Unattended-Upgrade::Automatic-Reboot 设置在一个流量较少的时段,而不是让内核补丁停留在“更新到一半”的状态。

第二步——创建一个真实用户,弃用 root

以 root 身份登录,意味着一旦某次会话被攻破,整台机器就会被完全控制,而且不会留下任何审计记录。你应该为自己创建一个具名的 sudo 账户来代替。

  1. 1

    添加用户

    运行 adduser deploy,然后执行 usermod -aG sudo deploy(在 RHEL 系发行版上使用 wheel 组)。

  2. 2

    为该用户安装你的密钥

    在你的笔记本电脑上运行:ssh-copy-id deploy@your-server-ip。这会把你的公钥写入 ~/.ssh/authorized_keys,并设置正确的权限。

  3. 3

    锁门之前先测试

    打开第二个终端,确认你可以通过 ssh deploy@server 登录并运行 sudo -v。在新会话验证可用之前,切勿禁用 root 或密码认证。

SSH 加固的黄金法则:在修改任何认证设置之前,保持当前会话不关闭,并在第二个窗口中验证新的登录方式确实可用。仅这一个习惯,就能避免几乎所有的锁死情况。

第三步——SSH 加固,这是最关键的一环

SSH 是每一台 VPS 的大门,也是绝大多数自动化登录尝试集中攻击的地方。编辑 /etc/ssh/sshd_config(或者在 /etc/ssh/sshd_config.d/ 中新增一个配置片段),设置以下参数。

PermitRootLoginno —— root 用户永远无法通过网络登录
PasswordAuthenticationno —— 仅允许密钥登录,彻底杜绝暴力破解
KbdInteractiveAuthenticationno —— 关闭 PAM 密码回退方式
PubkeyAuthenticationyes —— 你实际使用的登录方式
AllowUsersdeploy —— 仅将需要 shell 访问权限的账户加入白名单
X11Forwardingno —— 除非你确实需要转发图形界面应用,否则保持关闭

先用 sshd -t 验证语法,然后执行 systemctl restart ssh。如果 sshd -t 报错,请先修复问题再重启,否则可能导致 SSH 服务中断。

把 SSH 端口从 22 改成其他端口是可选项,只能减少日志噪音——这只是“隐蔽”,不是“安全”。一旦关闭了 PasswordAuthentication,端口扫描机器人就无从下手,所以应该把精力花在密钥上,而不是玩端口游戏。

第四步——启用默认拒绝的防火墙

即便 SSH 服务已经加固,它依然和机器上其他所有监听中的服务共享同一台主机。防火墙能让“除非我主动开放,否则一律关闭”成为默认状态。

  1. 1

    设定基线

    使用 ufw 时:执行 ufw default deny incoming 和 ufw default allow outgoing。

  2. 2

    只放行你实际提供的服务

    执行 ufw allow OpenSSH;只有当这台服务器确实承载 Web 流量时,才额外执行 ufw allow 80,443/tcp。

  3. 3

    启用并验证

    执行 ufw enable,然后运行 ufw status verbose 查看。凡是未列出的端口,现在都无法从互联网访问。

在启用 ufw 之前,先把 SSH 的放行规则加进去。如果在没有为自己端口设置允许规则的情况下就启用默认拒绝的防火墙,会直接切断你当前的会话。

第五步——用 Fail2ban 拖慢暴力破解

即使已经禁用了密码认证,机器人仍会不断敲门,让你的日志不断膨胀。Fail2ban 会在防火墙层面封禁这些屡次尝试的地址。

  • apt install fail2ban——自带的 sshd jail 开箱即用。
  • 把 jail.conf 复制为 jail.local,按需调高 bantime(例如 1h)、调低 maxretry(例如 3)。
  • 运行 fail2ban-client status sshd 检查是否正常工作,查看被封禁的 IP 数量。

第六步——缩小攻击面

最安全的服务,就是根本没有在运行的服务。审查所有正在监听的服务,并去掉你不需要的部分。

审查开放端口

ss -tulpn 会列出所有正在监听的套接字以及背后对应的进程。对任何不是你主动启动的服务都要进行排查。

移除无用软件包

禁用或卸载你用不到的服务——一个持续运行却无人使用的数据库或邮件代理,纯粹就是隐患。

隔离服务

把数据库这类内部服务绑定到 127.0.0.1,这样即便防火墙出现疏漏,它们也永远不会暴露在外。

锁定权限

确保 ~/.ssh 权限为 700,authorized_keys 权限为 600。权限设置错误会导致 sshd 悄无声息地忽略你的密钥。

第七步——记录日志、持续监控,了解你的基线状态

加固不是一次性的工作,你需要能够察觉到任何变化。

  • 使用 journalctl -u ssh 或 lastb 查看认证活动,排查登录失败记录。
  • 可以考虑使用 auditd,为特权操作留下防篡改的记录。
  • 为 /etc 和你的数据保留一份服务器之外的备份,这样一旦服务器被攻破,你可以彻底重建一台干净的服务器,而不是事后勉强相信一台可能已被入侵的机器。

服务商本身的重要性

软件层面的加固保护的是操作系统本身,但服务商决定的是底层的一切——网络过滤能力、支付记录,以及服务器是否会与某个身份产生关联。在 ChainVPS,每个套餐都自带 DDoS 过滤和不限流量带宽,服务器费用通过预付费加密货币余额支付,支持包括 Monero 在内的 21 种币种,全程无需 KYC。如果你的威胁模型中包含“不让服务器与本人身份产生关联”这一项,我们的离岸 VPS 套餐正是为此而生。

位置本身也是加固的一部分:我们的十五个地区中,有六个属于隐私友好型司法辖区(NL、CH、RO、IS、MD、LU)。将加固后的操作系统与离岸专用服务器搭配使用,能让软件层面和法律层面都保持紧密可控。

浓缩版:一小时加固清单

  • 完成全系统更新,并启用自动安全补丁
  • 创建具名 sudo 用户,安装密钥,并测试登录
  • 禁用 root 的 SSH 登录以及密码认证
  • 使用 sshd -t 验证 SSH 配置并重新加载
  • 启用默认拒绝的防火墙,仅开放必要端口
  • Fail2ban 已在 sshd jail 上运行
  • 审查开放端口,移除未使用的服务
  • 建立服务器外备份并进行日志审查
我应该把 SSH 端口改成 22 以外的其他端口吗?

这是可选项,只能减少日志噪音,并不能降低真正的风险。一旦关闭密码认证并强制使用密钥,更改端口只是增加了隐蔽性,而不是安全性——应优先禁用密码认证。

如果我只有一把密钥,禁用密码认证安全吗?

是安全的,前提是你已经在另一个会话中测试过密钥登录,并保留了私钥的备份。许多服务商还提供网页控制台或恢复模式,所以你并不会真正被锁在硬件之外。

如果 SSH 是唯一运行的服务,我还需要防火墙吗?

需要。默认拒绝的防火墙能保护你免受那些你自己都忘了安装的服务的影响,也能防止未来某个软件包悄悄开始监听端口。它没有任何成本,却能堵住各种意外。

多久应该重新检查一次加固情况?

自动安全更新会处理日常工作,但在每次安装重大软件之后,以及至少每月一次,都应该检查监听端口和认证日志。把加固后的基线状态视为需要持续验证的东西,而不是设置一次就可以置之不理的东西。

付诸实践。

离岸服务器最低 $3.49/月起部署 · 21 种加密货币 · 无需 KYC。