SYNOPSIS
pve-firewall <COMMAND> [ARGS] [OPTIONS]
pve-firewall compile
编译并打印防火墙规则。这对测试很有用。
pve-firewall help [OPTIONS]
获取指定命令的帮助信息。
- --extra-args <array>
-
显示特定命令的帮助信息
- --verbose <boolean>
-
详细输出格式。
pve-firewall localnet
打印本地网络信息。
pve-firewall restart
重启 Proxmox VE 防火墙服务。
pve-firewall simulate [OPTIONS]
模拟防火墙规则。此操作不会模拟内核的 routing 表,而只是简单假定从源区域到目标区域的路由可达。
- --dest <string>
-
目标 IP 地址。
- --dport <integer>
-
目标端口。
- --from (host|outside|vm\d+|ct\d+|([a-zA-Z][a-zA-Z0-9]{0,9})/(\S+)) (default = outside)
-
源区域。
- --protocol (tcp|udp) (default = tcp)
-
协议。
- --source <string>
-
源 IP 地址。
- --sport <integer>
-
源端口。
- --to (host|outside|vm\d+|ct\d+|([a-zA-Z][a-zA-Z0-9]{0,9})/(\S+)) (default = host)
-
目标区域。
- --verbose <boolean> (default = 0)
-
详细输出。
pve-firewall start [OPTIONS]
启动 Proxmox VE 防火墙服务。
- --debug <boolean> (default = 0)
-
调试模式 - 保持在前台运行
pve-firewall status
获取防火墙状态。
pve-firewall stop
停止 Proxmox VE 防火墙服务。注意,停止操作会主动移除所有与 Proxmox VE 相关的 iptable 规则,可能导致主机失去保护。
DESCRIPTION
Proxmox VE 防火墙提供了一种简单方式来保护 IT 基础设施。你可以为集群中的所有主机设置 防火墙规则,也可以为虚拟机和容器定义规则。防火墙宏、安全组、IP 集和别名等功能可使这项 工作更加轻松。
所有配置都存储在集群文件系统中,而基于 iptables 的防火墙服务会在每个集群节点上运行, 因此可在虚拟机之间提供完整隔离。该系统的分布式特性也比集中式防火墙方案提供更高带宽。
防火墙完整支持 IPv4 和 IPv6。IPv6 支持完全透明,并且默认会同时过滤两种协议的流量。 因此无需为 IPv6 维护另一套规则。
方向与区域
Proxmox VE 防火墙将网络分为多个逻辑区域。可以分别为每个区域定义规则。根据区域不同, 可以为入站、出站或转发流量定义规则。
方向
为区域定义规则时,可以从 3 个方向中选择:
- In
-
进入某个区域的流量。
- Out
-
离开某个区域的流量。
- Forward
-
穿过某个区域的流量。在主机区域中,这可以是路由流量(当主机充当网关或执行 NAT 时)。 在 VNet 级别,这会影响所有经过 VNet 的流量,包括来自/发往桥接网络接口的流量。
|
|
当前只有在使用新的 基于 nftables 的 proxmox-firewall 时,才能为转发流量创建规则。任何 forward 规则都会被原有 pve-firewall 忽略,且不会 产生效果! |
区域
可以为 3 个不同区域定义防火墙规则:
- Host
-
发往/来自主机的流量,或由主机转发的流量。可以在数据中心级别或主机级别为该区域定义规则。 主机级别规则优先于数据中心级别规则。
- VM
-
发往/来自 VM 或 CT 的流量。不能为转发流量定义规则,只能为入站/出站流量定义规则。
- VNet
-
穿过 SDN VNet 的流量,可以是客户机到客户机,也可以是主机到客户机或反向流量。由于该流量 始终属于转发流量,因此只能创建方向为 forward 的规则。
|
|
当前只有在使用新的 基于 nftables 的 proxmox-firewall 时,才能在 VNet 级别创建规则。任何 VNet 级别规则都会被原有 pve-firewall 忽略,且不会 产生效果! |
配置文件
所有防火墙相关配置都存储在 proxmox 集群文件系统中。因此,这些文件会自动分发到所有 集群节点,并且 pve-firewall 服务会在配置变更时自动更新底层 iptables 规则。
可以使用 GUI 配置所有内容(即 Datacenter → Firewall,或在 Node → Firewall 下配置),也可以使用偏好的编辑器直接编辑配置文件。
防火墙配置文件包含由键值对组成的节。以 # 开头的行和空行视为注释。节以标题行开始, 节名用 [ 和 ] 包围。
集群范围设置
集群范围的防火墙配置存储在:
/etc/pve/firewall/cluster.fw
该配置可以包含以下节:
- [OPTIONS]
-
用于设置集群范围的防火墙选项。
- ebtables: <boolean> (default = 1)
-
在整个集群范围内启用 ebtables 规则。
- enable: <integer> (0 - N)
-
在整个集群范围内启用或禁用防火墙。
- log_ratelimit: [enable=]<1|0> [,burst=<integer>] [,rate=<rate>]
-
日志限速设置
- burst=<integer> (0 - N) (default = 5)
-
应用速率限制前始终会记录的初始突发包数量
- enable=<boolean> (default = 1)
-
启用或禁用日志速率限制
- rate=<rate> (default = 1/second)
-
突发 bucket 重新填充的频率
- policy_forward: <ACCEPT | DROP>
-
转发策略。
- policy_in: <ACCEPT | DROP | REJECT>
-
入站策略。
- policy_out: <ACCEPT | DROP | REJECT>
-
出站策略。
- [RULES]
-
该节包含适用于所有节点的集群范围防火墙规则。
- [IPSET <name>]
-
集群范围 IP 集定义。
- [GROUP <name>]
-
集群范围安全组定义。
- [ALIASES]
-
集群范围别名定义。
启用防火墙
防火墙默认完全禁用,因此需要在此设置 enable 选项:
[OPTIONS] # enable firewall (cluster-wide setting, default is disabled) enable: 1
|
|
如果启用防火墙,默认会阻止到所有主机的流量。唯一例外是来自本地网络的 WebGUI(8006) 和 ssh(22)。 |
如果希望远程管理 Proxmox VE 主机,需要创建规则,允许来自这些远程 IP 的流量访问 Web GUI (端口 8006)。你可能还希望允许 ssh(端口 22),以及可能需要的 SPICE(端口 3128)。
|
|
启用防火墙前,请先打开到某个 Proxmox VE 主机的 SSH 连接。这样即使出现问题,仍然可以访问 该主机。 |
为简化此任务,也可以创建名为 “management” 的 IPSet,并将所有远程 IP 添加到其中。 这样会创建从远程访问 GUI 所需的所有防火墙规则。
主机专用配置
主机相关配置读取自:
/etc/pve/nodes/<nodename>/host.fw
如果想覆盖 cluster.fw 配置中的规则,这会很有用。也可以提高日志详细程度,并设置 netfilter 相关选项。该配置可以包含以下节:
- [OPTIONS]
-
用于设置主机相关防火墙选项。
- enable: <boolean>
-
启用主机防火墙规则。
- log_level_forward: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
-
转发流量的日志级别。
- log_level_in: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
-
入站流量的日志级别。
- log_level_out: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
-
出站流量的日志级别。
- log_nf_conntrack: <boolean> (default = 0)
-
启用 conntrack 信息日志记录。
- ndp: <boolean> (default = 0)
-
启用 NDP(Neighbor Discovery Protocol,邻居发现协议)。
- nf_conntrack_allow_invalid: <boolean> (default = 0)
-
允许连接跟踪中的无效数据包。
- nf_conntrack_helpers: <string> (default = ``)
-
为特定协议启用 conntrack helper。支持的协议:amanda, ftp, irc, netbios-ns, pptp, sane, sip, snmp, tftp
- nf_conntrack_max: <integer> (32768 - N) (default = 262144)
-
可跟踪连接的最大数量。
- nf_conntrack_tcp_timeout_established: <integer> (7875 - N) (default = 432000)
-
conntrack 已建立连接的超时时间。
- nf_conntrack_tcp_timeout_syn_recv: <integer> (30 - 60) (default = 60)
-
conntrack syn recv 状态的超时时间。
- nftables: <boolean> (default = 0)
-
启用基于 nftables 的防火墙(技术预览)
- nosmurfs: <boolean>
-
启用 SMURFS 过滤器。
- protection_synflood: <boolean> (default = 0)
-
启用 synflood 防护
- protection_synflood_burst: <integer> (default = 1000)
-
按源 IP 统计的 synflood 防护突发速率。
- protection_synflood_rate: <integer> (default = 200)
-
按源 IP 统计的 synflood 防护速率,单位为 syn/sec。
- smurf_log_level: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
-
SMURFS 过滤器的日志级别。
- tcp_flags_log_level: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
-
非法 TCP 标志过滤器的日志级别。
- tcpflags: <boolean> (default = 0)
-
过滤非法的 TCP 标志组合。
- [RULES]
-
该节包含主机专用防火墙规则。
VM/容器配置
VM 防火墙配置读取自:
/etc/pve/firewall/<VMID>.fw
并包含以下数据:
- [OPTIONS]
-
用于设置 VM/容器相关防火墙选项。
- dhcp: <boolean> (default = 0)
-
启用 DHCP。
- enable: <boolean> (default = 0)
-
启用或禁用防火墙规则。
- ipfilter: <boolean>
-
启用默认 IP 过滤器。这等同于为每个接口添加一个空的 ipfilter-net<id> ipset。 此类 ipset 隐式包含合理的默认限制,例如将 IPv6 链路本地地址限制为由接口 MAC 地址派生出的地址。对于容器,已配置的 IP 地址会被隐式加入。
- log_level_in: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
-
入站流量的日志级别。
- log_level_out: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
-
出站流量的日志级别。
- macfilter: <boolean> (default = 1)
-
启用或禁用 MAC 地址过滤器。
- ndp: <boolean> (default = 0)
-
启用 NDP(Neighbor Discovery Protocol)。
- policy_in: <ACCEPT | DROP | REJECT>
-
输入策略。
- policy_out: <ACCEPT | DROP | REJECT>
-
输出策略。
- radv: <boolean>
-
允许发送 Router Advertisement。
- [RULES]
-
该节包含 VM/容器防火墙规则。
- [IPSET <name>]
-
IP 集定义。
- [ALIASES]
-
IP 别名定义。
VNet 配置
VNet 相关配置读取自:
/etc/pve/sdn/firewall/<vnet_name>.fw
这可用于在 VNet 级别全局设置防火墙配置,而不必为 VNet 内部的每个 VM 分别设置防火墙规则。 它只能包含 FORWARD 方向的规则,因为这里没有入站或出站流量的概念。这会影响从一个桥接 端口流向另一个桥接端口的所有流量,包括主机接口。
|
|
当前该功能仅适用于新的 基于 nftables 的 proxmox-firewall |
由于经过 FORWARD 链的流量是双向的,如果希望流量双向通过,就需要为两个方向都创建规则。 例如,如果要允许某个特定主机的 HTTP 流量,需要创建以下规则:
FORWARD ACCEPT -dest 10.0.0.1 -dport 80 FORWARD ACCEPT -source 10.0.0.1 -sport 80
- [OPTIONS]
-
用于设置 VNet 相关防火墙选项。
- enable: <boolean> (default = 0)
-
启用或禁用防火墙规则。
- log_level_forward: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
-
转发流量的日志级别。
- policy_forward: <ACCEPT | DROP>
-
转发策略。
- [RULES]
-
该节包含 VNet 专用防火墙规则。
防火墙规则
防火墙规则由方向(IN、OUT 或 FORWARD)和动作(ACCEPT、DENY、REJECT) 组成。也可以指定宏名称。宏包含预定义的规则和选项集合。可以通过在规则前加 | 来禁用规则。
[RULES] DIRECTION ACTION [OPTIONS] |DIRECTION ACTION [OPTIONS] # disabled rule DIRECTION MACRO(ACTION) [OPTIONS] # use predefined macro
可使用以下选项细化规则匹配。
- --dest <string>
-
限制数据包目标地址。可以引用单个 IP 地址、IP set(+ipsetname)或 IP 别名定义。也可以指定类似 20.34.101.207-201.3.9.99 的地址范围,或 IP 地址和网络列表(条目用逗号分隔)。请不要在此类列表中混用 IPv4 和 IPv6 地址。
- --dport <string>
-
限制 TCP/UDP 目标端口。可以使用 /etc/services 中定义的服务名或简单数字(0-65535)。端口范围可使用 \d+:\d+ 指定,例如 80:85;也可以使用逗号分隔列表匹配多个端口或范围。
- --icmp-type <string>
-
指定 icmp-type。仅当 proto 等于 icmp 或 icmpv6/ipv6-icmp 时有效。
- --iface <string>
-
网络接口名称。对于虚拟机和容器,必须使用网络配置键名(net\d+)。主机相关规则可以使用任意字符串。
- --log <alert | crit | debug | emerg | err | info | nolog | notice | warning>
-
防火墙规则的日志级别。
- --proto <string>
-
IP 协议。可以使用 /etc/protocols 中定义的协议名(tcp/udp)或简单数字。
- --source <string>
-
限制数据包源地址。可以引用单个 IP 地址、IP set(+ipsetname)或 IP 别名定义。也可以指定类似 20.34.101.207-201.3.9.99 的地址范围,或 IP 地址和网络列表(条目用逗号分隔)。请不要在此类列表中混用 IPv4 和 IPv6 地址。
- --sport <string>
-
限制 TCP/UDP 源端口。可以使用 /etc/services 中定义的服务名或简单数字(0-65535)。端口范围可使用 \d+:\d+ 指定,例如 80:85;也可以使用逗号分隔列表匹配多个端口或范围。
下面是一些示例:
[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 端口的规则。
# /etc/pve/firewall/cluster.fw [group webserver] IN ACCEPT -p tcp -dport 80 IN ACCEPT -p tcp -dport 443
然后,可以将该组添加到 VM 的防火墙:
# /etc/pve/firewall/<VMID>.fw [RULES] GROUP webserver
IP 别名
IP 别名允许将网络 IP 地址与名称关联。之后可以引用这些名称:
-
在 IP 集定义中
-
在防火墙规则的 source 和 dest 属性中
标准 IP 别名 local_network
该别名会自动定义。请使用以下命令查看分配的值:
# pve-firewall localnet local hostname: example local IP address: 192.168.2.100 network auto detect: 192.168.0.0/20 using detected local_network: 192.168.0.0/20
防火墙会使用此别名自动设置规则,以允许集群通信(corosync、API、SSH)所需的全部流量。
用户可以在 cluster.fw 的别名节中覆盖这些值。如果在公共网络上使用单台主机,最好显式 分配本地 IP 地址:
# /etc/pve/firewall/cluster.fw [ALIASES] local_network 1.2.3.4 # use the single IP address
IP 集
IP 集可用于定义网络和主机组。可以在防火墙规则的 source 和 dest 属性中使用 +name 引用它们。
以下示例允许来自 management IP 集的 HTTP 流量。
IN HTTP(ACCEPT) -source +management
标准 IP 集 management
该 IP 集仅适用于主机防火墙(不适用于 VM 防火墙)。这些 IP 被允许执行正常管理任务 (Proxmox VE GUI、VNC、SPICE、SSH)。
本地集群网络会自动添加到此 IP 集(别名 cluster_network),以启用主机间集群通信 (multicast、ssh 等)。
# /etc/pve/firewall/cluster.fw [IPSET management] 192.168.2.10 192.168.2.10/24
标准 IP 集 blacklist
来自这些 IP 的流量会被每台主机和每个 VM 的防火墙丢弃。
# /etc/pve/firewall/cluster.fw [IPSET blacklist] 77.240.159.182 213.87.123.0/24
标准 IP 集 ipfilter-net*
这些过滤器属于 VM 的网络接口,主要用于防止 IP 欺骗。如果某个接口存在此类集合,则任何源 IP 与该接口对应 ipfilter 集不匹配的出站流量都会被丢弃。
对于已配置 IP 地址的容器,如果这些集合存在(或通过 VM 防火墙 options 选项卡中的通用 IP Filter 选项启用),它们会隐式包含关联的 IP 地址。
对于虚拟机和容器,它们还会隐式包含标准的、由 MAC 派生的 IPv6 link-local 地址,以允许 邻居发现协议正常工作。
/etc/pve/firewall/<VMID>.fw [IPSET ipfilter-net0] # only allow specified IPs on net0 192.168.2.10
服务和命令
防火墙会在每个节点上运行两个服务守护进程:
-
pvefw-logger:NFLOG 守护进程(ulogd 替代品)。
-
pve-firewall:更新 iptables 规则
还有一个名为 pve-firewall 的 CLI 命令,可用于启动和停止防火墙服务:
# pve-firewall start # pve-firewall stop
要获取状态,请使用:
# pve-firewall status
上述命令会读取并编译所有防火墙规则,因此如果防火墙配置包含错误,就会看到警告。
如果想查看生成的 iptables 规则,可以使用:
# iptables-save
默认防火墙规则
默认防火墙配置会过滤以下流量:
数据中心入站/出站 DROP/REJECT
如果防火墙的 input 或 output policy 设置为 DROP 或 REJECT,集群中所有 Proxmox VE 主机仍会允许 以下流量:
-
loopback 接口上的流量
-
已建立连接
-
使用 IGMP 协议的流量
-
从管理主机到端口 8006 的 TCP 流量,用于允许访问 Web 界面
-
从管理主机到端口范围 5900 到 5999 的 TCP 流量,用于允许 VNC Web 控制台流量
-
从管理主机到端口 3128 的 TCP 流量,用于连接 SPICE 代理
-
从管理主机到端口 22 的 TCP 流量,用于允许 ssh 访问
-
集群网络中到端口 5405-5412 的 UDP 流量,用于 corosync
-
集群网络中的 UDP multicast 流量
-
ICMP 流量类型 3(Destination Unreachable)、4(congestion control)或 11 (Time Exceeded)
以下流量会被丢弃,即使启用了日志记录也不会记录:
-
连接状态无效的 TCP 连接
-
与 corosync 无关的 Broadcast、multicast 和 anycast 流量,即不是通过端口 5405-5412 进入的流量
-
到端口 43 的 TCP 流量
-
到端口 135 和 445 的 UDP 流量
-
到端口范围 137 到 139 的 UDP 流量
-
源端口为 137、目标端口范围为 1024 到 65535 的 UDP 流量
-
到端口 1900 的 UDP 流量
-
到端口 135、139 和 445 的 TCP 流量
-
源端口为 53 的 UDP 流量
其余流量会分别被丢弃或拒绝,并且会被记录。具体行为可能因 Firewall → Options 中启用的额外选项而异,例如 NDP、SMURFS 和 TCP flag filtering。
请检查以下系统命令的输出:
# iptables-save
以查看系统上当前活动的防火墙链和规则。该输出也包含在 System Report 中,可以通过 Web GUI 中节点的订阅选项卡访问,也可以通过 pvereport 命令行工具获取。
VM/CT 入站/出站 DROP/REJECT
这会丢弃或拒绝发往 VM 的所有流量,但会根据配置对 DHCP、NDP、Router Advertisement、 MAC 和 IP filtering 做出一些例外处理。丢弃/拒绝数据包的规则会从数据中心继承,而主机 已接受入站/出站流量的例外规则不适用。
同样,可以使用 iptables-save(见上文)检查所有已应用的 规则和链。
防火墙规则日志
默认情况下,防火墙规则过滤流量的所有日志记录均被禁用。要启用日志记录,需要在 Firewall → Options 中为入站和/或出站流量设置 loglevel。主机防火墙和 VM/CT 防火墙都可以单独设置。这样会启用 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 |
典型的防火墙日志输出如下:
VMID LOGID CHAIN TIMESTAMP POLICY: PACKET_DETAILS
对于主机防火墙,VMID 等于 0。
用户定义防火墙规则的日志记录
为了记录由用户定义防火墙规则过滤的数据包,可以为每条规则单独设置 log-level 参数。这样可以 进行细粒度日志记录,并且不受 Firewall → Options 中为标准规则定义的 log-level 影响。
每条规则的 loglevel 可以在 Web UI 中创建或修改规则时轻松定义或更改,也可以通过对应的 pvesh API 调用设置。
此外,也可以通过防火墙配置文件设置 log-level,即在所选规则后追加 -log <loglevel> (参见 可用 log-level)。
例如,以下两条规则等价:
IN REJECT -p icmp -log nolog IN REJECT -p icmp
而:
IN REJECT -p icmp -log debug
会产生带有 debug 级别标记的日志输出。
提示与技巧
如何允许 FTP
FTP 是一种旧式协议,会使用端口 21 以及其他多个动态端口。因此需要一条规则来接受端口 21。 此外,还需要加载 ip_conntrack_ftp 模块。请运行:
modprobe ip_conntrack_ftp
并将 ip_conntrack_ftp 添加到 /etc/modules(以便重启后仍然生效)。
Suricata IPS 集成
如果希望使用 Suricata IPS(Intrusion Prevention System), 这是可行的。
只有在防火墙 ACCEPT 数据包后,数据包才会转发给 IPS。
被拒绝/丢弃的防火墙数据包不会进入 IPS。
在 proxmox 主机上安装 suricata:
# apt-get install suricata # modprobe nfnetlink_queue
不要忘记将 nfnetlink_queue 添加到 /etc/modules,以便下次重启后生效。
然后,为特定 VM 启用 IPS:
# /etc/pve/firewall/<VMID>.fw [OPTIONS] ips: 1 ips_queues: 0
ips_queues 会为该 VM 绑定特定 CPU 队列。
可用队列定义在:
# /etc/default/suricata NFQUEUE=0
IPv6 说明
防火墙包含一些 IPv6 专用选项。需要注意的是,IPv6 不再使用 ARP 协议,而是使用工作在 IP 层的 NDP(Neighbor Discovery Protocol),因此需要 IP 地址才能成功工作。为此,会使用从 接口 MAC 地址派生出的 link-local 地址。默认情况下,主机和 VM 级别都会启用 NDP 选项, 以允许发送和接收邻居发现(NDP)数据包。
除邻居发现外,NDP 还用于其他一些功能,例如自动配置和发布路由器。
默认情况下,允许 VM 发送 router solicitation 消息(用于查询路由器),并接收 router advertisement 数据包。这使它们可以使用无状态自动配置。另一方面,除非设置 “Allow Router Advertisement” (radv: 1) 选项,否则 VM 不能将自己通告为路由器。
对于 NDP 所需的 link-local 地址,也可以启用 “IP Filter” (ipfilter: 1) 选项,其效果 等同于为 VM 的每个网络接口添加一个包含对应 link-local 地址的 ipfilter-net* ipset。 (详情请参见 标准 IP 集 ipfilter-net* 一节。)
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)
-
sendmail:25(TCP,出站)
-
corosync 集群流量:5405-5412 UDP
-
在线迁移(VM 内存和本地磁盘数据):60000-60050(TCP)
nftables
作为 pve-firewall 的替代方案,我们提供 proxmox-firewall。它是 Proxmox VE 防火墙的一个实现,基于较新的 nftables, 而不是 iptables。
|
|
proxmox-firewall 当前处于技术预览阶段。它可能存在错误,或与原防火墙不兼容。 目前不适合生产使用。 |
该实现使用相同的配置文件和配置格式,因此切换时可以使用旧配置。除少数例外外,它提供完全 相同的功能:
-
当前无法对客户机流量使用 REJECT(流量会改为被丢弃)。
-
使用 NDP、Router Advertisement 或 DHCP 选项时,*始终*会创建防火墙规则, 无论默认策略如何。
-
即使连接已有 conntrack table entries,也会评估客户机防火墙规则。
安装和使用
安装 proxmox-firewall 软件包:
apt install proxmox-firewall
通过主机上的 Web UI(Host > Firewall > Options > nftables)启用 nftables 后端,或在 主机配置文件 (/etc/pve/nodes/<node_name>/host.fw) 中启用:
[OPTIONS] nftables: 1
|
|
启用/禁用 proxmox-firewall 后,需要重启所有正在运行的 VM 和容器,旧/新防火墙 才能正常工作。 |
设置 nftables 配置键后,新的 proxmox-firewall 服务会接管。可以通过检查 proxmox-firewall 的 systemctl 状态来确认新服务是否正常工作:
systemctl status proxmox-firewall
要切回旧防火墙,只需将配置值重新设置为 0 / No。
使用
proxmox-firewall 会创建两个由 proxmox-firewall 服务管理的表:proxmox-firewall 和 proxmox-firewall-guests。如果希望创建位于 Proxmox VE 防火墙配置之外的自定义规则, 可以创建自己的表来管理自定义防火墙规则。proxmox-firewall 只会修改它生成的表,因此可以 通过添加自己的表轻松扩展和修改 proxmox-firewall 的行为。
基于 nftables 的防火墙不使用 pve-firewall 命令,而是使用 proxmox-firewall。它是 systemd 服务,因此可以通过 systemctl 启动和停止:
systemctl start proxmox-firewall systemctl stop proxmox-firewall
停止防火墙服务会移除所有生成的规则。
要查询防火墙状态,可以查询 systemctl 服务状态:
systemctl status proxmox-firewall
常用命令
可以通过以下命令检查生成的 ruleset:
nft list ruleset
如果要调试 proxmox-firewall,可以将 RUST_LOG 环境变量设置为 trace,并直接在前台 运行该守护进程。这应提供详细调试输出:
RUST_LOG=trace /usr/libexec/proxmox/proxmox-firewall
如果希望防火墙守护进程提供详细输出,也可以编辑 systemctl 服务:
systemctl edit proxmox-firewall
然后需要为 RUST_LOG 环境变量添加 override:
[Service] Environment="RUST_LOG=trace"
这会很快生成大量日志,因此仅应在调试时使用。其他较低详细程度的日志级别包括 info 和 debug。
前台运行会将日志输出写入 STDERR,因此可以使用以下命令重定向日志(例如用于向社区论坛提交 日志):
RUST_LOG=trace /usr/libexec/proxmox/proxmox-firewall 2> firewall_log_$(hostname).txt
为调试防火墙规则,跟踪数据包在不同链之间的流动会很有帮助。可以通过为希望跟踪的数据包设置 nftrace 为 1 来实现。建议不要为*所有*数据包设置该标志;下面示例只检查 ICMP 数据包。
#!/usr/sbin/nft -f
table bridge tracebridge
delete table bridge tracebridge
table bridge tracebridge {
chain trace {
meta l4proto icmp meta nftrace set 1
}
chain prerouting {
type filter hook prerouting priority -350; policy accept;
jump trace
}
chain postrouting {
type filter hook postrouting priority -350; policy accept;
jump trace
}
}
保存该文件、赋予可执行权限并运行一次后,会创建相应的跟踪链。然后可以通过 Proxmox VE Web UI(Firewall > Log)或 nft monitor trace 检查跟踪输出。
上述示例会跟踪所有桥上的流量,这通常是客户机流量经过的位置。如果要检查主机流量,请在 inet 表而不是 bridge 表中创建这些链。
|
|
请注意,这可能生成*大量*日志,并显著降低网络栈性能。 |
可以运行以下命令移除跟踪规则:
nft delete table bridge tracebridge
宏定义
|
Amanda
|
Amanda 备份 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
10080 |
|
PARAM |
tcp |
10080 |
|
Auth
|
Auth (identd) 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
113 |
|
BGP
|
Border Gateway Protocol 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
179 |
|
BitTorrent
|
BitTorrent 3.1 及更早版本的 BitTorrent 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
6881:6889 |
|
PARAM |
udp |
6881 |
|
BitTorrent32
|
BitTorrent 3.2 及更高版本的 BitTorrent 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
6881:6999 |
|
PARAM |
udp |
6881 |
|
CVS
|
Concurrent Versions System pserver 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
2401 |
|
Ceph
|
Ceph 存储集群流量(Ceph Monitors、OSD 和 MDS 守护进程) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
6789 |
|
PARAM |
tcp |
3300 |
|
PARAM |
tcp |
6800:7300 |
|
Citrix
|
Citrix/ICA 流量(ICA、ICA Browser、CGP) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
1494 |
|
PARAM |
udp |
1604 |
|
PARAM |
tcp |
2598 |
|
DAAP
|
Digital Audio Access Protocol 流量(iTunes、Rythmbox 守护进程) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
3689 |
|
PARAM |
udp |
3689 |
|
DCC
|
Distributed Checksum Clearinghouse 垃圾邮件过滤机制 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
6277 |
|
DHCPfwd
|
转发的 DHCP 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
67:68 |
67:68 |
|
DHCPv6
|
DHCPv6 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
546:547 |
546:547 |
|
DNS
|
Domain Name System 流量(udp 和 tcp) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
53 |
|
PARAM |
tcp |
53 |
|
Distcc
|
Distributed Compiler 服务 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
3632 |
|
FTP
|
File Transfer Protocol |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
21 |
|
Finger
|
Finger 协议(RFC 742) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
79 |
|
GNUnet
|
GNUnet 安全点对点网络流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
2086 |
|
PARAM |
udp |
2086 |
|
PARAM |
tcp |
1080 |
|
PARAM |
udp |
1080 |
|
GRE
|
Generic Routing Encapsulation 隧道协议 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
47 |
|
Git
|
Git 分布式版本控制流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
9418 |
|
HKP
|
OpenPGP HTTP key server 协议流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
11371 |
|
HTTP
|
Hypertext Transfer Protocol(WWW) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
80 |
|
HTTPS
|
基于 SSL 的 Hypertext Transfer Protocol(WWW) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
443 |
|
ICPV2
|
Internet Cache Protocol V2(Squid)流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
3130 |
|
ICQ
|
AOL Instant Messenger 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
5190 |
|
IMAP
|
Internet Message Access Protocol |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
143 |
|
IMAPS
|
基于 SSL 的 Internet Message Access Protocol |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
993 |
|
IPIP
|
IPIP 封装流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
94 |
|
IPsec
|
IPsec 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
500 |
500 |
PARAM |
50 |
|
IPsecah
|
IPsec 认证(AH)流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
500 |
500 |
PARAM |
51 |
|
IPsecnat
|
IPsec 流量和 Nat-Traversal |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
500 |
|
PARAM |
udp |
4500 |
|
PARAM |
50 |
|
IRC
|
Internet Relay Chat 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
6667 |
|
Jetdirect
|
HP Jetdirect 打印 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
9100 |
|
L2TP
|
Layer 2 Tunneling Protocol 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
1701 |
|
LDAP
|
Lightweight Directory Access Protocol 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
389 |
|
LDAPS
|
安全 Lightweight Directory Access Protocol 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
636 |
|
MDNS
|
Multicast DNS |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
5353 |
|
MSNP
|
Microsoft Notification Protocol |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
1863 |
|
MSSQL
|
Microsoft SQL Server |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
1433 |
|
Mail
|
邮件流量(SMTP、SMTPS、Submission) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
25 |
|
PARAM |
tcp |
465 |
|
PARAM |
tcp |
587 |
|
Munin
|
Munin 网络资源监控流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
4949 |
|
MySQL
|
MySQL 服务器 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
3306 |
|
NNTP
|
NNTP 流量(Usenet)。 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
119 |
|
NNTPS
|
加密 NNTP 流量(Usenet) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
563 |
|
NTP
|
Network Time Protocol(ntpd) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
123 |
|
NeighborDiscovery
|
IPv6 邻居请求、邻居通告和路由器通告 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
icmpv6 |
router-solicitation |
|
PARAM |
icmpv6 |
router-advertisement |
|
PARAM |
icmpv6 |
neighbor-solicitation |
|
PARAM |
icmpv6 |
neighbor-advertisement |
|
OSPF
|
OSPF 组播流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
89 |
|
OpenVPN
|
OpenVPN 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
1194 |
|
PCA
|
Symantec PCAnywere (tm) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
5632 |
|
PARAM |
tcp |
5631 |
|
PMG
|
Proxmox Mail Gateway Web 界面 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
8006 |
|
POP3
|
POP3 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
110 |
|
POP3S
|
加密 POP3 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
995 |
|
PPtP
|
Point-to-Point Tunneling Protocol |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
47 |
||
PARAM |
tcp |
1723 |
|
Ping
|
ICMP echo request |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
icmp |
echo-request |
|
PostgreSQL
|
PostgreSQL 服务器 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
5432 |
|
Printer
|
Line Printer protocol 打印 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
515 |
|
RDP
|
Microsoft Remote Desktop Protocol 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
3389 |
|
RIP
|
Routing Information Protocol(双向) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
520 |
|
RNDC
|
BIND 远程管理协议 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
953 |
|
Razor
|
Razor 反垃圾邮件系统 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
2703 |
|
Rdate
|
远程时间获取(rdate) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
37 |
|
Rsync
|
Rsync 服务器 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
873 |
|
SANE
|
SANE 网络扫描 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
6566 |
|
SMB
|
Microsoft SMB 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
135,445 |
|
PARAM |
udp |
137:139 |
|
PARAM |
udp |
1024:65535 |
137 |
PARAM |
tcp |
135,139,445 |
|
SMBswat
|
Samba Web 管理工具 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
901 |
|
SMTP
|
Simple Mail Transfer Protocol |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
25 |
|
SMTPS
|
加密 Simple Mail Transfer Protocol |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
465 |
|
SNMP
|
Simple Network Management Protocol |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
161:162 |
|
PARAM |
tcp |
161 |
|
SPAMD
|
Spam Assassin SPAMD 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
783 |
|
SPICEproxy
|
Proxmox VE SPICE 显示代理流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
3128 |
|
SSH
|
Secure shell 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
22 |
|
SVN
|
Subversion 服务器(svnserve) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
3690 |
|
SixXS
|
SixXS IPv6 Deployment and Tunnel Broker |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
3874 |
|
PARAM |
udp |
3740 |
|
PARAM |
41 |
||
PARAM |
udp |
5072,8374 |
|
Squid
|
Squid Web 代理流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
3128 |
|
Submission
|
邮件提交流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
587 |
|
Syslog
|
Syslog 协议(RFC 5424)流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
514 |
|
PARAM |
tcp |
514 |
|
TFTP
|
Trivial File Transfer Protocol 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
69 |
|
Telnet
|
Telnet 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
23 |
|
Telnets
|
基于 SSL 的 Telnet |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
992 |
|
Time
|
RFC 868 Time 协议 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
37 |
|
Trcrt
|
Traceroute 流量(最多 30 跳) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
udp |
33434:33524 |
|
PARAM |
icmp |
echo-request |
|
VNC
|
VNC display 0 - 99 的 VNC 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
5900:5999 |
|
VNCL
|
listen 模式下从 VNC 服务器到 VNC 查看器的 VNC 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
5500 |
|
Web
|
WWW 流量(HTTP 和 HTTPS) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
80 |
|
PARAM |
tcp |
443 |
|
Webcache
|
Web 缓存/代理流量(端口 8080) |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
8080 |
|
Webmin
|
Webmin 流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
10000 |
|
Whois
|
Whois(nicname,RFC 3912)流量 |
| Action | proto | dport | sport |
|---|---|---|---|
PARAM |
tcp |
43 |
版权和免责声明
Copyright © 2022-2025 成都市梨儿方信息技术有限责任公司.
本程序是自由软件:你可以依据自由软件基金会发布的 GNU Affero General Public License 条款重新分发和/或修改本程序;可使用该许可证第 3 版,或(由你选择)任何后续版本。
发布本程序是希望它能够有用,但不提供任何担保;甚至不包含对适销性或特定用途适用性的默示担保。更多详情请参见 GNU Affero General Public License。
你应当已经随本程序收到一份 GNU Affero General Public License 的副本。如果没有,请访问: https://www.gnu.org/licenses/
Copyright © 2007-2022 Proxmox Server Solutions GmbH
本程序是自由软件:你可以依据自由软件基金会发布的 GNU Affero General Public License 条款重新分发和/或修改本程序;可使用该许可证第 3 版,或(由你选择)任何后续版本。
发布本程序是希望它能够有用,但不提供任何担保;甚至不包含对适销性或特定用途适用性的默示担保。更多详情请参见 GNU Affero General Public License。
你应当已经随本程序收到一份 GNU Affero General Public License 的副本。如果没有,请访问: https://www.gnu.org/licenses/