[pve-devel] applied: [PATCH proxmox-firewall 1/1] rules: allow vital ICMP(v6) types

Fabian Grünbichler f.gruenbichler at proxmox.com
Wed Jul 10 14:54:41 CEST 2024


On June 10, 2024 2:52 pm, Stefan Hanreich wrote:
> There are certain ICMP messages that should always pass through a
> firewall irregardless of any other rules. This is particularly
> important for ICMPv6. While we already handled NDP, there are certain
> control messages that should always be able to pass through any
> firewall, according to RFC 4890.
> 
> For ICMP we additionally allow 'Source Quench' as well.
> 
> Signed-off-by: Stefan Hanreich <s.hanreich at proxmox.com>
> ---
> While Source Quench is deprecated, there might be niche use cases
> using it and allowing it shouldn't really hurt so I've thrown it into
> the mix as well.
> 
>  .../resources/proxmox-firewall.nft            | 22 +++++++++++++++++--
>  1 file changed, 20 insertions(+), 2 deletions(-)
> 
> diff --git a/proxmox-firewall/resources/proxmox-firewall.nft b/proxmox-firewall/resources/proxmox-firewall.nft
> index 537ba88..ea2cd7d 100644
> --- a/proxmox-firewall/resources/proxmox-firewall.nft
> +++ b/proxmox-firewall/resources/proxmox-firewall.nft
> @@ -16,6 +16,7 @@ add chain inet proxmox-firewall allow-ndp-out
>  add chain inet proxmox-firewall block-ndp-out
>  add chain inet proxmox-firewall block-conntrack-invalid
>  add chain inet proxmox-firewall block-smurfs
> +add chain inet proxmox-firewall allow-icmp
>  add chain inet proxmox-firewall log-drop-smurfs
>  add chain inet proxmox-firewall default-in
>  add chain inet proxmox-firewall default-out
> @@ -32,6 +33,7 @@ add chain bridge proxmox-firewall-guests allow-ndp-out
>  add chain bridge proxmox-firewall-guests block-ndp-out
>  add chain bridge proxmox-firewall-guests allow-ra-out
>  add chain bridge proxmox-firewall-guests block-ra-out
> +add chain bridge proxmox-firewall-guests allow-icmp
>  add chain bridge proxmox-firewall-guests do-reject
>  add chain bridge proxmox-firewall-guests vm-out {type filter hook prerouting priority 0; policy accept;}
>  add chain bridge proxmox-firewall-guests vm-in {type filter hook postrouting priority 0; policy accept;}
> @@ -47,6 +49,7 @@ flush chain inet proxmox-firewall allow-ndp-out
>  flush chain inet proxmox-firewall block-ndp-out
>  flush chain inet proxmox-firewall block-conntrack-invalid
>  flush chain inet proxmox-firewall block-smurfs
> +flush chain inet proxmox-firewall allow-icmp
>  flush chain inet proxmox-firewall log-drop-smurfs
>  flush chain inet proxmox-firewall default-in
>  flush chain inet proxmox-firewall default-out
> @@ -63,6 +66,7 @@ flush chain bridge proxmox-firewall-guests allow-ndp-out
>  flush chain bridge proxmox-firewall-guests block-ndp-out
>  flush chain bridge proxmox-firewall-guests allow-ra-out
>  flush chain bridge proxmox-firewall-guests block-ra-out
> +flush chain bridge proxmox-firewall-guests allow-icmp
>  flush chain bridge proxmox-firewall-guests do-reject
>  flush chain bridge proxmox-firewall-guests vm-out
>  flush chain bridge proxmox-firewall-guests vm-in
> @@ -175,9 +179,16 @@ table inet proxmox-firewall {
>          drop
>      }
>  
> +    chain allow-icmp {
> +        icmp type { destination-unreachable, source-quench, time-exceeded } accept
> +        # based on RFC 4890 - NDP is handled separately
> +        icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem } accept
> +    }
> +
>      chain default-in {
>          iifname "lo" accept
>  
> +        jump allow-icmp
>          ct state related,established accept
>  
>          meta l4proto igmp accept
> @@ -185,8 +196,6 @@ table inet proxmox-firewall {
>          tcp dport { 8006, 5900-5999, 3128, 22 } jump accept-management
>          udp dport 5405-5412 accept
>  
> -        meta l4proto icmp icmp type { destination-unreachable, time-exceeded } accept
> -
>          # Drop Microsoft SMB noise
>          udp dport { 135, 137-139, 445 } goto do-reject
>          udp sport 137 udp dport 1024-65535 goto do-reject
> @@ -203,6 +212,7 @@ table inet proxmox-firewall {
>      chain default-out {
>          oifname "lo" accept
>  
> +        jump allow-icmp
>          ct state vmap { invalid : drop, established : accept, related : accept }
>      }
>  
> @@ -284,6 +294,12 @@ table bridge proxmox-firewall-guests {
>          icmpv6 type { nd-router-advert, nd-redirect } drop
>      }
>  
> +    chain allow-icmp {
> +        icmp type { destination-unreachable, source-quench, time-exceeded } accept
> +        # based on RFC 4890 - NDP is handled separately
> +        icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem } accept
> +    }
> +
>      chain do-reject {
>          meta pkttype broadcast drop
>          ip saddr 224.0.0.0/4 drop
> @@ -297,12 +313,14 @@ table bridge proxmox-firewall-guests {
>  
>      chain vm-out {
>          type filter hook prerouting priority 0; policy accept;
> +        jump allow-icmp
>          ether type != arp ct state vmap { established : accept, related : accept, invalid : drop }
>          iifname vmap @vm-map-out
>      }
>  
>      chain vm-in {
>          type filter hook postrouting priority 0; policy accept;
> +        jump allow-icmp
>          ether type != arp ct state vmap { established : accept, related : accept, invalid : drop }
>          ether type arp accept
>          oifname vmap @vm-map-in
> -- 
> 2.39.2
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel at lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
> 
> 
> 




More information about the pve-devel mailing list