VPSKnow

购机后必做清单:新机安全初始化 10 步全攻略

初级
20分钟

很多人买到 VPS 第一件事就是装软件、建网站,却忽略公网服务从上线起就可能被自动扫描。本清单按风险顺序给出 10 个初始化步骤,每步附带可执行命令;实际完成时间取决于系统更新、控制台能力和验证过程,不要为了赶时间跳过新会话测试与回退确认。

📋 10 步清单总览

01 IP 健康体检 首要
02 更新系统软件包 基础
03 确认控制台与回退入口 防锁死
04 配置 SSH 密钥登录 安全
05 禁用密码登录 安全
06 配置 UFW 防火墙 安全
07 安装 Fail2ban 安全
08 校准时区与时间同步 运维
09 配置 Swap 虚拟内存 稳定性
10 开启安全自动更新 维护

⏱ 预计完成时间:约 30 分钟 | 难度:初级 | 适用系统:当前受支持的 Debian / Ubuntu LTS

⚠️ 为什么新机到手别急着用?

🤖

自动化扫描无处不在

公网 SSH 和其他常见服务会持续面对自动扫描。真正需要降低的是弱密码、长期开放的高权限登录和未修补服务带来的风险,而不只是隐藏端口。

🕳️

默认配置漏洞多

不同镜像、云防火墙和商家安全组的默认策略并不一致。应实际检查监听端口与入站规则,并及时修补系统和已安装服务的已知漏洞。

💸

被入侵代价极高

服务器被黑后常见结果:被用于挖矿耗尽资源、发送垃圾邮件导致 IP 被拉黑、数据被加密勒索。重装系统恢复数据的代价远大于 30 分钟的加固时间。

操作前提:确保已能通过 SSH 成功登录服务器(参见 SSH 连接指南),并且已完成 新机 IP 体检。以下所有命令均在服务器端执行,以 root 身份登录操作。

🩺 第 1 步:IP 健康体检

🚨

必须第一步做!大多数商家提供 24-72 小时内免费更换问题 IP 的机会,错过窗口期后换 IP 需要额外付费($2-5)。先检查 IP 再做其他配置,避免白费功夫。

1
全球多点 Ping 测试

访问 itdog.cnping.pe,从不同地区和运营商测试。Ping 全红也可能是 ICMP 被禁、探针异常或临时路由故障,需结合 TCP 端口、MTR、服务端监听和本地多网络复测后再判断是否换 IP。

2
IP 纯净度检测

使用 Scamalytics、AbuseIPDB 和 Spamhaus 等不同类型的数据源交叉核对。评分口径和更新频率不同,单一高分或低分都不是最终结论;邮件、AI、流媒体或账号业务应直接测试对应目标服务。

3
TCP 端口连通性(可选)

访问 port.ping.pe,输入 IP:22。国内节点不通但国外通,说明 22 端口对中国方向有封锁,SSH 连接会很慢或不稳定。

体检通过标准:目标地区和运营商可通过预期协议稳定连接,路由与丢包没有持续异常,所需业务服务实际可用,且多个风险数据源没有与用途直接冲突的记录。保存测试时间和结果后再继续;更多工具参见 IP 工具箱

📦 第 2 步:更新系统软件包

系统出厂镜像往往不是最新版本,可能存在已知安全漏洞。第一件事是把所有软件包更新到最新。

apt update && apt upgrade -y && apt autoremove -y

⏱ 视软件包数量需 1-5 分钟。执行期间不要关闭终端。

apt update

刷新软件源索引

apt upgrade -y

升级所有已安装包

apt autoremove -y

清理不再需要的旧包

🛟 第 3 步:确认控制台与回退入口

修改 SSH、认证策略或防火墙前,先确认即使 SSH 失效也能恢复访问。改端口只能减少扫描噪声,不能替代密钥登录、最小权限和系统更新,因此不再列为基础安全的前置步骤。

1 验证带外控制台

在商家控制面板中找到 Console、VNC、KVM、Serial Console 或救援模式,实际打开一次并确认能够看到系统登录界面。

2 保留当前 SSH 会话

后续每次修改认证或防火墙后,都先在新终端验证登录。新会话成功前不要退出当前会话,也不要同时修改端口、密钥和防火墙。

3 确认恢复信息

确认账号邮箱、二次验证、救援系统说明和重装影响。重要数据先做异地备份,避免把“能重装”误当成“能恢复数据”。

⚠️ 关键安全提示

控制台和救援模式也可能因商家故障而不可用。它们是配置失误时的回退入口,不是备份;业务数据仍需保存在不同故障域。

🔑 第 4 步:配置 SSH 密钥登录

密钥登录比密码登录安全数个数量级。Ed25519 密钥几乎不可能被暴力破解,同时还能免密登录,体验更好。

本地 在本地电脑生成密钥对

本地终端(不是服务器)执行:

ssh-keygen -t ed25519 -C "your_email@example.com"

一路回车使用默认路径。生成的两个文件:私钥 ~/.ssh/id_ed25519(保密!)和公钥 ~/.ssh/id_ed25519.pub(可公开)。

本地 上传公钥到服务器(方法一:ssh-copy-id,推荐)

默认 SSH 端口为 22;如果您此前已经改过端口,再额外传入对应的 -p 参数:

ssh-copy-id root@YOUR_SERVER_IP

手动上传(方法二:适用于 Windows 或 ssh-copy-id 不可用时)

在服务器端执行(将公钥内容粘贴替换 YOUR_PUBLIC_KEY):

cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

🚫 第 5 步:禁用密码登录

前提:必须先完成第 4 步并确认密钥登录可以正常使用,再执行此步骤。否则会将自己锁在门外!

密钥配置好后,关闭密码登录,让所有暴力破解尝试彻底失效。

编辑 sshd_config,修改以下三项

# 禁用密码登录
PasswordAuthentication no

# 启用密钥登录
PubkeyAuthentication yes

# 禁止空密码
PermitEmptyPasswords no

保存后先校验,再平滑重载 SSH

# 先校验语法;失败时不要重载或退出当前会话
sshd -t

# Debian / Ubuntu 的服务单元通常名为 ssh
systemctl reload ssh

🧱 第 6 步:配置 UFW 防火墙

UFW(Uncomplicated Firewall)是 Linux 主机防火墙的简化前端,可使用系统提供的 iptables/nftables 后端。默认策略是拒绝所有入站、只放行必要端口;Docker 发布端口属于转发流量,需另行验证。

安装并配置 UFW

先放行当前正在使用的 SSH 端口;示例按默认 22 端口编写,只开放实际需要的 Web 端口:

ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp             # 当前 SSH 端口;若已改端口请同步替换
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

验证防火墙状态

ufw status verbose

常用 UFW 管理命令

ufw allow 8080/tcp

放行 8080 端口

ufw deny 3306/tcp

封锁 MySQL 端口

ufw delete allow 8080

删除已有规则

ufw allow from 1.2.3.4

只允许指定 IP

ufw disable

临时关闭防火墙(救急用)

ufw reset

清空所有规则重来

🚨 第 7 步:安装 Fail2ban

Fail2ban 监控日志文件,自动将多次登录失败的 IP 加入 iptables 封禁列表,是防暴力破解的最后一道防线。即使已禁用密码登录,也建议安装——它能防护 SSH 以外的其他服务(如 Nginx、邮件服务)。

安装 Fail2ban

apt install fail2ban -y

创建自定义配置文件

cat > /etc/fail2ban/jail.d/sshd.local << 'EOF'
[DEFAULT]
bantime  = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
port    = ssh
EOF

bantime = 3600

封禁 1 小时

findtime = 600

10 分钟内

maxretry = 5

失败 5 次触发

启动并设置开机自启

# 校验配置后再启用服务
fail2ban-client -t
systemctl enable fail2ban && systemctl start fail2ban

查看封禁状态

fail2ban-client status sshd

🕐 第 8 步:校准时区与时间同步

VPS 默认时区通常是 UTC,与国内时间相差 8 小时。时区错误会导致日志时间戳混乱、定时任务执行时间偏移、HTTPS 证书校验问题。

timedatectl set-timezone Asia/Shanghai
timedatectl status

常用时区列表

Asia/Shanghai

中国标准时间 UTC+8

Asia/Tokyo

日本 UTC+9

America/Los_Angeles

美西 UTC-8

Europe/Berlin

德国 UTC+1

💡 现代系统(Debian/Ubuntu)已默认启用 systemd-timesyncd 自动同步 NTP 时间,一般无需额外配置。

💿 第 9 步:配置 Swap 虚拟内存

Swap 是用磁盘空间模拟内存。当物理内存不足时,系统将部分内存数据转移到 Swap,防止 OOM(Out of Memory)直接杀死进程导致服务崩溃。1 GB 内存的 VPS 强烈建议配置 1-2 GB Swap。

fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
sysctl vm.swappiness=10
echo 'vm.swappiness=10' >> /etc/sysctl.conf

最后一行 vm.swappiness=10 表示系统只在物理内存剩余 10% 时才开始使用 Swap,避免过早降速。

验证 Swap 已生效:

free -h

Swap 大小参考建议

物理内存推荐 Swap适用场景
512 MB1 GB轻量建站、爬虫
1 GB1-2 GBWordPress、小型 API
2-4 GB2 GBDocker、数据库
8 GB+可选/不需要高内存机器通常不需要

🔄 第 10 步:开启安全自动更新

unattended-upgrades 会自动安装系统安全补丁,无需手动干预。只更新安全包,不会自动升级大版本,稳定可靠。

apt install unattended-upgrades -y
dpkg-reconfigure --priority=low unattended-upgrades

执行第二条命令时会弹出交互界面,选择 "Yes" 启用自动更新即可。

到这里,10 步安全初始化已全部完成!您的服务器现在已具备:可验证的回退入口、密钥登录、密码登录禁用、防火墙隔离、自动封禁暴力破解、时间校准、缓解 OOM 风险的 Swap,以及自动安全补丁。

🔍 验收:一键检查所有配置

运行以下脚本,一次性验证所有关键配置是否已生效:

echo "=== SSH Port ===" && ss -tlnp | grep sshd
echo "=== UFW Status ===" && ufw status
echo "=== Fail2ban ===" && systemctl status fail2ban --no-pager -l | head -5
echo "=== Swap ===" && free -h | grep Swap
echo "=== Timezone ===" && timedatectl | grep "Time zone"
echo "=== Last Login ===" && last -n 5

✅ 验收标准对照

SSH 监听: ss 输出中 sshd 只监听预期端口;使用默认 22 端口并不等于配置不安全
UFW 防火墙: ufw status 显示 "Status: active",规则列表中有您的 SSH 端口
Fail2ban: systemctl status 显示 "active (running)"
Swap: free -h 中 Swap 行显示非零数值(如 1.0G / 1.0G)
时区: timedatectl 显示 "Time zone: Asia/Shanghai" 或您设置的时区
密钥登录: 新开终端用密钥(不输密码)可以成功登录

常见问题解答

修改 SSH 端口后把自己锁在门外了,怎么办? +

不要慌,有救命通道:登录 VPS 商家控制面板(WHMCS/SolusVM/KiwiVM),找到 VNC / Console / KVM 功能,点击打开控制台。这是一个不依赖 SSH 的带外访问方式,就像坐在机器前直接操作。进入后编辑 /etc/ssh/sshd_config 把端口改回正确值,或者运行 ufw disable 临时关闭防火墙,再重启 sshd。操作完毕后关闭控制台,重新用正确端口 SSH 登录。事后必须仔细核查配置,确认防火墙规则放行了新 SSH 端口。

UFW 和 iptables 有什么关系?为什么不直接用 iptables? +

UFW 是主机防火墙的简化前端;现代 Ubuntu 通常使用 iptables-nft 后端,因此“输入的是 iptables 命令”不代表系统仍在使用旧内核后端。UFW 用 ufw allow 22 等命令生成并持久化规则,适合常规主机入站控制。需要复杂转发、集合或容器网络策略时,应先确认实际后端,再选择 UFW、iptables 兼容命令或原生 nftables,避免多个工具同时修改同一规则集。

Fail2ban 误封了我自己的 IP,如何解封? +

如果您无法 SSH 登录,先通过商家 VNC/串口控制台连接服务器,然后执行:fail2ban-client set sshd unbanip 你的IP。固定管理 IP 可在 /etc/fail2ban/jail.d/sshd.local 中加入精确白名单;不要为了方便白名单整个城市或运营商网段。动态家庭 IP 更适合通过可信 VPN 管理,或适当提高 maxretry 并保留带外控制台。

Swap 配置在 NVMe SSD 上会损害硬盘吗? +

在 VPS 上这个担心基本不成立,原因有三:① VPS 的 NVMe 是虚拟化的,底层物理磁盘由多个 VPS 共享,您的写入操作只是虚拟层的一小部分;② swappiness=10 意味着系统极少主动使用 Swap,只在内存极度不足时才会用到,日常写入量极少;③ 现代企业级 NVMe 寿命通常有数百 TBW(TeraByte Written),日常 Swap 使用几乎不影响寿命。更大的风险是没有 Swap 时内存耗尽导致服务崩溃。建议保留 Swap 配置,不必担心磁盘损耗。

这 10 步都完成了,VPS 就安全了吗?还有什么需要注意? +

完成这 10 步已经覆盖了 90% 的常见攻击面,但安全是持续的过程,还需注意:① 数据备份:定期将重要数据备份到异地(参见数据备份指南),这是应对硬件故障、误删、勒索软件的最后保障;② 最小权限原则:只安装必要软件,关闭不需要的服务;③ 应用层安全:Web 应用(如 WordPress)的漏洞是入侵的主要来源,定期更新插件和主题;④ 监控报警:部署 Uptime Kuma 等监控工具,服务器异常时第一时间收到通知;⑤ 定期检查登录日志last -n 20 查看最近登录记录,发现异常登录立即处理。

OpenVZ/LXC 架构的 VPS 能完成这 10 步吗? +

大部分步骤可以完成,但有以下限制:① Swap:OpenVZ 默认不支持用户自建 Swap(需商家在宿主机层开启),第 9 步可能失败;② UFW/iptables:部分 OpenVZ 环境的 iptables 内核模块被禁用,防火墙规则可能无法生效;③ 时区设置:部分 OpenVZ 容器时区与宿主机共享,timedatectl 修改可能不生效,需要用 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 替代;④ Fail2ban:通常可以正常使用。遇到上述限制时,建议联系商家寻求支持,或升级为 KVM 架构的 VPS。

重装系统后,这些配置还在吗?需要重新做一遍吗? +

重装系统通常会清空系统盘上的数据和配置,需要重新执行这些步骤。建议:① 将可重复配置写成可审阅、可分步执行的初始化脚本;② 异地备份 SSH 配置、/etc/fail2ban/jail.d/ 局部配置及业务数据;③ 快照只能作为短期回退点,仍需独立备份并定期验证恢复。重装范围和附加数据盘是否保留必须以商家提示为准。

如何把这 10 步写成一键初始化脚本? +

可以将本文中的命令整合为一个 bash 脚本(.sh 文件),在脚本顶部定义变量(SSH 端口、时区等),然后依次执行各步骤命令。注意以下事项:① 密钥的生成和上传步骤必须在本地执行,不能放在远程脚本里;② 修改 SSH 配置后应先运行 sshd -t,再平滑重载 SSH 服务;脚本不能替代新终端登录验证,应暂停并要求用户确认新连接可用;③ 建议脚本在交互模式运行,关键步骤前提示用户确认,避免自动化执行出错无法回滚。我们的自动化运维脚本指南中有详细的 Shell 脚本编写教程。

安装 Docker 需要额外开放哪些防火墙端口? +

安装 Docker 本身不要求额外开放端口;是否暴露取决于每个容器的发布配置。-p 3306:3306 默认绑定所有接口,可能绕过 UFW 常规 INPUT 规则直接对外可达。敏感服务优先使用 -p 127.0.0.1:3306:3306,并通过 docker psss -lntup 和外部扫描验证。不要设置 "iptables": false:Docker 官方不建议这样做,它可能破坏容器网络;复杂限制应按 Docker 实际防火墙后端配置转发规则。

完成初始化后,后续日常运维还需要做什么? +

初始化是一次性工作,日常运维建议养成以下习惯:① 每月检查一次df -h 磁盘使用率(超 80% 要清理)、free -h 内存占用、fail2ban-client status sshd 查看封禁记录;② 定期手动更新:即使开了自动安全更新,每 1-2 个月手动 apt update && apt upgrade 一次;③ 查看登录日志last -n 20 确认没有异常登录;④ 续费提醒:到期前一周续费,避免数据丢失;⑤ 定期备份:重要数据遵循 3-2-1 原则(本地 + 异地 + 云存储),参见数据备份实战指南