搬瓦工VPS
Bandwagonhost

搬瓦工 VPS 安全加固教程:SSH 密钥登录、UFW 和 Fail2ban

搬瓦工 VPS 开通后,很多用户会直接使用 root 密码登录服务器。这种方式适合首次进入系统,但不适合长期使用。VPS 暴露在公网环境中,SSH 端口会持续遇到扫描和爆破尝试,如果一直保留 root 登录和密码登录,后续部署网站、面板、监控或其他服务时,风险会继续增加。

下面以搬瓦工 Debian 12 VPS 为例,完成一套基础安全设置:创建 KiwiVM 快照、确认 Root shell 救援入口、创建普通管理员用户、配置 SSH 密钥登录、禁用 root 登录和 SSH 密码登录、启用 UFW 防火墙,并配置 Fail2ban 防爆破。

这篇教程适合新购搬瓦工 VPS,或者准备重新初始化的 Debian 12 服务器。如果你的 VPS 上已经运行了网站、面板、代理、数据库或其他业务,启用 UFW 前必须先记录当前服务端口,并在防火墙中放行对应端口,避免影响已有业务访问。

一、操作前先创建快照并确认救援入口

SSH 和防火墙都关系到远程登录入口,正式操作前建议先创建快照,并确认 KiwiVM 的 Root shell – interactive 可以打开,避免后续配置出错时无法进入服务器。

如果你还没有用过搬瓦工快照功能,可以先参考这篇教程完成快照创建:搬瓦工快照 Snapshot 迁移教程:完整克隆和迁移 VPS 数据

如果你不熟悉 KiwiVM 的在线 SSH 救援入口,可以先看这篇说明:搬瓦工在线 SSH“Root shell – interactive”的功能与使用方法

后面的操作过程中,当前 SSH 窗口不要关闭。每次修改 SSH 配置或启用 UFW 后,都要新开一个连接测试能否登录,再继续下一步。

二、查看初始 SSH 状态并创建管理员用户

先用 root 登录服务器,查看系统版本和 SSH 当前生效配置。这里使用的是 Debian 12 bookworm,SSH 端口为默认 22。

whoami
cat /etc/os-release
sshd -T | grep -E '^(port|permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries)'

关键返回如下:

port 22
maxauthtries 6
permitrootlogin yes
pubkeyauthentication yes
passwordauthentication yes
搬瓦工 Debian 12 VPS 初始 SSH 状态,默认端口为 22,允许 root 登录和密码登录

搬瓦工 Debian 12 VPS 初始状态下,SSH 使用 22 端口,并允许 root 和密码登录。

这个状态表示当前 VPS 使用 22 端口,允许 root 登录,也允许 SSH 密码登录。对刚开机的搬瓦工 Debian 12 VPS 来说,这种状态方便首次进入服务器,但不适合作为长期运行配置。

继续检查 UFW 和 Fail2ban 是否已经安装:

command -v ufw >/dev/null 2>&1 && ufw status verbose || echo "ufw not installed"

command -v fail2ban-client >/dev/null 2>&1 && fail2ban-client status || echo "fail2ban not installed"

正常返回如下:

ufw not installed
fail2ban not installed

这里需要注意:新购 VPS 并不是“只开放 22 端口”,而是系统没有启用 UFW 这类本机防火墙。公网端口能不能访问,主要取决于服务器上是否有服务监听,以及防火墙是否拦截。刚装好的系统通常只有 SSH 服务监听 22 端口,后续安装网站、面板或其他程序后,对应端口也可能暴露到公网。

接下来创建普通管理员用户。搬瓦工 VPS 初始管理通常使用 root 用户,完成初始化后,后续登录建议改用普通管理员用户,再通过 sudo 执行管理命令。这里创建的用户为 opsadmin,你也可以替换成自己习惯的用户名。

先确认系统已安装 sudo,Debian 12 通常可以直接安装或更新 sudo:

apt update && apt install -y sudo

接着创建普通管理员用户:

adduser opsadmin

执行过程中会要求设置 opsadmin 用户密码。Full Name、Room Number、Work Phone、Home Phone、Other 等信息可以直接回车跳过,最后确认信息时输入 y

创建完成后,把 opsadmin 加入 sudo 组,并检查用户所属用户组:

usermod -aG sudo opsadmin
id opsadmin

如果输出中能看到 sudo,说明 opsadmin 已经可以通过 sudo 执行管理员命令。状态类似下面这样:

uid=1000(opsadmin) gid=1000(opsadmin) groups=1000(opsadmin),27(sudo),100(users)

到这里普通管理员用户已经创建好。后面会把 Xshell 生成的 SSH 公钥写入 opsadmin 用户目录,并用该用户测试密钥登录和 sudo 权限。

三、生成 Xshell 密钥并配置 opsadmin 登录

打开 Xshell 的用户密钥管理器,新建一个用户密钥,密钥类型选择 ED25519,密钥名称可以填写 bwh-opsadmin

如果你还没有安装 Xshell,或者不熟悉 Xshell 的基础连接流程,可以先参考这篇教程完成软件安装和 SSH 连接设置:官方正版 Xshell 下载使用和连接 SSH 图文教程

Xshell 为搬瓦工 VPS 生成 ED25519 SSH 密钥

在 Xshell 中为搬瓦工 VPS 生成 ED25519 SSH 密钥,用于后续密钥登录。

生成密钥时建议设置密码短语。密码短语不是 VPS 的 root 密码,也不是 opsadmin 的系统密码,而是用于保护本地私钥文件。以后用该私钥登录服务器时,Xshell 可能会要求输入一次密码短语。

密钥生成后,在 Xshell 的公钥页面复制以 ssh-ed25519 开头的一整行内容。这里复制的是公钥,后面会写入服务器的 authorized_keys 文件;私钥保留在本地 Xshell 中,不需要上传到服务器,也不要通过网页或聊天工具传输。

回到 root 的 SSH 窗口,把刚才复制的公钥写入 opsadmin 用户的 authorized_keys 文件。下面命令中的公钥内容需要替换成你自己在 Xshell 中复制的那一整行。

install -d -m 700 -o opsadmin -g opsadmin /home/opsadmin/.ssh

cat > /home/opsadmin/.ssh/authorized_keys <<'EOF'
ssh-ed25519 AAAA...这里替换成你在 Xshell 中复制的公钥...
EOF

chown opsadmin:opsadmin /home/opsadmin/.ssh/authorized_keys
chmod 600 /home/opsadmin/.ssh/authorized_keys

ls -ld /home/opsadmin/.ssh
ls -l /home/opsadmin/.ssh/authorized_keys

权限应类似下面这样:

drwx------ 2 opsadmin opsadmin 4096 /home/opsadmin/.ssh
-rw------- 1 opsadmin opsadmin 81 /home/opsadmin/.ssh/authorized_keys

.ssh 目录使用 700 权限,authorized_keys 文件使用 600 权限。权限过宽可能导致 SSH 拒绝使用该公钥。

如果你使用的是 Windows 电脑,并且第一次用 Xshell 连接 Linux VPS,可以先看这篇连接教程熟悉主机、端口、用户名和认证方式的填写方法:Windows 用户如何使用 Xshell 成功远程连接到您的 Linux VPS 服务器

现在不要关闭 root 窗口,在 Xshell 中新建一个连接,主机填写搬瓦工 VPS 的 IP,端口填写 22,用户名填写 opsadmin,认证方式选择 Public Key,用户密钥选择刚才生成的 bwh-opsadmin

登录成功后执行:

whoami
sudo -v
sudo whoami

执行后可以看到:

whoami
opsadmin

sudo whoami
root
搬瓦工 VPS 使用 opsadmin 用户完成 SSH 密钥登录并通过 sudo 权限验证

opsadmin 用户已通过 SSH 密钥登录搬瓦工 VPS,并可使用 sudo 执行管理员命令。

只有确认普通用户可以通过 SSH 密钥登录,并且可以使用 sudo 权限,后面才可以继续禁用 root 登录和密码登录。否则一旦 SSH 配置改错,可能会把自己挡在服务器外面。

四、禁用 root 登录和 SSH 密码登录

完成搬瓦工 SSH 密钥登录验证后,可以开始收紧 SSH 配置。这里不直接覆盖原配置文件,而是在 /etc/ssh/sshd_config.d/ 下新增一个单独配置文件,后续回滚更方便。

先备份 SSH 主配置文件:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F-%H%M)
ls -l /etc/ssh/sshd_config.bak.*

写入 SSH 加固配置:

sudo tee /etc/ssh/sshd_config.d/99-bwh-hardening.conf >/dev/null <<'EOF'
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
EOF

查看配置内容:

sudo cat /etc/ssh/sshd_config.d/99-bwh-hardening.conf

检查 SSH 配置语法:

sudo sshd -t

如果没有输出,说明语法检查通过。然后重启 SSH 服务,并查看服务状态:

sudo systemctl restart ssh
sudo systemctl status ssh --no-pager

如果状态中显示 Active: active (running),说明 SSH 服务已经正常运行。

搬瓦工 VPS 修改 SSH 配置后重启 ssh 服务并显示 active running

SSH 配置检查通过后,ssh 服务重启并显示 active running。

重启完成后,继续查看 SSH 实际生效配置:

sudo sshd -T | grep -E '^(port|permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries)'

返回结果如下:

port 22
maxauthtries 3
permitrootlogin no
pubkeyauthentication yes
passwordauthentication no
搬瓦工 VPS 已关闭 root 登录和 SSH 密码登录,公钥登录保持开启

SSH 生效配置显示 root 登录和密码登录已关闭,公钥登录保持开启。

从返回结果可以看到,搬瓦工 VPS 仍然使用 22 端口,但 root 登录已经关闭,SSH 密码登录已经关闭,公钥登录保持开启,最大认证尝试次数调整为 3。这里完成后,请再次新开一个 Xshell 连接,用 opsadmin 和 SSH 密钥登录服务器。

如果你后续还想修改 SSH 默认端口,建议先确认新端口已经在 UFW 中放行,再修改 SSH 配置并重启服务。具体步骤可以参考:搬瓦工VPS怎样修改默认端口

五、启用 UFW 防火墙并放行 SSH 端口

完成 SSH 登录方式调整后,再配置 UFW 防火墙。新购 VPS 初始化时,可以先设置默认拒绝入站、允许出站,并放行 SSH 端口 22。

安装 UFW:

sudo apt install -y ufw

查看当前状态:

sudo ufw status verbose

未启用时会返回:

Status: inactive

设置默认规则并放行 SSH:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw show added

确认已经加入 SSH 放行规则后,再启用 UFW:

sudo ufw enable

出现提示时输入 y。启用后查看规则:

sudo ufw status numbered

启用后可以看到:

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
搬瓦工 VPS 启用 UFW 防火墙并放行 SSH 22 端口

UFW 防火墙已启用,当前入站规则只放行 SSH 22 端口。

启用 UFW 防火墙后,再新开一个 Xshell 连接,确认 opsadmin 仍然可以通过 22 端口登录。

后续如果部署网站,可以放行 HTTP 和 HTTPS 端口:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

如果安装面板、监控、API 服务或其他程序,需要根据实际监听端口追加 UFW 规则。不要为了省事开放一大段端口,VPS 安全设置的原则是用到哪个端口再开放哪个端口。

六、配置 Fail2ban 保护 SSH 登录

UFW 负责控制端口暴露,Fail2ban 用来处理 SSH 登录失败记录。配置 Fail2ban 后,如果同一来源持续尝试错误登录,Fail2ban 可以自动封禁来源 IP,减少 SSH 被持续爆破的风险。

安装 Fail2ban:

sudo apt install -y fail2ban

Debian 12 精简系统上,SSH 登录记录可能走 systemd journal。如果直接使用默认配置,可能遇到下面这个错误:

Have not found any log file for sshd jail

如果遇到这个报错,可以在 sshd jail 配置中加入 backend = systemd

sudo tee /etc/fail2ban/jail.d/sshd.local >/dev/null <<'EOF'
[sshd]
enabled = true
port = 22
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
EOF

启动并重启 Fail2ban:

sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban

查看 Fail2ban 状态:

sudo fail2ban-client status

返回结果如下:

Status
|- Number of jail:	1
`- Jail list:	sshd

继续查看 sshd jail:

sudo fail2ban-client status sshd

正常状态如下:

Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned:	0
   |- Total banned:	0
   `- Banned IP list:
搬瓦工 VPS Fail2ban 的 sshd jail 已正常运行

Fail2ban 已加载 sshd jail,并通过 systemd journal 读取 SSH 登录记录。

Journal matches 中出现 _SYSTEMD_UNIT=sshd.service,说明 Fail2ban 已经从 systemd journal 读取 SSH 登录记录。这个设置可以避免 Fail2ban 因找不到传统日志文件而启动失败。

七、最终验证与 root 登录测试

完成 SSH、UFW 和 Fail2ban 配置后,可以执行下面这条命令做最终汇总检查。它会同时输出 SSH 生效配置、UFW 规则和 Fail2ban 的 sshd jail 状态。

sudo sshd -T | grep -E '^(port|permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries)' && sudo ufw status numbered && sudo fail2ban-client status sshd

汇总结果如下:

port 22
maxauthtries 3
permitrootlogin no
pubkeyauthentication yes
passwordauthentication no

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 22/tcp (v6)                ALLOW IN    Anywhere (v6)

Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned:	0
   |- Total banned:	0
   `- Banned IP list:
搬瓦工 VPS 完成 SSH、UFW 和 Fail2ban 安全加固后的最终验证结果

最终检查显示 SSH、UFW 防火墙和 Fail2ban 的 sshd jail 均已生效。

从汇总结果可以看到,SSH 已关闭 root 登录和密码登录,UFW 防火墙处于 active 状态,并且 Fail2ban 的 sshd jail 已经加载。

还可以在 Xshell 中尝试使用 root 连接服务器。禁用 root 登录和 SSH 密码登录后,root 已不能直接通过 SSH 登录。后续日常管理应使用 opsadmin 登录,再通过 sudo 执行需要管理员权限的命令。

搬瓦工 VPS 禁用 root 登录后无法直接通过 SSH 连接

禁用 root 登录后,root 用户已不能直接通过 SSH 连接搬瓦工 VPS。

八、SSH 失联后的救援与回滚方法

如果操作过程中 SSH 失联,先进入 KiwiVM 的 Root shell – interactive。只要这个入口能进入系统,就可以手动关闭防火墙、移除 SSH 加固配置或恢复快照。

如果你不确定 SSH 连接失败是由防火墙、端口、用户名、密钥还是服务状态导致,可以先参考这篇排查教程逐项确认:搬瓦工 SSH 连接不上的可能原因以及相对应的解决方法

临时关闭 UFW:

ufw disable

移除前面新增的 SSH 加固配置:

mv /etc/ssh/sshd_config.d/99-bwh-hardening.conf /root/99-bwh-hardening.conf.bak
sshd -t
systemctl restart ssh

停止 Fail2ban:

systemctl stop fail2ban

如果系统已经无法快速修复,可以回到 KiwiVM 的 Snapshots 页面恢复前面创建的快照。快照可以帮助你回到修改前的系统状态,但重要网站数据、数据库和业务文件仍然需要单独做异地备份。

九、总结

这篇搬瓦工 VPS 安全加固教程完成了新购 Debian 12 VPS 的一套基础防护流程:创建 KiwiVM 快照,确认 Root shell 救援入口,创建普通管理员用户,配置 SSH 密钥登录,禁用 root 登录和 SSH 密码登录,启用 UFW 防火墙,并使用 Fail2ban 保护 sshd。

完成后,服务器仍然使用默认 22 端口进行 SSH 管理,但登录方式已经从 root 密码登录改为普通用户密钥登录。UFW 只放行 SSH 端口,Fail2ban 负责监控 SSH 登录失败记录。后续部署网站、面板或其他服务时,再根据实际端口追加 UFW 规则,不要提前开放暂时用不到的端口。

搬瓦工 VPS 套餐与购买参考
购买前建议先确认套餐区别、购买流程和优惠码,避免选错方案或漏用折扣。
下方表格整理了常见搬瓦工 VPS 套餐,包含配置、机房、价格和购买入口,适合快速对比。
套餐CPU内存硬盘流量带宽机房价格购买
KVM
(最便宜)
2核1GB20GB1TB1GbpsDC2 AO
DC8 ZNET
$49.99/年
最便宜
购买
3核2GB40GB2TB1Gbps$52.99/半年
$99.99/年
购买
CN2 GIA-E
最推荐
2核1GB20GB1TB2.5GbpsDC6 CN2 GIA-E
DC9 CN2 GIA
软银 JPOS_1
荷兰 EUNL_9
圣何塞 CN2 GIA
加拿大 CN2 GIA
$49.99/季度
$169.99/年
购买
3核2GB40GB2TB2.5Gbps$89.99/季度
$299.99/年
购买
SLA
(SLA 保障)
2核
独享
1GB20GB1TB2.5Gbps美国 DC5 SLA
99.99% 在线率
每两周免费换IP一次
$65.89/季
$239.99/年
购买
3核
独享
2GB40GB2TB2.5Gbps$116.99/季
$399.99/年
购买
香港(HKHK_8)
高端首选
2核2GB40GB0.5TB1Gbps中国香港
日本东京
日本大阪
新加坡
$89.99/月
$899.99/年
购买
4核4GB80GB1TB1Gbps$155.99/月
$1559.99/年
购买
大阪(JPOS_6)
(高性价比)
2核2GB40GB0.5TB1.5Gbps日本大阪$49.99/月
$499.99/年
购买
4核4GB80GB1TB1.5Gbps$86.99/月
$869.99/年
购买
选择建议:
  • 入门:KVM 常规套餐价格较低,适合预算有限、建站测试或轻量使用。
  • 推荐:CN2 GIA-E 套餐机房选择更多,线路表现更适合大陆访问用户。
  • 高端:香港、日本大阪等套餐价格更高,适合对延迟、机房位置或线路有明确需求的用户。
【常驻小尾巴】
无论本文聊的是 VPS、脚本还是一杯拿铁,我们都为折腾留了一个出口——
👥 搬瓦工中文网QQ交流群:238290124
一句话简介:技术闲聊、优惠爆料、翻车互助、红包随机掉落。
我们在这里等你一起把不可能变成日常。

关于搬瓦工 (BandwagonHost)

搬瓦工隶属于加拿大 IT7 Networks,是全球知名的 VPS 提供商。提供基于 KVM 架构的高性能主机,拥有包括香港、东京、洛杉矶在内的 20 个顶级机房。其自研的 KiwiVM 面板支持机房一键迁移、快照备份及 API 管理,以稳定性和极速直连线路著称。

搬瓦工购买教程搬瓦工套餐汇总