刚买到一台新 VPS,系统往往是最简净装。时区还是默认的 UTC 导致看业务日志对不上时间、小内存 VPS 没配 Swap 导致跑两个容器就触发 OOM 假死,或者内核没有开启 BBR 导致跨国网络延迟高。
这篇笔记整理了我每次拿到新 VPS 时的标准化初始化动作:校准系统时区、挂载 2G 应急 Swap、开启 BBR 拥塞控制、配置 ED25519 免密登录,最后把 UFW 白名单防火墙与 Fail2ban 拉起来。
初始化目标清单
完成本篇指南的阶梯实操后,你的 VPS 将达成以下六大健康指标:
- 时区时钟毫秒对齐:系统时区统一校准为
Asia/Shanghai,彻底告别日志时区混乱与定时任务偏差; - Swap 虚拟内存兜底:为小内存机器(1G~2G RAM)挂载 2GB 高效 Swap,杜绝瞬时内存激增导致系统死机;
- BBR 网络拥塞加速:开启 Google BBR 算法,优化高延迟与跨国丢包环境下的网络吞吐量;
- 全链路现代密钥登入:部署高强度 ED25519 密钥对,彻底关闭密码登录漏洞;
- 最小权限白名单防护:UFW 仅放行必要业务端口,默认拒绝全部未知入站;
- 主动拉黑防御:Fail2ban 自动监控认证失败,对恶意爆破 IP 实施 24 小时封禁。
准备工作:设置环境变量
在敲击命令前,先在终端统一定义参数变量:
# ================= 全局参数定义 =================
SWAP_SIZE="2G" # 建议分配的虚拟内存大小 (一般为物理内存的 1~2 倍)
CUSTOM_SSH_PORT="2222" # 自定义安全 SSH 端口 (可选,建议修改)
TIMEZONE="Asia/Shanghai" # 目标标准时区
# ================================================
校准系统时区与更新软件包
新机器出厂通常使用 UTC 或各种异地时区,必须第一时间对齐。
1. 设置时区并校准时间
服务器端:
# 设置时区为亚洲/上海
sudo timedatectl set-timezone ${TIMEZONE}
# 开启 NTP 自动时间同步
sudo timedatectl set-ntp true
# 查看时间状态
timedatectl
2. 更新系统并安装实用小工具
服务器端:
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update && sudo apt-get upgrade -y -qq
sudo apt-get install -y curl wget git htop ufw fail2ban ca-certificates
配置 2GB Swap 应急虚拟内存
如果你的 VPS 内存仅有 1GB 或 2GB,一旦运行 Node.js 编译或大流量容器,极易触发内核 Out Of Memory (OOM) 杀掉核心进程。构建一块 Swap 可以在内存用尽时代偿缓冲,保全系统不宕机。
1. 检查现有 Swap 状态
服务器端:
free -h
swapon --show
如果输出为空,说明当前系统没有 Swap,必须立即创建!
2. 一键创建并挂载 2GB Swap
服务器端:
# 1. 快速分配 2GB 空文件
sudo fallocate -l ${SWAP_SIZE} /swapfile || sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
# 2. 赋予严格权限 (仅 root 可读写)
sudo chmod 600 /swapfile
# 3. 格式化为交换分区
sudo mkswap /swapfile
# 4. 立即激活 Swap
sudo swapon /swapfile
# 5. 写入 fstab 实现开机自启持久化
if ! grep -q '/swapfile' /etc/fstab; then
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
fi
# 6. 验证挂载
free -h
核验标准:Swap: 一行显示已拥有 2.0Gi 空间,抗风险能力倍增!
开启 BBR 内核网络加速
现代 Linux(内核版本 4.9+,Debian 10/11/12、Ubuntu 20.04/22.04/24.04)已原生集成 Google BBR。开启后在跨国远距离传输时能显著跑满带宽。
1. 注入 BBR 内核参数
服务器端:
sudo tee /etc/sysctl.d/99-bbr.conf << 'EOF'
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF
# 立即重新加载内核配置
sudo sysctl --system
2. 验证 BBR 是否生效
服务器端:
sysctl net.ipv4.tcp_congestion_control
核验标准:输出 net.ipv4.tcp_congestion_control = bbr 即告成功。
配置 ED25519 密钥免密登录
用密钥代替传统密码,不仅省去每次输长串字符的繁琐,更是彻底防范弱口令扫描的唯一真理。
1. 本地生成密钥并推送
本地电脑:
# 生成本地专属 ED25519 密钥
ssh-keygen -t ed25519 -C "admin@vps" -f ~/.ssh/id_ed25519_vps
# 一键推送至服务器
ssh-copy-id -i ~/.ssh/id_ed25519_vps.pub root@YOUR_SERVER_IP
2. 服务器端严格赋予权限
服务器端:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
配置 UFW 防火墙
⚠️ 【高能警告】:
永远遵循:先放行当前 SSH 端口 ➔ 再启用防火墙!
服务器端:
# 1. 设置默认策略:封堵入站,放行出站
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 2. 必须步骤:优先放行当前 SSH 端口 (默认 22)
sudo ufw allow 22/tcp comment "SSH"
# 3. 放行常规 Web 服务端口
sudo ufw allow 80/tcp comment "HTTP"
sudo ufw allow 443/tcp comment "HTTPS"
# 4. 激活防火墙并确认
echo "y" | sudo ufw enable
sudo ufw status verbose
部署 Fail2ban 自动防爆破
即使端口没变,Fail2ban 也能自动封杀尝试撞库的黑客 IP。
服务器端:
# 编写适配 Debian 12 / Ubuntu 24.04 的生产级 jail.local
sudo tee /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 86400
findtime = 600
maxretry = 5
banaction = ufw
[sshd]
enabled = true
port = 22
backend = systemd
EOF
# 启动并激活服务
sudo systemctl enable fail2ban && sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
新连接验证
保持当前终端不动,在本地电脑新开一个窗口测试:
本地电脑:
ssh -i ~/.ssh/id_ed25519_vps root@YOUR_SERVER_IP
核验标准:无需输入密码,秒级直通服务器,整套加固与网络调优圆满落地!
常见问题与排障
Q1:开启 UFW 后,外部 Ping 不通服务器了?
- 解答:UFW 默认可能会丢弃 ICMP 报文。如果希望恢复 Ping 响应,可在
/etc/ufw/before.rules中确认包含-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT。
Q2:Swap 分区创建时提示 fallocate failed: Operation not supported?
- 根因:少数特定文件系统不支持
fallocate快速预分配。 - 自愈方案:改用
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048命令进行分配。
还没有人在这篇手记留下纸条,来做第一个亮灯的人吧。