Proxmox VE 防火墙介绍
Proxmox VE 防火墙提供了一种简单的方法来保护您的 IT 基础设施。您可以为集群内的所有主机设置防火墙规则,或为虚拟机和容器定义规则。防火墙宏、安全组、IP 集和别名等功能有助于简化该任务。
虽然所有配置都存储在集群文件系统上,但基于iptables的防火墙服务运行在每个集群节点上,从而在虚拟机之间提供完全隔离。该系统的分布式特性还提供比中央防火墙解决方案高得多的带宽。
防火墙完全支持 IPv4 和 IPv6。IPv6 支持是完全透明的,默认情况下我们会过滤两种协议的流量。因此无需为 IPv6 维护一组不同的规则。
区域
Proxmox VE 防火墙将网络分组为以下逻辑区域:
- 主机
进出集群节点的流量。
- 虚拟机
来自或到达特定虚拟机的流量。
对于每个区域,您可以为传入和传出流量定义防火墙规则。
配置文件
集群范围设置
集群范围的防火墙配置存储在:/etc/pve/firewall/cluster.fw
GUI设置界面如下:
默认情况下防火墙是完全禁用的。如果启用防火墙,默认情况下会阻止所有主机的流量。只有来自本地网络的 WebGUI(8006) 和 ssh(22) 例外。
如果要从远程管理 Proxmox VE 主机,则需要创建规则以允许从这些远程 IP 到 Web GUI(端口 8006)的流量。您可能还想允许 ssh(端口 22),也可能是 SPICE(端口 3128)。
在启用防火墙之前,请打开与您的 Proxmox VE 主机之一的 SSH 连接。这样,如果出现问题,您仍然可以访问主机。
为了简化该任务,您可以改为创建一个名为“management”的 IPSet,并在其中添加所有远程 IP。这将创建从远程访问 GUI 所需的所有防火墙规则。设置示例如下:
配置文件相关内容如下:
[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/
GUI设置界面如下:
虚拟机范围设置
虚拟机范围的防火墙配置存储在:/etc/pve/firewall/
GUI设置界面如下:
每个虚拟网络设备都有自己的防火墙启用标志。因此,您可以有选择地为每个接口启用防火墙。除了常规防火墙启用选项之外,这也是必需的。
虚拟机防火墙默认是禁用的。启用后,默认的输入策略是 DROP,默认的输出策略是 ACCEPT,不记录任何日志。
下面是一个GUI设置示例:
配置文件相关内容如下:
[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端口的规则。
[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)