Proxmox VE 防火墙提供了一种简单的方法来保护您的 IT 基础设施。您可以为集群内的所有主机设置防火墙规则,或为虚拟机和容器定义规则。防火墙宏、安全组、IP 集和别名等功能有助于简化该任务。

虽然所有配置都存储在集群文件系统上,但基于iptables的防火墙服务运行在每个集群节点上,从而在虚拟机之间提供完全隔离。该系统的分布式特性还提供比中央防火墙解决方案高得多的带宽。

防火墙完全支持 IPv4 和 IPv6。IPv6 支持是完全透明的,默认情况下我们会过滤两种协议的流量。因此无需为 IPv6 维护一组不同的规则。

区域

Proxmox VE 防火墙将网络分组为以下逻辑区域:

  • 主机

进出集群节点的流量。

  • 虚拟机

来自或到达特定虚拟机的流量。

对于每个区域,您可以为传入和传出流量定义防火墙规则。

配置文件

集群范围设置

集群范围的防火墙配置存储在:/etc/pve/firewall/cluster.fw

GUI设置界面如下:

Proxmox VE 防火墙介绍_守护进程

默认情况下防火墙是完全禁用的。如果启用防火墙,默认情况下会阻止所有主机的流量。只有来自本地网络的 WebGUI(8006) 和 ssh(22) 例外。

如果要从远程管理 Proxmox VE 主机,则需要创建规则以允许从这些远程 IP 到 Web GUI(端口 8006)的流量。您可能还想允许 ssh(端口 22),也可能是 SPICE(端口 3128)。

在启用防火墙之前,请打开与您的 Proxmox VE 主机之一的 SSH 连接。这样,如果出现问题,您仍然可以访问主机。

为了简化该任务,您可以改为创建一个名为“management”的 IPSet,并在其中添加所有远程 IP。这将创建从远程访问 GUI 所需的所有防火墙规则。设置示例如下:

Proxmox VE 防火墙介绍_配置文件_02

Proxmox VE 防火墙介绍_防火墙配置_03

配置文件相关内容如下:

[OPTIONS]

enable: 1

[ALIASES]

management 10.0.0.0/24

[IPSET management]

management

[RULES]

GROUP management
IN ACCEPT -source +management -p tcp -dport 80 -log nolog
IN DROP -log nolog

[group management]

IN ACCEPT -source +management -p tcp -dport 3128 -log nolog
IN ACCEPT -source +management -p tcp -dport 22 -log nolog
IN ACCEPT -source +management -p tcp -dport 8006 -log nolog

[group webserver]

IN ACCEPT -p tcp -dport 443 -log nolog
IN ACCEPT -p tcp -dport 80 -log nolog


主机范围设置

主机范围的防火墙配置存储在:/etc/pve/nodes//host.fw

GUI设置界面如下:

Proxmox VE 防火墙介绍_守护进程_04

虚拟机范围设置

虚拟机范围的防火墙配置存储在:/etc/pve/firewall/.fw

GUI设置界面如下:

Proxmox VE 防火墙介绍_守护进程_05

每个虚拟网络设备都有自己的防火墙启用标志。因此,您可以有选择地为每个接口启用防火墙。除了常规防火墙启用选项之外,这也是必需的。

虚拟机防火墙默认是禁用的。启用后,默认的输入策略是 DROP,默认的输出策略是 ACCEPT,不记录任何日志。

下面是一个GUI设置示例:

Proxmox VE 防火墙介绍_守护进程_06

配置文件相关内容如下:

[OPTIONS]

log_level_in: nolog
enable: 1
log_level_out: nolog

[RULES]

IN ACCEPT -p tcp -dport 22 -log nolog
IN ACCEPT -p tcp -dport 80 -log nolog


防火墙规则

防火墙规则由方向(IN或OUT)和操作(ACCEPT、DENY、REJECT)组成。您还可以指定宏名称。宏包含预定义的规则和选项集。规则可以通过添加前缀“|”来禁用。

示例

[RULES]
IN SSH(ACCEPT) -i net0
IN SSH(ACCEPT) -i net0 # a comment
IN SSH(ACCEPT) -i net0 -source 192.168.2.192 # only allow SSH from 192.168.2.192
IN SSH(ACCEPT) -i net0 -source 10.0.0.1-10.0.0.10 # accept SSH for IP range
IN SSH(ACCEPT) -i net0 -source 10.0.0.1,10.0.0.2,10.0.0.3 #accept ssh for IP list
IN SSH(ACCEPT) -i net0 -source +mynetgroup # accept ssh for ipset mynetgroup
IN SSH(ACCEPT) -i net0 -source myserveralias #accept ssh for alias myserveralias

|IN SSH(ACCEPT) -i net0 # disabled rule

IN DROP # drop all incoming packages
OUT ACCEPT # accept all outgoing packages


安全组

安全组是在集群级别定义的规则集合,可以在所有 VM 的规则中使用。例如,您可以定义一个名为“webserver”的组,其中包含打开http和https端口的规则。

Proxmox VE 防火墙介绍_守护进程_07

[group webserver]

IN ACCEPT -p tcp -dport 443 -log nolog
IN ACCEPT -p tcp -dport 80 -log nolog


IP 别名

IP 别名允许您将网络的 IP 地址与名称相关联。然后您可以使用这些名称:

  • 内部 IP 集定义
  • 在防火墙规则的源和目标属性中
IP Set

IP 集可用于定义网络和主机组。您可以在防火墙规则的源和目标 属性中使用“+name”来引用它们。

服务和命令

防火墙在每个节点上运行两个服务守护进程:

  • pvefw-logger:NFLOG 守护进程(ulogd 替换)。
  • pve-firewall:更新 iptables 规则

还有一个名为pve-firewall的 CLI 命令,可用于启动和停止防火墙服务:

# pve-firewall start
# pve-firewall stop


要获取状态使用:

# pve-firewall status


上述命令读取并编译所有防火墙规则,因此如果您的防火墙配置包含任何错误,您将看到警告。

如果要查看生成的 iptables 规则,可以使用:

# iptables-save


默认防火墙规则

以下流量由默认防火墙配置过滤:

数据中心传入/传出 DROP/REJECT

如果防火墙的输入或输出策略设置为 DROP 或 REJECT,集群中的所有 Proxmox VE 主机仍然允许以下流量:

  • 环回接口上的流量
  • 已经建立的连接
  • 使用 IGMP 协议的流量
  • 从管理主机到端口 8006 的 TCP 流量,以允许访问 Web 界面
  • 从管理主机到端口范围 5900 到 5999 的 TCP 流量允许 VNC Web 控制台的流量
  • 从管理主机到端口 3128 的 TCP 流量,用于连接到 SPICE 代理
  • 从管理主机到端口 22 的 TCP 流量以允许 ssh 访问
  • 用于 corosync 的集群网络中到端口 5404 和 5405 的 UDP 流量
  • 集群网络中的 UDP 多播流量
  • ICMP 流量类型 3(目标不可达)、4(拥塞控制)或 11(超时)

以下流量被丢弃,但即使启用日志记录也不会记录:

  • 连接状态无效的 TCP 连接
  • 与 corosync 无关的广播、多播和任播流量,即不通过端口 5404 或 5405
  • 到端口 43 的 TCP 流量
  • UDP 流量到端口 135 和 445
  • UDP 流量到端口范围 137 到 139
  • UDP 流量从源端口 137 到端口范围 1024 到 65535
  • UDP 流量到端口 1900
  • TCP 流量到端口 135、139 和 445
  • 来自源端口 53 的 UDP 流量

其余的流量分别被丢弃或拒绝,并被记录下来。这可能会因防火墙→选项中启用的其他选项而异 ,例如 NDP、SMURFS 和 TCP 标志过滤。

请检查输出:

# iptables-save


system 命令以查看系统上活动的防火墙链和规则。此输出也包含在系统报告中,可通过 Web GUI 中节点的订阅选项卡或通过pvereport命令行工具访问。

VM 传入/传出 DROP/REJECT

这会丢弃或拒绝所有到 VM 的流量,但 DHCP、NDP、路由器广告、MAC 和 IP 过滤的一些例外情况取决于设置的配置。丢弃/拒绝数据包的相同规则是从数据中心继承的,而主机接受的传入/传出流量的例外情况并不适用。

同样,您可以使用iptables-save(见上文) 来检查所有应用的规则和链。

Proxmox VE 使用的端口
  • Web 界面:8006(TCP、HTTP/1.1 over TLS)
  • VNC Web 控制台:5900-5999(TCP、WebSocket)
  • SPICE 代理:3128 (TCP)
  • sshd(用于集群操作):22 (TCP)
  • rpcbind: 111 (UDP)
  • 发送邮件:25(TCP,传出)
  • corosync 集群流量:5404、5405 UDP
  • 实时迁移(VM 内存和本地磁盘数据):60000-60050 (TCP)