nftables ist das moderne Paketklassifizierungs-Framework im Linux-Kernel, das als Nachfolger der veralteten Werkzeuge iptables, ip6tables, arptables und ebtables entwickelt wurde. Seit seiner Einfuehrung im Linux-Kernel 3.13 ist nftables zum Standard-Firewall-Backend auf den meisten grossen Linux-Distributionen geworden, einschliesslich Debian 10+, Ubuntu 20.10+, RHEL 8+ und Fedora 18+. Diese Anleitung bietet eine umfassende Einfuehrung in die Konzepte, Syntax und praktischen Konfigurationen von nftables zur Absicherung von Linux-Servern, einschliesslich NAT, Ratenbegrenzung, Sets, Protokollierung und Migration von iptables.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:

  • Ubuntu Server 20.04, 22.04 oder 24.04 (oder eine beliebige Linux-Distribution mit Kernel 3.13 oder hoeher)
  • Terminalzugriff mit sudo-Berechtigungen
  • SSH-Zugriff auf den Server (bei Fernkonfiguration)
  • Grundlegendes Verstaendnis von TCP/UDP-Ports, IP-Adressierung und Netzwerkkonzepten
  • Vertrautheit mit iptables-Konzepten (hilfreich, aber nicht erforderlich)

Was ist nftables?

nftables ist ein Subsystem des Linux-Kernels, das Paketfilterung, Netzwerkadressuebersetzung (NAT), Paketmanipulation und zustandsbehaftete Verkehrsklassifizierung bietet. Es ersetzt die veralteten Netfilter-Werkzeuge (iptables, ip6tables, arptables, ebtables) durch ein einziges, einheitliches Framework, das ueber das Kommandozeilen-Werkzeug nft verwaltet wird.

Wesentliche Vorteile von nftables gegenueber iptables:

  • Einheitliches Werkzeug — ein einziger nft-Befehl ersetzt iptables, ip6tables, arptables und ebtables
  • Sauberere Syntax — besser lesbares, konsistentes Regelformat mit richtiger Grammatik
  • Bessere Leistung — native Set- und Map-Datenstrukturen fuer effizientes Matching gegen grosse Listen von IPs, Ports oder Interfaces
  • Atomarer Regelersatz — gesamte Regelsaetze atomar laden, ohne Luecken waehrend Aktualisierungen
  • Keine vordefinierten Tabellen oder Ketten — Sie erstellen nur das, was Sie benoetigen, und reduzieren den Overhead
  • Integrierte Dual-Stack-Unterstuetzung — die inet-Familie behandelt sowohl IPv4 als auch IPv6 in einer einzigen Tabelle

nftables vs iptables

Das Verstaendnis der wichtigsten Unterschiede erleichtert den Uebergang:

Merkmaliptablesnftables
Befehliptables, ip6tables, arptables, ebtablesnft (einzelnes Werkzeug)
AdressfamilienSeparates Werkzeug pro FamilieEinheitliche inet-Familie fuer IPv4/IPv6
SyntaxFlag-basiert (-A, -j, -p)Strukturierte Grammatik (add rule ... accept)
SetsErfordert ipset-ErweiterungNative Sets und Maps integriert
RegelaktualisierungenLineare Einfuegung/LoeschungAtomarer Regelersatz ueber -f
Vordefinierte KettenObligatorische eingebaute Ketten (INPUT, OUTPUT, FORWARD)Keine Standardwerte; Sie erstellen Tabellen und Ketten nach Bedarf
LeistungLineare RegelauswertungOptimierte Set-Lookups, binaere Ausdruecke
Kernel-Schnittstellextables (eine pro Werkzeug)nf_tables (einzelne einheitliche API)

Installation von nftables unter Ubuntu

Unter Ubuntu 22.04 und spaeter ist nftables in den Standard-Repositories verfuegbar. Installieren Sie es:

sudo apt update
sudo apt install nftables

Aktivieren und starten Sie den Dienst, damit die Regeln nach Neustarts bestehen bleiben:

sudo systemctl enable nftables
sudo systemctl start nftables

Ueberpruefen Sie die Installation:

nft --version

Erwartete Ausgabe:

nftables v1.0.6 (Lester Gooch #4)

Pruefen Sie den aktuellen Regelsatz:

sudo nft list ruleset

Wenn keine Regeln konfiguriert wurden, ist die Ausgabe leer. Dies ist normal — im Gegensatz zu iptables startet nftables ohne Tabellen oder Ketten.

Grundlegende Konzepte

nftables organisiert die Paketfilterung in einer Hierarchie von Tabellen, Ketten und Regeln. Das Verstaendnis dieser Hierarchie ist essenziell.

Adressfamilien

Jede Tabelle gehoert zu einer Adressfamilie, die bestimmt, welchen Verkehr sie verarbeitet:

FamilieBeschreibung
ipNur IPv4-Verkehr
ip6Nur IPv6-Verkehr
inetSowohl IPv4 als auch IPv6 (empfohlen)
arpARP-Protokoll
bridgeBridge-Level-Verkehr
netdevEingehender Verkehr auf einem bestimmten Interface

Fuer die meisten Serverkonfigurationen verwenden Sie die inet-Familie, um sowohl IPv4 als auch IPv6 mit einem einzigen Regelsatz zu behandeln.

Tabellen

Tabellen sind Container fuer Ketten und Sets. Sie haben einen Namen und gehoeren zu einer Adressfamilie. Im Gegensatz zu iptables gibt es keine vordefinierten Tabellen — Sie erstellen sie nach Bedarf:

sudo nft add table inet filter
sudo nft add table inet nat

Ketten

Ketten enthalten Regeln und definieren, wann diese Regeln ausgewertet werden. Es gibt zwei Typen:

  • Basisketten — an einen Netfilter-Hook angeschlossen (input, output, forward, prerouting, postrouting). Diese sind Einstiegspunkte fuer die Paketverarbeitung.
  • Regulaere Ketten — nicht an einen Hook angeschlossen; werden als Sprungziele zur Organisation von Regeln verwendet.

Basisketten erfordern einen Typ, einen Hook und eine Prioritaet:

sudo nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }

Regeln

Regeln sind die eigentlichen Match- und Aktionsanweisungen innerhalb einer Kette. Sie bestehen aus Ausdruecken (Match-Kriterien) und einem Verdikt (accept, drop, reject, etc.):

sudo nft add rule inet filter input tcp dport 22 accept

Erstellen von Tabellen und Ketten

Bauen wir Schritt fuer Schritt eine vollstaendige Firewall-Konfiguration auf. Beginnen Sie mit dem Erstellen der Tabelle:

sudo nft add table inet filter

Erstellen Sie die Basisketten mit Standard-Policies:

# Eingangskette: gesamten eingehenden Verkehr standardmaessig verwerfen
sudo nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }

# Weiterleitungskette: weitergeleiteten Verkehr standardmaessig verwerfen
sudo nft add chain inet filter forward { type filter hook forward priority 0 \; policy drop \; }

# Ausgangskette: gesamten ausgehenden Verkehr standardmaessig zulassen
sudo nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }

Listen Sie Ihre Tabellen und Ketten zur Bestaetigung auf:

sudo nft list tables
sudo nft list chains

Regeln schreiben

Bestehende und zugehoerige Verbindungen akzeptieren

Die ersten Regeln in Ihrer Eingangskette sollten Verkehr akzeptieren, der zu bestehenden oder zugehoerigen Verbindungen gehoert. Dies stellt sicher, dass Antwortverkehr Ihrer ausgehenden Verbindungen nicht blockiert wird:

sudo nft add rule inet filter input ct state established,related accept

Loopback-Verkehr zulassen

Lokale Dienste kommunizieren ueber das Loopback-Interface. Lassen Sie es immer zu:

sudo nft add rule inet filter input iif lo accept

Ungueltige Verbindungen verwerfen

Verwerfen Sie Pakete, die keiner bekannten Verbindung angehoeren:

sudo nft add rule inet filter input ct state invalid drop

ICMP zulassen

Erlauben Sie Ping und andere ICMP-Nachrichten fuer Diagnosen:

sudo nft add rule inet filter input ip protocol icmp accept
sudo nft add rule inet filter input ip6 nexthdr icmpv6 accept

Bestimmte Dienste zulassen

Akzeptieren Sie Verkehr auf bestimmten Ports:

# SSH zulassen
sudo nft add rule inet filter input tcp dport 22 accept

# HTTP und HTTPS zulassen
sudo nft add rule inet filter input tcp dport { 80, 443 } accept

# Einen benutzerdefinierten Anwendungsport zulassen
sudo nft add rule inet filter input tcp dport 8080 accept

# Einen UDP-Port zulassen (z.B. WireGuard)
sudo nft add rule inet filter input udp dport 51820 accept

Nach Quelladresse einschraenken

SSH nur aus einem vertrauenswuerdigen Subnetz zulassen:

sudo nft add rule inet filter input ip saddr 192.168.1.0/24 tcp dport 22 accept

Ablehnen statt Verwerfen

Verwerfen (drop) sendet keine Antwort; Ablehnen (reject) sendet einen ICMP-Fehler zurueck. Fuegen Sie ein reject als letzte Regel fuer saubereres Netzwerkverhalten hinzu:

sudo nft add rule inet filter input reject with icmpx type port-unreachable

Den vollstaendigen Regelsatz anzeigen

sudo nft list ruleset

Beispielausgabe:

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        iif "lo" accept
        ct state invalid drop
        ip protocol icmp accept
        ip6 nexthdr ipv6-icmp accept
        tcp dport 22 accept
        tcp dport { 80, 443 } accept
        reject with icmpx type port-unreachable
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}

NAT-Konfiguration

nftables behandelt NAT ueber eine dedizierte Tabelle mit Prerouting- und Postrouting-Ketten.

NAT-Tabelle und Ketten erstellen

sudo nft add table inet nat
sudo nft add chain inet nat prerouting { type nat hook prerouting priority -100 \; }
sudo nft add chain inet nat postrouting { type nat hook postrouting priority 100 \; }

Source NAT (Masquerade)

Maskieren Sie ausgehenden Verkehr eines internen Netzwerks ueber das oeffentliche Interface des Servers. Dies ist ueblich fuer Router und VPN-Gateways:

sudo nft add rule inet nat postrouting oif "eth0" masquerade

Fuer ein bestimmtes Quell-Subnetz:

sudo nft add rule inet nat postrouting ip saddr 10.0.0.0/24 oif "eth0" masquerade

Statisches SNAT

Wenn Ihr Server eine statische oeffentliche IP hat und Sie die Quelladresse explizit definieren moechten:

sudo nft add rule inet nat postrouting ip saddr 10.0.0.0/24 oif "eth0" snat to 203.0.113.1

Destination NAT (Portweiterleitung)

Leiten Sie eingehenden Verkehr auf einem Port an einen internen Host weiter:

# Port 8080 an internen Server 10.0.0.50:80 weiterleiten
sudo nft add rule inet nat prerouting iif "eth0" tcp dport 8080 dnat to 10.0.0.50:80

Vergessen Sie nicht, den weitergeleiteten Verkehr in Ihrer Filter-Tabelle zuzulassen:

sudo nft add rule inet filter forward ip daddr 10.0.0.50 tcp dport 80 accept
sudo nft add rule inet filter forward ct state established,related accept

IP-Weiterleitung aktivieren

NAT erfordert, dass die IP-Weiterleitung im Kernel aktiviert ist:

sudo sysctl -w net.ipv4.ip_forward=1

Persistent machen:

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.d/99-nftables.conf
sudo sysctl -p /etc/sysctl.d/99-nftables.conf

Ratenbegrenzung und Verbindungsverfolgung

Eingehende Verbindungen begrenzen

Schuetzen Sie sich vor Brute-Force-Angriffen durch Begrenzung der Verbindungsrate. Zum Beispiel SSH auf 5 neue Verbindungen pro Minute pro Quell-IP begrenzen:

sudo nft add rule inet filter input tcp dport 22 ct state new limit rate 5/minute accept

Fuer eine Burst-Toleranz (kurze Spitzen ueber der Rate erlauben):

sudo nft add rule inet filter input tcp dport 22 ct state new limit rate 5/minute burst 10 packets accept

Pro-Quell-Ratenbegrenzung mit Meters

Meters (frueher dynamische Sets genannt) ermoeglichen eine Ratenbegrenzung pro Quell-IP:

sudo nft add rule inet filter input tcp dport 22 ct state new meter ssh-rate { ip saddr limit rate 3/minute burst 5 packets } accept

Dies begrenzt jede einzelne Quell-IP auf 3 neue SSH-Verbindungen pro Minute mit einem Burst von 5 Paketen.

Verbindungsverfolgungszustaende

nftables verwendet das Conntrack-Subsystem fuer zustandsbehaftete Filterung. Verfuegbare Zustaende:

ZustandBeschreibung
newErstes Paket einer neuen Verbindung
establishedTeil einer bereits bestehenden Verbindung
relatedZugehoerig zu einer bestehenden Verbindung (z.B. FTP-Datenkanal)
invalidKeiner bekannten Verbindung zugeordnet
untrackedExplizit von Conntrack uebergangen

ICMP-Flood begrenzen

sudo nft add rule inet filter input ip protocol icmp limit rate 10/second burst 20 packets accept
sudo nft add rule inet filter input ip protocol icmp drop

Sets und Maps

Sets und Maps sind eine der leistungsfaehigsten Funktionen von nftables und ermoeglichen effizientes Matching gegen grosse Gruppen von Werten, ohne einzelne Regeln schreiben zu muessen.

Anonyme Sets

Anonyme Sets werden inline innerhalb einer Regel definiert:

sudo nft add rule inet filter input tcp dport { 22, 80, 443, 8080 } accept

Benannte Sets

Benannte Sets werden separat definiert und koennen dynamisch aktualisiert werden, ohne die Regeln zu aendern, die sie referenzieren:

# Ein benanntes Set fuer erlaubte TCP-Ports erstellen
sudo nft add set inet filter allowed_ports { type inet_service \; }

# Elemente zum Set hinzufuegen
sudo nft add element inet filter allowed_ports { 22, 80, 443, 8080 }

# Das Set in einer Regel verwenden
sudo nft add rule inet filter input tcp dport @allowed_ports accept

Das Set aktualisieren, ohne die Regel zu aendern:

# Einen neuen Port hinzufuegen
sudo nft add element inet filter allowed_ports { 3000 }

# Einen Port entfernen
sudo nft delete element inet filter allowed_ports { 8080 }

IP-Adress-Sets

# Ein Set fuer blockierte IPs erstellen
sudo nft add set inet filter blocked_ips { type ipv4_addr \; }

# Das Set befuellen
sudo nft add element inet filter blocked_ips { 203.0.113.100, 198.51.100.50, 192.0.2.75 }

# Verkehr von blockierten IPs verwerfen
sudo nft add rule inet filter input ip saddr @blocked_ips drop

Sets mit Zeitlimits (automatisch ablaufende Eintraege)

Erstellen Sie Sets, bei denen Eintraege automatisch ablaufen:

sudo nft add set inet filter temp_block { type ipv4_addr \; timeout 1h \; }
sudo nft add element inet filter temp_block { 203.0.113.100 timeout 30m }
sudo nft add rule inet filter input ip saddr @temp_block drop

Maps fuer Verdikt-Lookups

Maps verknuepfen einen Schluessel mit einem Verdikt und ermoeglichen effiziente Entscheidungen pro Wert:

# Eine Verdikt-Map fuer portbasierte Entscheidungen erstellen
sudo nft add map inet filter port_policy { type inet_service : verdict \; }
sudo nft add element inet filter port_policy { 22 : accept, 80 : accept, 443 : accept, 23 : drop }

# Die Map in einer Regel verwenden
sudo nft add rule inet filter input tcp dport vmap @port_policy

Verkettete Sets

Gleichzeitiges Matching auf mehreren Feldern:

# Ein Set erstellen, das IP + Port-Kombinationen matched
sudo nft add set inet filter allowed_access { type ipv4_addr . inet_service \; }
sudo nft add element inet filter allowed_access { 10.0.1.20 . 3306, 10.0.1.21 . 5432 }
sudo nft add rule inet filter input ip saddr . tcp dport @allowed_access accept

Protokollierung von Regeln

nftables bietet flexible Protokollierung zur Ueberwachung und zum Debuggen von Firewall-Regeln.

Einfache Protokollierung

Pakete vor dem Verwerfen protokollieren:

sudo nft add rule inet filter input tcp dport 23 log prefix \"Telnet attempt: \" drop

Protokollierung mit Ratenbegrenzung

Verhindern Sie Log-Ueberflutung durch Begrenzung der Protokollierungsrate:

sudo nft add rule inet filter input ct state invalid log prefix \"Invalid packet: \" limit rate 5/minute drop

Protokollierungsstufen

nftables unterstuetzt Standard-Syslog-Stufen:

sudo nft add rule inet filter input tcp dport 22 ct state new log prefix \"SSH connection: \" level info accept

Verfuegbare Stufen: emerg, alert, crit, err, warn, notice, info, debug.

Protokolle anzeigen

nftables-Protokolle werden in das Kernel-Log geschrieben. Zeigen Sie sie an mit:

sudo dmesg | grep "nft"
sudo journalctl -k --grep="Telnet attempt"

Fuer persistente Protokollierung konfigurieren Sie rsyslog, um nftables-Nachrichten in eine dedizierte Datei zu schreiben:

# /etc/rsyslog.d/10-nftables.conf
:msg, contains, "nft" /var/log/nftables.log

Starten Sie rsyslog neu:

sudo systemctl restart rsyslog

Migration von iptables

Wenn Sie bestehende iptables-Regeln haben, bietet nftables Werkzeuge zur Erleichterung der Migration.

Verwendung von iptables-translate

Der Befehl iptables-translate konvertiert einzelne iptables-Regeln in nft-Syntax:

iptables-translate -A INPUT -p tcp --dport 22 -j ACCEPT

Ausgabe:

nft add rule ip filter INPUT tcp dport 22 counter accept

Einen vollstaendigen Regelsatz uebersetzen

Exportieren Sie Ihre gesamte iptables-Konfiguration und uebersetzen Sie sie:

iptables-save > /tmp/iptables-rules.txt
iptables-restore-translate -f /tmp/iptables-rules.txt > /tmp/nftables-rules.nft

Pruefen Sie die uebersetzte Datei und laden Sie sie dann:

sudo nft -f /tmp/nftables-rules.nft

Ueberpruefung der Kompatibilitaetsschicht

Modernes Ubuntu verwendet iptables-nft als Standard-Backend. Pruefen Sie, welches Backend Ihr System verwendet:

update-alternatives --query iptables

Oder:

iptables --version

Wenn Sie nf_tables in der Ausgabe sehen, werden Ihre iptables-Befehle bereits intern in nftables uebersetzt.

Best Practices fuer die Migration

  1. Bestehende Regeln exportieren — Sichern Sie Ihre aktuellen iptables-Regeln, bevor Sie beginnen
  2. Uebersetzen und ueberpruefen — Verwenden Sie iptables-restore-translate und pruefen Sie die Ausgabe sorgfaeltig
  3. In einer Nicht-Produktionsumgebung testen — Wenden Sie die uebersetzten Regeln zuerst auf einem Testserver an
  4. Alte Regeln bereinigen — Sobald die nft-Regeln bestaetigt sind, bereinigen Sie iptables mit iptables -F
  5. iptables-Dienst deaktivieren — Stoppen und deaktivieren Sie den iptables-Dienst, um Konflikte zu vermeiden
  6. nftables-Dienst aktivieren — Stellen Sie sicher, dass der nftables-Dienst fuer die Persistenz aktiviert ist

Regelsaetze aus Dateien laden

Fuer Produktionsumgebungen ist die Verwaltung Ihres Regelsatzes in einer Datei der empfohlene Ansatz. Hier ist ein vollstaendiges Konfigurationsbeispiel:

#!/usr/sbin/nft -f

# Bestehende Regeln bereinigen
flush ruleset

# Variablen definieren
define WAN_IF = eth0
define LAN_IF = eth1
define LAN_NET = 10.0.0.0/24
define ALLOWED_TCP = { 22, 80, 443 }

table inet filter {
    set blocked_ips {
        type ipv4_addr
        elements = { 203.0.113.100, 198.51.100.50 }
    }

    chain input {
        type filter hook input priority 0; policy drop;

        # Verbindungsverfolgung
        ct state established,related accept
        ct state invalid drop

        # Loopback
        iif lo accept

        # Blockierte IPs verwerfen
        ip saddr @blocked_ips drop

        # ICMP
        ip protocol icmp limit rate 10/second accept
        ip6 nexthdr ipv6-icmp limit rate 10/second accept

        # Erlaubte Dienste mit Ratenbegrenzung fuer SSH
        tcp dport 22 ct state new limit rate 5/minute burst 10 packets accept
        tcp dport { 80, 443 } accept

        # Endgueltiges Ablehnen
        reject with icmpx type port-unreachable
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
        ct state established,related accept
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Speichern Sie dies in /etc/nftables.conf und laden Sie es:

sudo nft -f /etc/nftables.conf

Ueberpruefen:

sudo nft list ruleset

nft-Befehlsreferenz

BefehlBeschreibung
nft list rulesetDen vollstaendigen Regelsatz anzeigen
nft list tablesAlle Tabellen auflisten
nft list table inet filterRegeln einer bestimmten Tabelle anzeigen
nft list chainsAlle Ketten auflisten
nft list chain inet filter inputRegeln einer bestimmten Kette anzeigen
nft list setsAlle benannten Sets auflisten
nft add table inet <name>Eine neue Tabelle erstellen
nft delete table inet <name>Eine Tabelle und ihren gesamten Inhalt loeschen
nft flush table inet <name>Alle Regeln aus einer Tabelle entfernen
nft add chain inet <tabelle> <kette> { type filter hook input priority 0 \; }Eine Basiskette erstellen
nft add rule inet <tabelle> <kette> <ausdruck> <verdikt>Eine Regel am Ende einer Kette hinzufuegen
nft insert rule inet <tabelle> <kette> <ausdruck> <verdikt>Eine Regel am Anfang einer Kette einfuegen
nft delete rule inet <tabelle> <kette> handle <n>Eine Regel anhand ihrer Handle-Nummer loeschen
nft add set inet <tabelle> <name> { type <typ> \; }Ein benanntes Set erstellen
nft add element inet <tabelle> <name> { <elemente> }Elemente zu einem Set hinzufuegen
nft flush rulesetAlle Tabellen, Ketten und Regeln entfernen
nft -f <datei>Einen Regelsatz aus einer Datei laden
nft monitorAenderungen am Regelsatz in Echtzeit ueberwachen

Fehlerbehebung

Regeln werden nicht wirksam

Ueberpruefen Sie, ob der Regelsatz geladen ist:

sudo nft list ruleset

Pruefen Sie, ob Ihre Ketten an die richtigen Hooks angeschlossen sind und die erwartete Prioritaet haben:

sudo nft list chains

Stellen Sie sicher, dass keine widerspruechlichen iptables-Regeln vorhanden sind:

sudo iptables -L -n

SSH-Zugang verloren

Wenn Sie nach dem Anwenden von Regeln den SSH-Zugang verlieren:

  1. Greifen Sie ueber eine Konsole auf den Server zu (Web-Konsole des Cloud-Anbieters, KVM oder physischer Zugang)
  2. Bereinigen Sie alle Regeln: sudo nft flush ruleset
  3. Ueberpruefen Sie, ob der Zugang wiederhergestellt ist
  4. Erstellen Sie Ihre Regeln neu und stellen Sie sicher, dass SSH erlaubt ist, bevor Sie eine Drop-Policy setzen

Debugging des Regel-Matchings

Fuegen Sie Zaehler zu Regeln hinzu, um zu sehen, welche Verkehr matchen:

sudo nft add rule inet filter input tcp dport 22 counter accept

Zaehler anzeigen:

sudo nft list chain inet filter input

Die Zaehlerausgabe zeigt gematchte Pakete und Bytes:

tcp dport 22 counter packets 150 bytes 12000 accept

Regeln bleiben nach dem Neustart nicht erhalten

Stellen Sie sicher, dass der nftables-Dienst aktiviert ist:

sudo systemctl enable nftables

Speichern Sie den aktuellen Regelsatz:

sudo nft list ruleset | sudo tee /etc/nftables.conf

Ueberpruefen Sie, ob die Konfigurationsdatei syntaktisch gueltig ist:

sudo nft -c -f /etc/nftables.conf

Kernel-Modul-Probleme

Wenn nft-Befehle fehlschlagen, ueberpruefen Sie, ob die erforderlichen Kernel-Module geladen sind:

lsmod | grep nf_tables

Laden Sie sie bei Bedarf manuell:

sudo modprobe nf_tables
sudo modprobe nft_chain_nat

Zusammenfassung

nftables ist der definitive Ersatz fuer iptables auf modernen Linux-Systemen. Seine einheitliche Befehlsschnittstelle, native Set- und Map-Unterstuetzung, atomarer Regelersatz und sauberere Syntax machen es zu einer deutlichen Verbesserung gegenueber den veralteten Werkzeugen. Ob Sie eine einfache Host-Firewall oder ein komplexes NAT-Gateway mit Ratenbegrenzung und dynamischen Sets einrichten — nftables bietet die Werkzeuge, um effiziente und wartbare Firewall-Konfigurationen zu erstellen.

Wichtige Erkenntnisse:

  • Verwenden Sie die inet-Familie, um sowohl IPv4 als auch IPv6 in einer einzigen Tabelle zu behandeln
  • Lassen Sie immer bestehende/zugehoerige Verbindungen und Loopback-Verkehr zuerst zu
  • Nutzen Sie benannte Sets zur Verwaltung dynamischer Listen von IPs und Ports, ohne Regeln umschreiben zu muessen
  • Verwenden Sie Ratenbegrenzung bei Authentifizierungsdiensten wie SSH, um Brute-Force-Angriffe abzumildern
  • Verwalten Sie Ihren Regelsatz in einer Datei und laden Sie ihn atomar mit nft -f
  • Aktivieren Sie den systemd-Dienst nftables fuer Persistenz ueber Neustarts hinweg
  • Verwenden Sie iptables-translate und iptables-restore-translate zur Migration bestehender Regelsaetze

Fuer eine komfortablere Firewall-Verwaltung unter Ubuntu lesen Sie unseren Leitfaden zur Konfiguration der UFW-Firewall auf Ubuntu Server. Um Ihre Firewall mit sicherem Fernzugriff zu ergaenzen, lesen Sie SSH-Haertung fuer Linux-Server.