在 Proxmox VE 中,数据中心防火墙是所有其他防火墙的”总闸”。如果数据中心防火墙被禁用,那么节点、VNet、虚拟机网卡级别的防火墙规则都不会生效,所有流量直接放行。
一、PVE 防火墙的总开关机制
PVE 的防火墙是一个分层系统,但所有层级都统一由 pve-firewall 服务管理。它们之间存在严格的”主从”依赖关系:
防火墙层级对比
| 防火墙层级 | 配置位置 | 有无独立的启用开关? | 生效条件 |
|---|---|---|---|
| 数据中心防火墙 | 数据中心 → 防火墙 → 选项 | 有(enable: 1/0) | 必须启用,作为总闸 |
| 节点防火墙 | 节点 → 防火墙 → 选项 | 有(可覆盖数据中心状态) | 数据中心防火墙启用,或节点手工强制开启 |
| VNet 防火墙 | SDN → VNets → 防火墙标签 | 无独立开关 | 数据中心防火墙启用,且 VNet 上勾选了”防火墙” |
| 虚拟机网卡防火墙 | VM → 硬件 → 网络设备 → 编辑 | 无独立开关 | 数据中心防火墙启用,且该网卡勾选了”防火墙” |
只要数据中心防火墙的”启用防火墙”选项被关闭,整个宿主机的 iptables 和 ebtables 规则就会被清空,所有流量都不经任何过滤自由流通。
二、层级结构与数据包流向

① 数据中心/节点防火墙(主策略层)
② VNet 防火墙(网络隔离层)
即使 VNet 上没有定义任何手工规则,只要勾选了”防火墙”,就会在 ebtables 中插入默认 DROP 规则,导致默认不通。
③ 虚拟机网卡防火墙(单机独立层)
④ 虚拟机系统内部防火墙(操作系统自身)
最后一道防线,属于 Guest OS 自身控制(Windows 防火墙、Linux iptables 等),必须进入虚拟机内部进行配置,PVE 无法直接管理。
三、开启与关闭的联动规则
场景 1:数据中心防火墙关闭
场景 2:数据中心防火墙开启
简单记忆法
1 | 数据中心防火墙 = 整个房子的总电闸 |
四、从历史问题中验证此结构
H1 能通,H2 不通
能 ping 通网关,不能 ping 其他 VM
取消端口隔离后仍不通
端口隔离只是二层桥属性,而当时 VNet 防火墙仍在工作(ebtables 规则),强制丢弃了 VM 间帧。
关闭虚拟机网卡上的”防火墙”勾选后恢复
关掉了 VM 自身的网卡防火墙,但核心仍是 VNet 防火墙的规则。最终通过全放行规则解决了。
五、推荐防火墙设计
需补充确认的两个小细节
转发(FORWARD)策略
您的数据中心规则目前只定义了 in 方向,这意味着只影响进入宿主机的流量。虚拟机访问外网(通过 SNAT)或虚拟机间通信,走的是 FORWARD 链。
只要您没有在数据中心防火墙手工添加 FORWARD DROP 规则,这个状态就是安全的,无需额外操作。
DHCP 客户端端口 68
您在数据中心放行了 UDP 68,这其实是客户端的源端口,服务器监听的是 67。通常只需放行目的端口 67 即可(因为状态防火墙会自动允许返回流量)。
建议改为:
1 | in ACCEPT udp dport 67 |
优化后的推荐规则(数据中心)
数据中心规则表
| 方向 | 动作 | 协议 | 源地址 | 目的端口 | 说明 |
|---|---|---|---|---|---|
| in | ACCEPT | udp | 192.168.0.0/16 | 67 | DHCP 服务器 |
| in | ACCEPT | udp | 192.168.0.0/16 | 53 | DNS 查询 |
| in | ACCEPT | icmp | 192.168.0.0/16 | any | Ping 排错 |
额外添加:in ACCEPT tcp source <管理IP段> dport 8006
这样设计的优点
操作清单(确保生效)
操作清单
测试验证
测试项目
您的设计完全符合小型单节点生产的推荐实践,既安全又省心。
