在 Proxmox VE 中,数据中心防火墙是所有其他防火墙的”总闸”。如果数据中心防火墙被禁用,那么节点、VNet、虚拟机网卡级别的防火墙规则都不会生效,所有流量直接放行。

一、PVE 防火墙的总开关机制

PVE 的防火墙是一个分层系统,但所有层级都统一由 pve-firewall 服务管理。它们之间存在严格的”主从”依赖关系:

防火墙层级对比

防火墙层级配置位置有无独立的启用开关?生效条件
数据中心防火墙数据中心 → 防火墙 → 选项enable: 1/0必须启用,作为总闸
节点防火墙节点 → 防火墙 → 选项有(可覆盖数据中心状态)数据中心防火墙启用,或节点手工强制开启
VNet 防火墙SDN → VNets → 防火墙标签无独立开关数据中心防火墙启用,且 VNet 上勾选了”防火墙”
虚拟机网卡防火墙VM → 硬件 → 网络设备 → 编辑无独立开关数据中心防火墙启用,且该网卡勾选了”防火墙”
关键结论

只要数据中心防火墙的”启用防火墙”选项被关闭,整个宿主机的 iptables 和 ebtables 规则就会被清空,所有流量都不经任何过滤自由流通。

二、层级结构与数据包流向

PVE 防火墙层级结构
PVE 防火墙层级结构

① 数据中心/节点防火墙(主策略层)

节点防火墙会**继承**数据中心规则,并可单独添加覆盖规则
如果数据中心没有启用,节点防火墙规则同样被忽略
这一层主要保护宿主机本身,例如限制 SSH(22)、Web 管理界面(8006)等

② VNet 防火墙(网络隔离层)

SDN 专用的二层/三层防火墙,作用于整个虚拟网络
可以控制整个网络的入方向、出方向和内部转发
注意

即使 VNet 上没有定义任何手工规则,只要勾选了”防火墙”,就会在 ebtables 中插入默认 DROP 规则,导致默认不通。

③ 虚拟机网卡防火墙(单机独立层)

每个虚拟机的网卡都可以单独勾选"防火墙"
限制可以非常精细:例如只允许某个源 IP 访问该 VM 的特定端口

④ 虚拟机系统内部防火墙(操作系统自身)

最后一道防线,属于 Guest OS 自身控制(Windows 防火墙、Linux iptables 等),必须进入虚拟机内部进行配置,PVE 无法直接管理。

三、开启与关闭的联动规则

场景 1:数据中心防火墙关闭

所有层级(节点/VNet/网卡)均失效
全部流量自由流通

场景 2:数据中心防火墙开启

节点防火墙规则立刻生效
VNet/网卡防火墙:仅当手动勾选"防火墙"后才生效

简单记忆法

1
2
3
4
数据中心防火墙 = 整个房子的总电闸
节点/VNet/网卡防火墙 = 各个房间的分路开关
拉下总闸,分路开关全部断电
推上总闸后,哪个分路开关被打开,哪个房间才受控

四、从历史问题中验证此结构

H1 能通,H2 不通

数据中心防火墙当时可能是关闭的,所以 H1 完全通畅
后来打开数据中心防火墙并添加了 DHCP/DNS 规则,**同时 H2 的 VNet 勾选了"防火墙"且没有完整规则**,导致 H2 内部被阻断

能 ping 通网关,不能 ping 其他 VM

网关 IP 在宿主机,数据包不经过 VNet 防火墙的转发路径,只经过 INPUT 链(已被数据中心放行 ICMP)
VM 间通信需要流经 VNet 的 FORWARD 链,而 VNet 防火墙默认 DROP 且未允许,所以 ping 不通

取消端口隔离后仍不通

端口隔离只是二层桥属性,而当时 VNet 防火墙仍在工作(ebtables 规则),强制丢弃了 VM 间帧。

关闭虚拟机网卡上的”防火墙”勾选后恢复

关掉了 VM 自身的网卡防火墙,但核心仍是 VNet 防火墙的规则。最终通过全放行规则解决了。

五、推荐防火墙设计

需补充确认的两个小细节

转发(FORWARD)策略
您的数据中心规则目前只定义了 in 方向,这意味着只影响进入宿主机的流量。虚拟机访问外网(通过 SNAT)或虚拟机间通信,走的是 FORWARD 链。
只要您没有在数据中心防火墙手工添加 FORWARD DROP 规则,这个状态就是安全的,无需额外操作。

DHCP 客户端端口 68
您在数据中心放行了 UDP 68,这其实是客户端的源端口,服务器监听的是 67。通常只需放行目的端口 67 即可(因为状态防火墙会自动允许返回流量)。
建议改为:

1
in ACCEPT udp dport 67

优化后的推荐规则(数据中心)

数据中心规则表

方向动作协议源地址目的端口说明
inACCEPTudp192.168.0.0/1667DHCP 服务器
inACCEPTudp192.168.0.0/1653DNS 查询
inACCEPTicmp192.168.0.0/16anyPing 排错
节点防火墙

额外添加:in ACCEPT tcp source <管理IP段> dport 8006

这样设计的优点

**排错简单**:没有 VNet/网卡防火墙的隐形规则,网络行为符合直觉
**隔离仍有效**:端口隔离继续阻止 VM 间二层通信
**安全未降低**:数据中心防火墙保护宿主机,虚拟机内部防火墙仍可启用
**未来易扩展**:如需增加精细访问控制,可随时开启特定 VNet 防火墙

操作清单(确保生效)

操作清单

数据中心防火墙:开启,添加上述规则
节点防火墙:确认已集成数据中心规则,并添加 8006 端口限制
每个 VNet(H1/H2/H3):在 SDN 界面确保"防火墙"复选框为**未勾选**,应用 `ifreload -a`
所有虚拟机网卡:编辑硬件 → 网络设备 → 确认"防火墙"**未勾选**

测试验证

测试项目

VM 获取 IP:正常
VM ping 网关:通
H1/H3 内 VM 互 ping:通
H2 内 VM 互 ping:不通(符合隔离预期)
VM 访问外网(如有 SNAT):通
结论

您的设计完全符合小型单节点生产的推荐实践,既安全又省心。