#!/usr/sbin/nft -f table inet filter { chain input { type filter hook input priority 0; policy {{ security_firewall_default_policy | default('drop') }}; ct state established,related accept iifname lo accept # allow ICMP ip protocol icmp icmp type { echo-request, echo-reply, destination-unreachable, time-exceeded } accept ip6 nexthdr icmpv6 icmpv6 type { echo-request, echo-reply, destination-unreachable, packet-too-big, time-exceeded, parameter-problem } accept {% for p in security_firewall_allowed_ports %} {% set parts = p.split('/') %} {% set port = parts[0] %} {% set proto = parts[1] if parts|length > 1 else 'tcp' %} {{ proto }} dport {{ port }} accept {% endfor %} reject with icmpx type port-unreachable } chain forward { type filter hook forward priority 0; policy accept; } chain output { type filter hook output priority 0; policy accept; } }