虚拟化平台Proxmox VE web管理口安全加固

很多人在装好 Proxmox VE(PVE)后,习惯直接通过 https://服务器IP:8006 来管理虚拟化平台。
这个 Web 管理口默认监听在 8006 端口,一旦放到公网,很容易被扫描工具盯上,遭遇暴力破解、漏洞探测甚至未授权访问。
本文要解决的就是这个问题:在不影响正常使用的前提下,把 PVE 的 Web 管理口从“裸奔”状态改成“白名单+强认证”状态。
文章里的命令和配置均以 PVE 8.x 为例,但同样适用于 6.x、7.x 等常见版本。

先判断风险:PVE 管理口裸奔到底会怎样

PVE 的 Web 管理界面自身已经启用 HTTPS,默认证书是自签名的。
但“有 HTTPS”不等于“安全”:

  • 端口长期开放:公网扫描器会把 8006 作为重点目标,任何 IP 都能尝试登录。
  • 默认自签证书:容易被中间人劫持,登录用户名和密码可能在传输中被截获。
  • 二次验证缺失:默认只靠用户名和密码,弱密码几乎等于没有防护。
  • 管理面与业务面不分:如果 PVE 同时跑了业务虚拟机,Web 管理口被攻破,整个宿主机和所有虚拟机都会失控。

所以加固思路很明确:限制谁能访问、加密连接、增强登录认证

动手前要准备的几件事

先把操作条件列清楚,避免中途卡壳:

  1. 能通过 SSH 登录 PVE 宿主机,使用 root 账号或拥有 sudo 权限的账号。
  2. 记录你当前登录 PVE 的 IP 地址(例如 192.168.1.100)。
  3. 如果 PVE 有快照或备份功能,建议先做一个 /etc/pve 配置备份。
  4. 准备好你日常办公网络的公网 IP 或固定内网网段,后续防火墙白名单要填它。
注意:这里说的白名单,既可以是 PVE 自带的防火墙,也可以是上游路由器、云安全组的入站规则。最稳妥的做法是两层都控制。

PVE 管理口安全加固实操步骤

第一步:开启 PVE 自带防火墙并在 Web 管理口上启用白名单

在 PVE 中,每个节点都有独立的防火墙配置。
在 SSH 里执行以下命令启用防火墙:

systemctl enable --now pve-firewall

然后检查防火墙状态:

pve-firewall status

下一步为节点添加管理口入站规则,只允许指定 IP 访问 8006 端口。
<你的节点配置目录>(通常是 /etc/pve/nodes/<节点名>/host.fw)中编辑或创建规则文件。
这里直接提供一套可用的最小规则:

[OPTIONS]
enable: 1
policy_in: DROP

[RULES]
# 允许指定的公网 IP 访问 PVE Web 管理口
IN ACCEPT -source 203.0.113.10 -p tcp -dport 8006 -log nolog
# 允许内网网段访问
IN ACCEPT -source 192.168.1.0/24 -p tcp -dport 8006 -log nolog

注意:policy_in: DROP 会默认丢弃所有入站流量,务必先把自己的 IP 加进白名单,再保存配置。
保存后执行:

pve-firewall compile
pve-firewall restart

如果 PVE 所在网络有安全组或物理防火墙,也要在那边放行相同来源 IP 的 8006 端口访问,其他全部拒绝。

第二步:限制 Web 服务监听地址

如果 PVE 只有内网管理需求,可以直接让 Web 服务只监听内网 IP,不监听所有网卡。
编辑 /etc/default/pveproxy

nano /etc/default/pveproxy

找到 LISTEN_IP 或新增一行:

LISTEN_IP="192.168.1.100"

保存后重启 pveproxy 服务:

systemctl restart pveproxy

这样即使防火墙规则被误删,外网网卡上的 8006 端口也不会再开放。

第三步:强化 HTTPS 配置,降级风险

虽然 PVE 强制使用 HTTPS,但旧版 TLS 协议可能有安全漏洞。
建议在 /etc/default/pveproxy 中追加两行:

TLS_HONOR_CIPHER_ORDER=1
TLS_CIPHERS="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384"

具体支持的加密套件取决于 OpenSSL 版本,修改后重启服务:

systemctl restart pveproxy

如果公司或家里有域名,也可以给 PVE 挂一个正式签发的 SSL 证书,避免自签证书每次访问都弹警告。
证书上传到 /etc/pve/local/pve-ssl.pem/etc/pve/local/pve-ssl.key 后重启 pveproxy 即可。

第四步:开启 Web 管理口双因素认证

从 PVE 6.2 开始,Web 管理界面原生支持 TOTP 双因素验证。
登录 PVE Web 控制台,依次打开 数据中心 -> 权限 -> 用户,选择你的用户,点击“编辑”,在 双因素认证(TFA) 区域选择 TOTP,然后用手机上的 Google Authenticator 或 Authy 扫码绑定。

如果你目前已经无法登录 Web 界面,也可以通过命令行给用户绑定 TOTP:

pveum user tfa create root@pam --type totp

执行后会生成一段 Base32 密钥和二维码文本,需要手动添加到手机认证器里。
绑定完成后,每次登录都需要输入动态验证码,即使密码泄露也无法直接登录。

验证加固效果,并避开常见坑

完成以上步骤后,一定要做一次外部视角检查。

验证管理口是否还裸奔在公网

在另一台不在白名单内的机器上,尝试访问:

curl -k https://你的PVE外网IP:8006

预期结果是 Connection timed outConnection refused
如果仍然能打开登录页,说明防火墙规则没有生效,或者 LISTEN_IP 配置没有覆盖实际使用的网卡。

在白名单内的机器上访问,应该能正常打开登录页,输入密码后还要填写 TOTP 验证码。

避坑:不要把自己锁在门外

这是最容易翻车的地方。
建议提前做两件事:

  • 开一个新 SSH 会话,保持登录状态,不要中途断开。
  • 在防火墙规则中同时放行至少一个备用管理 IP,比如公司网络和手机 4G 网络的 IP。

万一规则写错导致自己被拒之门外,可以通过 IPMI/带外管理、物理显示器键盘或云控制台 VNC 登录宿主机,手动删除或修正防火墙规则文件。

避坑:pve-firewall 和上游防火墙的关系

PVE 自带防火墙默认会拦截所有非白名单流量,但如果你在前面还有一层云安全组,安全组仍然必须放行 8006 端口,否则内网也进不来。
推荐的方案是:云安全组只放行办公公网 IP -> PVE 8006,PVE 机房防火墙再对管理网段做白名单,两层都收窄。

常见疑问与补充建议

如果我的办公 IP 不固定,
每次都变怎么办?
可以使用 VPN(如 WireGuard、
OpenVPN)先连入内网,
再通过内网 IP 访问 PVE 管理口,
这样防火墙只需要放行内网网段,
不用追着公网 IP 改规则。

已有 pve-firewall 后还能用 iptables 吗? 建议不要混用,pve-firewall 本身就是基于 iptables/nftables 的封装,手动加规则容易冲突。
如果必须加自定义规则,请写到 /etc/pve/firewall 下的规则文件里,别直接用 iptables 命令临时添加。

PVE Web 管理口加固后,
SSH 22 端口是不是也一样处理?
是的,
SSH 同样不建议直接对公网开放,
方法类似:
在防火墙规则中只放行管理 IP 的 22 端口,
或者干脆把 SSH 端口限制在内网。

完成这套加固后,PVE 管理口就不再是公网上的“裸奔”服务了。
日常使用体验基本不变,但登录入口的可见性、传输加密强度和认证强度都得到了明显提升。
如果中间遇到访问异常,优先检查防火墙规则顺序和 pveproxy 是否成功重启,也可以直接查看 journalctl -u pveproxy 的日志来定位问题。

分享到:
上一篇
redis未授权访问防护,设置密码
下一篇
IP被GFW屏蔽判定流程,区分端口封禁
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意