打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

搬瓦工 VPS 安全基线加固(Debian/Ubuntu)一键审计与最小化暴露面指南

来自md5.pw
这是此页面的最新修订,它没有已核准修订。

搬瓦工 VPS 安全基线加固(Debian/Ubuntu)一键审计与最小化暴露面指南

一、文章目标

本文用于帮助 BandwagonHost(BWH)用户在不依赖复杂安全套件的情况下,快速完成 VPS 的基础安全加固,降低被扫描、爆破、误配置导致失联的风险。

二、适用范围与不适用范围

适用范围:

  1. 新购 VPS(建议开机后 30 分钟内完成)
  2. 仅有 SSH 远程管理需求的 Debian/Ubuntu 服务器
  3. 准备部署网站、代理、监控、自动化任务前的基线准备

不适用范围:

  1. 已有复杂生产业务且变更窗口不足的机器(先做快照再操作)
  2. 依赖密码登录且暂未准备公钥的场景
  3. 不具备 KiwiVM VNC 登录兜底能力的用户

三、变更前准备(强烈建议)

  1. 在 KiwiVM 创建一次快照
  2. 记录当前 SSH 端口、root 密码、已开放端口
  3. 打开 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

判定建议:

  1. 22 端口对公网开放且密码登录开启,属于高风险
  2. 若出现异常国家/地区登录记录,先改密钥和登录策略
  3. 若服务器只用于单应用,不应存在大量无关监听端口

五、最小暴露面加固步骤

步骤 1:创建普通 sudo 管理员

adduser opsadmin
usermod -aG sudo opsadmin
id opsadmin

说明:

  1. 后续尽量不用 root 直连
  2. 若你使用的是 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

七、验证清单(变更后必须做)

  1. 新开终端可用公钥成功登录
  2. root 密码登录失败(符合预期)
  3. ufw status 只开放必要端口
  4. fail2ban-client status sshd 正常有 jail
  5. KiwiVM VNC 仍可进入系统

八、回滚与救援(防止锁死)

若 SSH 断连:

  1. 通过 KiwiVM VNC 登录
  2. 临时关闭 UFW:ufw disable
  3. 回滚 SSH 配置并重启 ssh 服务
  4. 使用本地终端重新验证后再逐步加固

可用回滚命令:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bad
# 手动修正后
sshd -t && systemctl restart ssh || systemctl restart sshd
ufw disable

九、常见误区

  1. 先关密码登录再验证公钥,导致直接失联
  2. 改了 SSH 端口但 UFW 未放行新端口
  3. PermitRootLogin 写成错误值导致 sshd 启动失败
  4. 误以为快照等于备份,未做异地数据备份

十、结论

对大多数 BWH 用户,完成本指南后可以显著降低 SSH 暴露风险。建议每月执行一次审计脚本,并在重大上线前复查端口、登录策略和封禁策略。