Environment
- Proxmox VE version: 9.x (nftables backend enabled)
- Firewall backend: nftables
- Affected components: proxmox-firewall, nftables chain evaluation order
Description
When using the Proxmox VE firewall with nftables, multiple base chains per hook (input, forward, output) are created at different priorities.Under current Netfilter semantics, a verdict of accept inside a base chain does not terminate processing for that hook; evaluation continues into subsequent base chains with higher priority. As a result, any drop rule or restrictive default policy inside a later PVE-generated chain will override an earlier accept in a user-defined chain.
This prevents administrators from reliably “whitelisting” traffic before Proxmox’s own firewall rules without disabling or rewriting large portions of the built-in firewall.
Steps to Reproduce
- Create a user-defined base chain on the input hook with lower priority (e.g., prio -5) and add an accept rule for a specific source IP.
- Leave the Proxmox firewall enabled with its default drop policy on the input hook at prio 0.
- Send traffic from the whitelisted source.
Traffic is dropped by the PVE firewall chain even though it was accepted in the earlier custom chain.
Traffic explicitly accepted in a user-defined chain should not be overridden by later PVE firewall drops unless explicitly configured.
Impact
- Reduces flexibility for advanced users who need both the PVE firewall and custom nftables rules to coexist.
- Forces workarounds like custom systemd units or disabling the PVE firewall entirely for certain nodes, increasing complexity and risk.
Proposed Solutions
- Provide an option to mark user-defined chains as “final,” stopping evaluation after accept.
- Alternatively, allow configuration of chain ordering or default policies so custom accept rules can safely take precedence.