table inet audit { # handle 1 set blocklist { # handle 6 type ipv4_addr timeout 1h } set lans { # handle 7 type ifname elements = { "enp2s0", "enp3s0" } } chain early { # handle 1 type filter hook input priority filter - 10; policy accept; ip saddr 192.0.2.66 drop comment "an early input chain" # handle 8 } chain input { # handle 2 type filter hook input priority filter; policy drop; ct state established,related accept # handle 9 ip saddr @blocklist drop comment "dynamic" # handle 10 iifname @lans accept comment "an interface set" # handle 11 ip saddr 10.0.0.0/8 ip saddr != 10.0.10.0/24 tcp dport 22 drop comment "two source matches" # handle 12 icmpv6 type nd-neighbor-solicit ip6 hoplimit != 255 drop comment "hop limit not 255" # handle 13 iifname "enp2s0.20" udp dport 53 accept comment "DNS from the IoT VLAN" # handle 14 ip saddr 10.9.0.0/24 jump admin # handle 15 } chain admin { # handle 3 ip saddr 10.9.0.5 tcp dport 22 accept comment "within the jump" # handle 16 ip saddr 10.8.0.1 tcp dport 23 accept comment "outside the jump" # handle 17 meta mark 0x00000001 accept comment "raw under the jump" # handle 18 } chain forward { # handle 4 type filter hook forward priority filter; policy drop; ct state established,related accept # handle 19 ip daddr 10.0.10.37 tcp dport 443 accept comment "not only forwarded" # handle 20 iifname "enp2s0" oifname "wan" accept # handle 21 } chain prerouting { # handle 5 type nat hook prerouting priority dstnat; policy accept; ip daddr 203.0.113.1 tcp dport { 80, 443 } dnat ip to 10.0.10.37 comment "web" # handle 23 } }