Nftables Netze absichern: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(47 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 29: Zeile 29:
 
* Wir wollen aber von vorneherein verstärkt mit Variablen arbeiten.
 
* Wir wollen aber von vorneherein verstärkt mit Variablen arbeiten.
 
* Dies macht die Skripte universeller.
 
* Dies macht die Skripte universeller.
 +
* '''vim /etc/nftables-conf.conf'''
 +
define wandev = enp0s3
 +
define wanip = 192.168.Y.213
 +
define lan = 172.26.2XX.0/24
 +
define server = 10.2XX.1.0/24
 +
define mgmt = 172.18.2XX.0/24
 +
define dmz = 10.88.2XX.0/24
 +
define local_tcp_ports = { 22 }
 +
 +
 
* '''vim /etc/nftables.conf'''
 
* '''vim /etc/nftables.conf'''
 
 
  #!/usr/sbin/nft -f
 
  #!/usr/sbin/nft -f
  define wandev = enp0s3
+
  include "/etc/nftables-vars.conf"
define wanip = 192.168.5.113
 
define lan = 172.17.113.0/24
 
define server = 172.16.113.0/24
 
define mgmt = 172.18.113.0/24
 
define dmz = 10.88.113.0/24
 
 
define local_tcp_ports = { 22 }
 
 
   
 
   
 
  flush ruleset
 
  flush ruleset
Zeile 83: Zeile 85:
 
== Aktivierung ==
 
== Aktivierung ==
  
* '''echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'''
+
*echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-ipforward.conf
* '''sysctl -p'''
+
*sysctl -p /etc/sysctl.d/99-ipforward.conf
  
 
== Weitere Tabellen ==
 
== Weitere Tabellen ==
Zeile 102: Zeile 104:
  
 
  #!/usr/sbin/nft -f
 
  #!/usr/sbin/nft -f
  define wandev = enp0s3
+
  include "/etc/nftables-vars.conf"
define wanip = 192.168.5.113
 
define lan = 172.17.113.0/24
 
define server = 172.16.113.0/24
 
define mgmt = 172.18.113.0/24
 
define dmz = 10.88.113.0/24
 
define local_tcp_ports = { 22 }
 
 
   
 
   
 
  flush ruleset
 
  flush ruleset
Zeile 163: Zeile 159:
  
 
  snat ip to ''<new_source_ip>''
 
  snat ip to ''<new_source_ip>''
 +
 
=Forward von innen nach aussen=
 
=Forward von innen nach aussen=
 
*Wir wollen das unsere Clients und die Server vorerst nach aussen alles dürfen.
 
*Wir wollen das unsere Clients und die Server vorerst nach aussen alles dürfen.
 +
* '''vim /etc/nftables-vars.conf'''
 +
define wandev = enp0s3
 +
define wanip = 192.168.Y.213
 +
define lan = 172.26.2XX.0/24
 +
define server = 10.2XX.1.0/24
 +
define mgmt = 172.18.2XX.0/24
 +
define dmz = 10.88.2XX.0/24
 +
define local_tcp_ports = { 22 }
 +
<span style="color:#FF0000">define localnets = { $lan , $server , $dmz, $mgmt}</span>
 +
* '''vim /etc/nftables.conf'''
 
  #!/usr/sbin/nft -f
 
  #!/usr/sbin/nft -f
  define wandev = enp0s3
+
  include "/etc/nftables-vars.conf"
define wanip = 192.168.5.113
 
define lan = 172.17.113.0/24
 
define server = 172.16.113.0/24
 
define mgmt = 172.18.113.0/24
 
define dmz = 10.88.113.0/24
 
define local_tcp_ports = { 22 }
 
  <span style="color:#FF0000">define localnets = { $lan , $server , $dmz, $mgmt}</span>
 
 
 
 
  flush ruleset
 
  flush ruleset
 
  table inet filter {
 
  table inet filter {
Zeile 215: Zeile 214:
 
=Unsere Netze dürfen auf die Firewall andere nicht=
 
=Unsere Netze dürfen auf die Firewall andere nicht=
 
*Wir wollen das unsere Clients und die Server vorerst nach aussen alles dürfen.
 
*Wir wollen das unsere Clients und die Server vorerst nach aussen alles dürfen.
#!/usr/sbin/nft -f
+
* '''vim /etc/nftables-vars.conf'''
 
  define wandev = enp0s3
 
  define wandev = enp0s3
  <span style="color:#FF0000">define dmzdev = enp0s9</span>
+
  <span style="color:#FF0000">define dmzdev = enp0s8</span>
  <span style="color:#FF0000">define landev = enp0s8</span>
+
  <span style="color:#FF0000">define landev = enp0s9</span>
 
  <span style="color:#FF0000">define serverdev = enp0s10</span>
 
  <span style="color:#FF0000">define serverdev = enp0s10</span>
  define wanip = 192.168.5.113
+
<span style="color:#FF0000">define host = 192.168.10.200</span>
  define lan = 172.17.113.0/24
+
  define wanip = 192.168.Y.213
  define server = 172.16.113.0/24
+
  define lan = 172.26.2XX.0/24
  define mgmt = 172.18.113.0/24
+
  define server = 10.2XX.1.0/24
  define dmz = 10.88.113.0/24
+
  define mgmt = 172.18.2XX.0/24
  define local_tcp_ports = { 22 }
+
  define dmz = 10.88.2XX.0/24
  define localnets = { $lan , $server , $dmz, $server}
+
  define local_tcp_ports = { 22 }  
 
+
  define localnets = { $lan , $server , $dmz, $mgmt}
 +
* '''vim /etc/nftables.conf'''
 +
#!/usr/sbin/nft -f
 +
include "/etc/nftables-vars.conf"
 
  flush ruleset
 
  flush ruleset
 
  table inet filter {
 
  table inet filter {
Zeile 237: Zeile 239:
 
   <span style="color:#FF0000">ct state new iif $dmzdev ip saddr $dmz tcp dport $local_tcp_ports accept</span>
 
   <span style="color:#FF0000">ct state new iif $dmzdev ip saddr $dmz tcp dport $local_tcp_ports accept</span>
 
   <span style="color:#FF0000">ct state new iif $serverdev ip saddr $server tcp dport $local_tcp_ports accept</span>
 
   <span style="color:#FF0000">ct state new iif $serverdev ip saddr $server tcp dport $local_tcp_ports accept</span>
 +
  <span style="color:#FF0000">ct state new iif $wandev ip saddr $host tcp dport $local_tcp_ports accept</span>
 
   ct state new icmp type echo-request accept
 
   ct state new icmp type echo-request accept
 
   log prefix "--nftables-drop-input--"
 
   log prefix "--nftables-drop-input--"
Zeile 269: Zeile 272:
  
 
=Regeln von aussen nach innen=
 
=Regeln von aussen nach innen=
*Die Regel die eingefügt wurde bedeutet folgendes:
+
* Die Regel die eingefügt wurde bedeutet folgendes:
*Ein Paket welches in die Schnittstelle enp0s3 reingeht und den Rechner über enp0s9 verlässt.
+
* Ein Paket welches in die Schnittstelle enp0s3 reingeht und den Rechner über enp0s8 verlässt,
*und die Absendeadresse 192.168.5.200 hat, sowie an die Zieladresse 102.88.113.21 und an den Zielport 22 gerichtet ist.
+
* und die Absendeadresse Host hat, sowie an die Zieladresse des Nameservers und an den Zielport 22 gerichtet ist,
*wird durch gelassen und in den Conntrack Tabelle aufgenommen.
+
* wird durchgelassen und in der Conntrack-Tabelle aufgenommen.
  
#!/usr/sbin/nft -f
+
* '''vim /etc/nftables-vars.conf'''
 
  define wandev = enp0s3
 
  define wandev = enp0s3
 +
define dmzdev = enp0s8
 
  define landev = enp0s9
 
  define landev = enp0s9
  define serverdev = enp0s8
+
  define serverdev = enp0s10
 
  define mgmtdev = enp0s10
 
  define mgmtdev = enp0s10
  define wanip = 192.168.5.113
+
define host = 192.168.Y.200
  define lan = 172.17.113.0/24
+
  define wanip = 192.168.Y.213
  define server = 172.16.113.0/24
+
  define lan = 172.26.2XX.0/24
  define mgmt = 172.18.113.0/24
+
  define server = 10.2XX.1.0/24
  define dmz = 10.88.113.0/24
+
  define mgmt = 172.18.2XX.0/24
 +
  define dmz = 10.88.2XX.0/24
 
  define local_tcp_ports = { 22 }
 
  define local_tcp_ports = { 22 }
  define localnets = { $lan , $server , $dmz, $server }
+
  define localnets = { $lan , $server , $dmz, $mgmt }
 +
<span style="color:#FF0000">define ns = 10.88.2XX.21</span>
 +
 
 +
* '''vim /etc/nftables.conf'''
 +
#!/usr/sbin/nft -f
 +
include "/etc/nftables-vars.conf"
 
   
 
   
 
  flush ruleset
 
  flush ruleset
Zeile 293: Zeile 303:
 
   ct state established,related accept
 
   ct state established,related accept
 
   ct state new iifname "lo" accept
 
   ct state new iifname "lo" accept
   ct state new iifname $landev ip saddr $lan tcp dport $local_tcp_ports accept
+
   ct state new iif $landev ip saddr $lan tcp dport $local_tcp_ports accept
   ct state new iifname $dmzdev ip saddr $dmz tcp dport $local_tcp_ports accept
+
   ct state new iif $dmzdev ip saddr $dmz tcp dport $local_tcp_ports accept
   ct state new iifname $serverdev ip saddr $server tcp dport $local_tcp_ports accept
+
   ct state new iif $serverdev ip saddr $server tcp dport $local_tcp_ports accept
 
   ct state new icmp type echo-request accept
 
   ct state new icmp type echo-request accept
 
   log prefix "--nftables-drop-input--"
 
   log prefix "--nftables-drop-input--"
Zeile 303: Zeile 313:
 
   type filter hook forward priority filter; policy drop;
 
   type filter hook forward priority filter; policy drop;
 
   ct state established,related accept
 
   ct state established,related accept
    <span style="color:#FF0000">ct state new iif "enp0s3" oif "enp0s9" ip saddr 192.168.5.200 ip daddr 10.88.113.21 tcp dport 22 accept</span>
+
  <span style="color:#FF0000">ct state new iif $wandev oif $dmzdev ip saddr $host ip daddr $ns tcp dport 22 accept</span>
 
 
 
   ct state new ip saddr $localnets accept
 
   ct state new ip saddr $localnets accept
 
   log prefix "--nftables-drop-forward--"
 
   log prefix "--nftables-drop-forward--"
Zeile 332: Zeile 341:
 
;Wichtig sind die Anführungszeichen
 
;Wichtig sind die Anführungszeichen
 
  include "/etc/nftables.var"
 
  include "/etc/nftables.var"
 
=Aufgabe=
 
==kit Host==
 
Der Kit Host soll Vollzugriff auf die Firewall haben.
 
==mail.it1xx.int==
 
22/tcp  open  ssh    (openssh)) (Wir verlegen den Port auf 6666) (Partnernetz und Host  freischalten, ansonsten vpn)
 
25/tcp  open  smtp  (postfix) (wird frei geschaltet)
 
80/tcp  open  http  (apache2)  (wird nicht frei geschaltet)
 
443/tcp  open  http  (apache2)  (wird frei geschaltet)
 
143/tcp open  imap (dovecot) (wird nicht frei geschaltet) 
 
465/tcp open  smtps (postfix) (wird frei geschaltet)
 
993/tcp open  imaps  (dovecot) (wird frei geschaltet)
 
3306 /tcp open mysqld (127.0.0.1)  (mariadb)
 
 
==www.it1xx.int==
 
22/tcp  open  ssh    (openssh)) (Wir verlegen den Port auf 6666) (Partnernetz und Host freischalten, ansonsten vpn)
 
80/tcp  open  http  (apache2)  (wird nicht frei geschaltet)
 
443/tcp open  https  (apache2) (wird frei geschaltet)
 
 
==ns.it1xx.int==
 
22/tcp  open  ssh    (openssh)) (Wir verlegen den Port auf 6666) (Partnernetz und Host freischalten, ansonsten vpn)
 
53/tcp open  domain  (kan mann abschalten, eventuell freigeben für den secondary Nameserver)
 
53/udp open  domain  (wird frei geschaltet)
 
 
==fw.itxx.int==
 
22/tcp  open  ssh    (openssh)) (Wir verlegen den Port auf 6666) (Partnernetz und Host freischalten, ansonsten vpn)
 
 
Für den Anfang schalten wir allen anderen ausgehenden Verkehr frei
 
Später gehen wir hin und werden nach und nach restriktiver.
 
=DNAT zum client=
 
define client = 172.17.113.49
 
 
table inet filter {
 
    ....
 
    chain forward {
 
    type filter hook forward priority filter; policy drop;
 
    ct state established,related accept
 
    ...
 
    <span style="color:#FF0000">ct state new iif $wandev oif $landev ip daddr $client tcp dport 22 accept</span>
 
    log prefix "--nftables-drop-forward--"
 
 
}
 
 
 
table inet nat {
 
    <span style="color:#FF0000">chain prerouting {</span>
 
        <span style="color:#FF0000">type nat hook prerouting priority dstnat; policy accept;</span>
 
        <span style="color:#FF0000">ip daddr $wanip tcp dport 9922 dnat ip to $client:22</span>
 
      <span style="color:#FF0000">}</span>
 
 
 
=old stuff=
 
=old stuff=
 
*[[nftables-net-oldstuff]]
 
*[[nftables-net-oldstuff]]

Aktuelle Version vom 30. April 2026, 06:41 Uhr

Einleitung

  • Nachdem wir ein Hostsystem abgesichert haben, kommen wir nun zum Absichern von Netzen.
  • Die Firewall agiert als Vermittler zwischen verschiedenen Netzen.
  • In unserem Beispiel haben wir 3 Netzbereiche.

WAN

  • Wide Area Net steht für alles was nicht die anderen beiden Netze betrifft

LAN

  • Local Area Net steht in der Regel für ein Netz das von aussen nicht erreichbar ist.
  • Meist ist es über Network Address Translation (NAT) angebunden.

DMZ

  • Demilitarized Zone ist ein Netz welches von außen erreichbar ist.
  • Die Zugriffe werden aber durch die Firewall abgesichert.
  • Dort werden meistens Dienste wie Mail oder Web gehostet. Teilweise auch Proxy Server.

Der Plan

Das Grundgerüst

  • Wir nutzen unsere Host Firewall als Ausgangsskript
  • Wir wollen aber von vorneherein verstärkt mit Variablen arbeiten.
  • Dies macht die Skripte universeller.
  • vim /etc/nftables-conf.conf
define wandev = enp0s3
define wanip = 192.168.Y.213
define lan = 172.26.2XX.0/24
define server = 10.2XX.1.0/24
define mgmt = 172.18.2XX.0/24
define dmz = 10.88.2XX.0/24
define local_tcp_ports = { 22 } 

  • vim /etc/nftables.conf
#!/usr/sbin/nft -f
include "/etc/nftables-vars.conf"

flush ruleset
table inet filter {
       chain input {
               type filter hook input priority filter; policy drop;
               ct state established,related accept
               ct state new iifname "lo" accept
               ct state new tcp dport $local_tcp_ports accept
               ct state new icmp type echo-request accept
               log prefix "--nftables-drop-input--"
       }
     chain forward {
               type filter hook forward priority filter; policy drop;
               ct state established,related accept
               log prefix "--nftables-drop-forward--"
     }

       chain output {
               type filter hook output priority filter; policy drop;
               ct state established,related accept
               ct state new oifname "lo" accept
               ct state new accept
               log prefix "--nftables-drop-output--"
       }
}
 
table inet nat {
   chain postrouting {
       type nat hook postrouting priority 100; policy accept;

       oif $wandev ip saddr $lan snat to $wanip
       oif $wandev ip saddr $server snat to $wanip
       oif $wandev ip saddr $mgmt snat to $wanip
       # DMZ wird genattet, außer zu 10.88.0.0/16 und 10.82.89.0/24
       oif $wandev ip saddr $dmz ip daddr != { 10.88.0.0/16, 10.82.89.0/24 } snat to $wanip
   }

Forwarding

Damit Pakete weitergeleitet werden können, muss als erstes FORWARDING im Kernel aktiviert werden.

Aktivierung

  • echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-ipforward.conf
  • sysctl -p /etc/sysctl.d/99-ipforward.conf

Weitere Tabellen

  • Eine Skizze über die Reihenfolge der Hooks.
  • Als erstes greift der Prerouting-Hook
  • Je nachdem wie geroutet wird greift dann entweder Input- oder Fowrward-Hook
  • Falls ein lokaler Prozess ein Paket sendet, dann greift der Output-Hook
  • Als letztes kann man das Paket mit dem Postrouting-Hook beeinflußen

SNAT

  • Rechner in einem LAN können nicht ohne weiteres mit dem WAN kommunizieren, da an die lokale IP-Adresse der Rechner im LAN nicht von außen geroutet werden kann.
  • Um eine Internetverbindung aufzubauen, muss die Adresse aus dem LAN in eine öffentliche umgeschrieben werden.
#!/usr/sbin/nft -f
include "/etc/nftables-vars.conf"

flush ruleset
table inet filter {
 chain input {
  type filter hook input priority filter; policy drop;
  ct state established,related accept
  ct state new iifname "lo" accept
  ct state new tcp dport $local_tcp_ports accept
  ct state new icmp type echo-request accept
  log prefix "--nftables-drop-input--"
 }

 chain forward {
  type filter hook forward priority filter; policy drop;
  log prefix "--nftables-drop-forward--"
 }

 chain output {
  type filter hook output priority filter; policy drop;
  ct state established,related accept
  ct state new oifname "lo" accept
  ct state new accept
  log prefix "--nftables-drop-output--"
 }
}

table inet nat {
 chain postrouting {
  type nat hook postrouting priority 100; policy accept;
  oif $wandev ip saddr $lan snat to $wanip
  oif $wandev ip saddr $server snat to $wanip
  oif $wandev ip saddr $mgmt snat to $wanip
  # DMZ wird genattet, außer zu 10.88.0.0/16 und 10.82.89.0/24
  oif $wandev ip saddr $dmz ip daddr != { 10.88.0.0/16, 10.82.89.0/24 } snat to $wanip
 }
}

Neu verwendete Syntax:

  • Definieren einer Variable
define variable_name = value
  • Interface des herausgehenden Paketes:
oif device_name
  • matche IPv4-Adresse des Ursprungpaketes
ip saddr <source_ip>
  • Die Ursprungs-IP auf eine andere Adresse natten
snat ip to <new_source_ip>

Forward von innen nach aussen

  • Wir wollen das unsere Clients und die Server vorerst nach aussen alles dürfen.
  • vim /etc/nftables-vars.conf
define wandev = enp0s3
define wanip = 192.168.Y.213
define lan = 172.26.2XX.0/24
define server = 10.2XX.1.0/24
define mgmt = 172.18.2XX.0/24
define dmz = 10.88.2XX.0/24
define local_tcp_ports = { 22 } 
define localnets = { $lan , $server , $dmz, $mgmt}
  • vim /etc/nftables.conf
#!/usr/sbin/nft -f
include "/etc/nftables-vars.conf"
flush ruleset
table inet filter {
 chain input {
  type filter hook input priority filter; policy drop;
  ct state established,related accept
  ct state new iifname "lo" accept
  ct state new tcp dport $local_tcp_ports accept
  ct state new icmp type echo-request accept
  log prefix "--nftables-drop-input--"
 }

 chain forward {
  type filter hook forward priority filter; policy drop;
  ct state established,related accept
  ct state new ip saddr $localnets accept
  log prefix "--nftables-drop-forward--"
 }

 chain output {
  type filter hook output priority filter; policy drop;
  ct state established,related accept
  ct state new oifname "lo" accept
  ct state new accept
  log prefix "--nftables-drop-output--"
 }
}

table inet nat {
 chain postrouting {
  type nat hook postrouting priority 100; policy accept;
  oif $wandev ip saddr $lan snat to $wanip
  oif $wandev ip saddr $server snat to $wanip
  oif $wandev ip saddr $mgmt snat to $wanip
  # DMZ wird genattet, außer zu 10.88.0.0/16 und 10.82.89.0/24
  oif $wandev ip saddr $dmz ip daddr != { 10.88.0.0/16, 10.82.89.0/24 } snat to $wanip
 }
}

Unsere Netze dürfen auf die Firewall andere nicht

  • Wir wollen das unsere Clients und die Server vorerst nach aussen alles dürfen.
  • vim /etc/nftables-vars.conf
define wandev = enp0s3
define dmzdev = enp0s8
define landev = enp0s9
define serverdev = enp0s10
define host = 192.168.10.200
define wanip = 192.168.Y.213
define lan = 172.26.2XX.0/24
define server = 10.2XX.1.0/24
define mgmt = 172.18.2XX.0/24
define dmz = 10.88.2XX.0/24
define local_tcp_ports = { 22 } 
define localnets = { $lan , $server , $dmz, $mgmt}
  • vim /etc/nftables.conf
#!/usr/sbin/nft -f
include "/etc/nftables-vars.conf"
flush ruleset
table inet filter {
 chain input {
  type filter hook input priority filter; policy drop;
  ct state established,related accept
  ct state new iifname "lo" accept
  ct state new iif $landev ip saddr $lan tcp dport $local_tcp_ports accept
  ct state new iif $dmzdev ip saddr $dmz tcp dport $local_tcp_ports accept
  ct state new iif $serverdev ip saddr $server tcp dport $local_tcp_ports accept
  ct state new iif $wandev ip saddr $host tcp dport $local_tcp_ports accept
  ct state new icmp type echo-request accept
  log prefix "--nftables-drop-input--"
 }

 chain forward {
  type filter hook forward priority filter; policy drop;
  ct state established,related accept
  ct state new saddr $localnets accept
  log prefix "--nftables-drop-forward--"
 }

 chain output {
  type filter hook output priority filter; policy drop;
  ct state established,related accept
  ct state new oifname "lo" accept
  ct state new accept
  log prefix "--nftables-drop-output--"
 }
}

table inet nat {
 chain postrouting {
  type nat hook postrouting priority 100; policy accept;
  oif $wandev ip saddr $lan snat to $wanip
  oif $wandev ip saddr $server snat to $wanip
  oif $wandev ip saddr $mgmt snat to $wanip
  # DMZ wird genattet, außer zu 10.88.0.0/16 und 10.82.89.0/24
  oif $wandev ip saddr $dmz ip daddr != { 10.88.0.0/16, 10.82.89.0/24 } snat to $wanip
 }
}

Regeln von aussen nach innen

  • Die Regel die eingefügt wurde bedeutet folgendes:
  • Ein Paket welches in die Schnittstelle enp0s3 reingeht und den Rechner über enp0s8 verlässt,
  • und die Absendeadresse Host hat, sowie an die Zieladresse des Nameservers und an den Zielport 22 gerichtet ist,
  • wird durchgelassen und in der Conntrack-Tabelle aufgenommen.
  • vim /etc/nftables-vars.conf
define wandev = enp0s3
define dmzdev = enp0s8
define landev = enp0s9
define serverdev = enp0s10
define mgmtdev = enp0s10
define host = 192.168.Y.200
define wanip = 192.168.Y.213
define lan = 172.26.2XX.0/24
define server = 10.2XX.1.0/24
define mgmt = 172.18.2XX.0/24
define dmz = 10.88.2XX.0/24
define local_tcp_ports = { 22 }
define localnets = { $lan , $server , $dmz, $mgmt }
define ns = 10.88.2XX.21
  • vim /etc/nftables.conf
#!/usr/sbin/nft -f
include "/etc/nftables-vars.conf"

flush ruleset
table inet filter {
 chain input {
  type filter hook input priority filter; policy drop;
  ct state established,related accept
  ct state new iifname "lo" accept
  ct state new iif $landev ip saddr $lan tcp dport $local_tcp_ports accept
  ct state new iif $dmzdev ip saddr $dmz tcp dport $local_tcp_ports accept
  ct state new iif $serverdev ip saddr $server tcp dport $local_tcp_ports accept
  ct state new icmp type echo-request accept
  log prefix "--nftables-drop-input--"
 }

 chain forward {
  type filter hook forward priority filter; policy drop;
  ct state established,related accept
  ct state new iif $wandev oif $dmzdev ip saddr $host ip daddr $ns tcp dport 22 accept
  ct state new ip saddr $localnets accept
  log prefix "--nftables-drop-forward--"
 }

 chain output {
  type filter hook output priority filter; policy drop;
  ct state established,related accept
  ct state new oifname "lo" accept
  ct state new accept
  log prefix "--nftables-drop-output--"
 }
}

table inet nat {
 chain postrouting {
  type nat hook postrouting priority 100; policy accept;
  oif $wandev ip saddr $lan snat to $wanip
  oif $wandev ip saddr $server snat to $wanip
  oif $wandev ip saddr $mgmt snat to $wanip
  # DMZ wird genattet, außer zu 10.88.0.0/16 und 10.82.89.0/24
  oif $wandev ip saddr $dmz ip daddr != { 10.88.0.0/16, 10.82.89.0/24 } snat to $wanip
 }
}

Man kann die Variablen auch auslagern

Wichtig sind die Anführungszeichen
include "/etc/nftables.var"

old stuff