pve防火墙
简介
Proxmox VE虚拟平台自带一个pve-firewall.service服务,其本质是调用iptables模块
pve有3个层级防火墙:
- 集群级别的防火墙
- 节点防火墙(主机防火墙)
- 虚拟机防火墙
集群级别的防火墙
作用域为整个集群的防火墙配置保存在
1 | /etc/pve/firewall/cluster.fw |
该配置文件由以下小节构成:
1 | [OPTIONS] |
防火墙默认是被完全禁用的。你可以按如下方式设置启用参数项:

或者编辑文件cluster.fw
1 | [OPTIONS] |
重要
启用防火墙后,默认所有主机的通信都将被阻断。唯一例外是集群网络内的WebGUI(端口8006)和ssh(端口22)访问可以继续使用。
注意
请在启用防火墙前先打开到Proxmox VE服务器的一个SSH连接,这样即使策略配置有误,也还可以通过该连接访问服务器。
为简化配置,你可以创建一个名为“管理地址”的IPSet,并把所有的远程管理终端IP地址添加进去。这样就可以创建策略允许所有的远程地址访问WebGUI。
主机防火墙
主机级别的防火墙配置保存在
1 | /etc/pve/nodes/<nodename>/host.fw |
该文件中的配置可以覆盖cluster.fw中的配置。你可以提升报警日志级别,设置netfilter相关参数。该配置文件由以下小节构成:
1 | [OPTIONS] |

虚拟机防火墙
虚拟机和容器级别的防火墙配置保存在
1 | /etc/pve/firewall/<VMID>.fw |
其内容由以下数据构成:
1 | [OPTIONS] |
启用虚拟机或容器上的防火墙
每个虚拟网卡设备都有一个防火墙启用标识。你可以控制每个网卡的防火墙启用状态。在设置启用虚拟机防火墙后,必须设置网卡上的防火墙启用标识才可以真正启用防火墙。


安全组
安全组是在集群级别定义的规则集合,可以在所有 VM 的规则中使用

服务和命令
防火墙在每个节点上运行两个服务守护进程:
- pvefw-logger:NFLOG 守护进程(ulogd 替换)。
- pve-firewall:更新 iptables 规则
还有一个名为pve-firewall的 CLI 命令,可用于启动和停止防火墙服务:
1 | pve-firewall start |
要获取状态使用:
1 | pve-firewall status |
上述命令读取并编译所有防火墙规则,因此如果您的防火墙配置包含任何错误,您将看到警告。
如果要查看生成的 iptables 规则,可以使用:
1 | iptables-save |
默认防火墙策略
防火墙默认会对以下网络通信开启控制策略:
进/出数据中心的丢弃/拒绝策略
即使防火墙的出入控制策略被设为DROP或REJECT,集群内Proxmox VE主机仍将允许以下网络访问。
- 通过loopback端口的流量。
- 已建立的网络连接。
- 基于IGMP协议的通信流量。
- 开放管理终端到8006端口的TCP访问权限,以便访问Web管理控制台。
- 开放管理终端到5900-5999端口的TCP访问权限,以便使用VNC终端。
- 开放管理终端到3128端口的TCP访问权限,以便使用SPICE代理。
- 开放管理终端到22端口的TCP访问权限,以便ssh访问。
- 为corosync集群服务开放5404和5405端口的UDP访问权限。
- 为集群服务开放多播访问权限。
- 类型3(目的不可达)、4(拥堵控制)、11(超时)的ICMP流量。
以下网络包将被丢弃,并且即使开启日志也不会被日志记录。
- 处于非法连接状态的TCP流量。
- 和corosync无关的广播、多播和任意目的数据包,即目的端口不是5404和5405的数据包。
- 目的端口是43的TCP数据包。
- 目的端口是135和445的UDP数据包。
- 目的端口是137-139的UDP数据包。
- 源端口是137且目的端口是1024-65535的UDP数据包。
- 目的端口是1900的UDP数据包。
- 目的端口是135,139,445的TCP数据包。
- 源端口是53的UDP数据包。
其余网络通信将被丢弃或拒绝,并被日志记录。具体处理结果由防火墙→选项中的选项决定,具体包括NDP,SMURFS和TCP标志位过滤等。
可以查看以下命令的输出
1 | # iptables-save |
了解防火墙策略的活动情况。该命令的输出也会被合并到系统报告,并在Web GUI的节点描述选项卡展示,或通过pvereport命令查看。
进/出客户机的丢弃/拒绝策略
默认情况下,除DHCP、NDP、路由告知、明确通过MAC和IP地址过滤策略排除的数据包以外,有关客户机的网络数据包都会被丢弃或拒绝。数据中心的丢弃和拒绝策略会被虚拟机自动继承,但和主机有关的例外通过策略则不会被集成。
防火墙日志
默认情况下,所有的防火墙策略都不产生日志记录。
如要启用日志记录,需要在Firewall→Options中设置出/入网络数据包的日志级别loglevel。
主机、客户机的日志级别可以分别设置。设置后,Proxmox VE的防火墙日志将被启用,并可以在Firewall→Log中查看。
需要注意,只有被标准策略丢弃或拒绝的数据包会产生日志记录。
防火墙日志级别loglevel并不影响产生日志数量。只用于改变日志记录的LOGID前缀,以便后续处理。
具体的loglevel取值如下表:
| loglevel | LOGID |
|---|---|
| nolog | — |
| emerg | 0 |
| alert | 1 |
| crit | 2 |
| err | 3 |
| warning | 4 |
| notice | 5 |
| info | 6 |
| debug | 7 |
一般使用建议
对于绝大多数情况,遵循以下原则:
nolog(最常用): 默认选择。用于“常规允许”规则。你明确希望允许的流量(如你的 Web 服务端口、SSH 端口),没有必要记录日志,否则日志会被大量正常流量淹没。warning(4) 或notice(5) (常用): 用于“需要关注的允许”规则。例如,你允许从特定管理网段访问 SSH,但想记录下谁登录了,可以用notice。或者用于记录一些不寻常但允许的行为。err(3) 或crit(2): 用于“拒绝”规则。当你有明确的拒绝规则(REJECT或DROP)时,使用这些级别可以高效地记录可能的攻击或扫描尝试,因为这些日志本身就值得关注。info(6) 或debug(7): 谨慎使用。仅用于临时调试和故障排除。会产生海量日志,迅速填满磁盘,调试完毕后应立即移除或改为nolog。
用户自定义防火墙策略日志记录
如需让用户自定义防火墙策略生成日志记录,可以为每条策略分别设置日志级别。通过Firewall→Options可以为每条策略设置非常精细的日志级别 。 当然可以通过WebUI在创建或修改每条策略时设置或改变loglevel,也可以通过pvesh调用相应API进行设置。
此外,还可以通过修改防火墙日志文件调整日志级别,只要在相应策略后添加-log 即可。
示例如下,以下两条命令效果是一样的,都不产生日志:
1 | IN REJECT -p icmp -log nolog |
但以下策略将产生debug级别日志。
1 | IN REJECT -p icmp -log debug |
PVE端口列表
- Web界面:8006
- VNC控制台:5900-5999
- SPICE proxy:3128
- sshd(用于集群管理):22
- rpcbind:111
- corosync多播(集群通信使用):5404, 5405 UDP


