搬瓦工 VPS 安全基线加固(Debian/Ubuntu)一键审计与最小化暴露面指南
来自md5.pw
更多语言
更多操作
这是此页面的最新修订,它没有已核准修订。
搬瓦工 VPS 安全基线加固(Debian/Ubuntu)一键审计与最小化暴露面指南
一、文章目标
本文用于帮助 BandwagonHost(BWH)用户在不依赖复杂安全套件的情况下,快速完成 VPS 的基础安全加固,降低被扫描、爆破、误配置导致失联的风险。
二、适用范围与不适用范围
适用范围:
- 新购 VPS(建议开机后 30 分钟内完成)
- 仅有 SSH 远程管理需求的 Debian/Ubuntu 服务器
- 准备部署网站、代理、监控、自动化任务前的基线准备
不适用范围:
- 已有复杂生产业务且变更窗口不足的机器(先做快照再操作)
- 依赖密码登录且暂未准备公钥的场景
- 不具备 KiwiVM VNC 登录兜底能力的用户
三、变更前准备(强烈建议)
- 在 KiwiVM 创建一次快照
- 记录当前 SSH 端口、root 密码、已开放端口
- 打开 KiwiVM 的 VNC(Interactive Shell)页面备用
四、5 分钟基础审计(先看现状)
# 系统信息 uname -a lsb_release -a || cat /etc/os-release # 监听端口与进程 ss -tulpen # 最近登录来源 last -a | head -n 20 # SSH 当前关键配置 grep -E '^(Port|PermitRootLogin|PasswordAuthentication|PubkeyAuthentication|MaxAuthTries)' /etc/ssh/sshd_config # 防火墙状态(若未安装 ufw 会报错,可忽略) ufw status verbose || true
判定建议:
- 若
22端口对公网开放且密码登录开启,属于高风险 - 若出现异常国家/地区登录记录,先改密钥和登录策略
- 若服务器只用于单应用,不应存在大量无关监听端口
五、最小暴露面加固步骤
步骤 1:创建普通 sudo 管理员
adduser opsadmin usermod -aG sudo opsadmin id opsadmin
说明:
- 后续尽量不用 root 直连
- 若你使用的是 Debian 旧版,sudo 组可能是
wheel,需按实际调整
步骤 2:配置 SSH 公钥登录
在本地执行:
ssh-keygen -t ed25519 -C "bwh-prod" ssh-copy-id -i ~/.ssh/id_ed25519.pub opsadmin@<你的VPSIP>
服务器侧验证:
ls -l /home/opsadmin/.ssh/authorized_keys
步骤 3:收紧 SSH 配置
编辑 /etc/ssh/sshd_config,确保以下项:
PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes MaxAuthTries 3
如需改端口(可选):
Port 22222
应用配置:
sshd -t && systemctl restart ssh || systemctl restart sshd systemctl status ssh --no-pager || systemctl status sshd --no-pager
步骤 4:启用 UFW 最小规则集
apt update && apt install -y ufw # 默认拒绝入站,允许出站 ufw default deny incoming ufw default allow outgoing # 放行 SSH 端口(如果你改了端口,改成对应端口) ufw allow 22222/tcp # 如需网站服务再开放 # ufw allow 80/tcp # ufw allow 443/tcp ufw enable ufw status numbered
步骤 5:启用 Fail2ban
apt install -y fail2ban cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑 /etc/fail2ban/jail.local,至少确认:
[sshd] enabled = true port = 22222 maxretry = 5 findtime = 10m bantime = 1h
启动与检查:
systemctl enable --now fail2ban fail2ban-client status fail2ban-client status sshd
六、一键审计脚本(可重复执行)
cat >/usr/local/bin/bwh-sec-audit.sh <<'SH' #!/usr/bin/env bash set -euo pipefail echo "===== 基础信息 =====" uname -a cat /etc/os-release | sed -n '1,6p' echo "\n===== SSH 配置 =====" grep -E '^(Port|PermitRootLogin|PasswordAuthentication|PubkeyAuthentication|MaxAuthTries)' /etc/ssh/sshd_config || true echo "\n===== 开放端口 =====" ss -tulpen | head -n 50 echo "\n===== UFW 状态 =====" ufw status verbose || true echo "\n===== Fail2ban 状态 =====" fail2ban-client status || true echo "\n===== 最近登录 =====" last -a | head -n 15 SH chmod +x /usr/local/bin/bwh-sec-audit.sh /usr/local/bin/bwh-sec-audit.sh
七、验证清单(变更后必须做)
- 新开终端可用公钥成功登录
- root 密码登录失败(符合预期)
ufw status只开放必要端口fail2ban-client status sshd正常有 jail- KiwiVM VNC 仍可进入系统
八、回滚与救援(防止锁死)
若 SSH 断连:
- 通过 KiwiVM VNC 登录
- 临时关闭 UFW:
ufw disable - 回滚 SSH 配置并重启 ssh 服务
- 使用本地终端重新验证后再逐步加固
可用回滚命令:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bad # 手动修正后 sshd -t && systemctl restart ssh || systemctl restart sshd ufw disable
九、常见误区
- 先关密码登录再验证公钥,导致直接失联
- 改了 SSH 端口但 UFW 未放行新端口
- 把
PermitRootLogin写成错误值导致 sshd 启动失败 - 误以为快照等于备份,未做异地数据备份
十、结论
对大多数 BWH 用户,完成本指南后可以显著降低 SSH 暴露风险。建议每月执行一次审计脚本,并在重大上线前复查端口、登录策略和封禁策略。