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:
| Merkmal | iptables | nftables |
|---|---|---|
| Befehl | iptables, ip6tables, arptables, ebtables | nft (einzelnes Werkzeug) |
| Adressfamilien | Separates Werkzeug pro Familie | Einheitliche inet-Familie fuer IPv4/IPv6 |
| Syntax | Flag-basiert (-A, -j, -p) | Strukturierte Grammatik (add rule ... accept) |
| Sets | Erfordert ipset-Erweiterung | Native Sets und Maps integriert |
| Regelaktualisierungen | Lineare Einfuegung/Loeschung | Atomarer Regelersatz ueber -f |
| Vordefinierte Ketten | Obligatorische eingebaute Ketten (INPUT, OUTPUT, FORWARD) | Keine Standardwerte; Sie erstellen Tabellen und Ketten nach Bedarf |
| Leistung | Lineare Regelauswertung | Optimierte Set-Lookups, binaere Ausdruecke |
| Kernel-Schnittstelle | xtables (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:
| Familie | Beschreibung |
|---|---|
ip | Nur IPv4-Verkehr |
ip6 | Nur IPv6-Verkehr |
inet | Sowohl IPv4 als auch IPv6 (empfohlen) |
arp | ARP-Protokoll |
bridge | Bridge-Level-Verkehr |
netdev | Eingehender 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:
| Zustand | Beschreibung |
|---|---|
new | Erstes Paket einer neuen Verbindung |
established | Teil einer bereits bestehenden Verbindung |
related | Zugehoerig zu einer bestehenden Verbindung (z.B. FTP-Datenkanal) |
invalid | Keiner bekannten Verbindung zugeordnet |
untracked | Explizit 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
- Bestehende Regeln exportieren — Sichern Sie Ihre aktuellen iptables-Regeln, bevor Sie beginnen
- Uebersetzen und ueberpruefen — Verwenden Sie
iptables-restore-translateund pruefen Sie die Ausgabe sorgfaeltig - In einer Nicht-Produktionsumgebung testen — Wenden Sie die uebersetzten Regeln zuerst auf einem Testserver an
- Alte Regeln bereinigen — Sobald die nft-Regeln bestaetigt sind, bereinigen Sie iptables mit
iptables -F - iptables-Dienst deaktivieren — Stoppen und deaktivieren Sie den iptables-Dienst, um Konflikte zu vermeiden
- 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
| Befehl | Beschreibung |
|---|---|
nft list ruleset | Den vollstaendigen Regelsatz anzeigen |
nft list tables | Alle Tabellen auflisten |
nft list table inet filter | Regeln einer bestimmten Tabelle anzeigen |
nft list chains | Alle Ketten auflisten |
nft list chain inet filter input | Regeln einer bestimmten Kette anzeigen |
nft list sets | Alle 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 ruleset | Alle Tabellen, Ketten und Regeln entfernen |
nft -f <datei> | Einen Regelsatz aus einer Datei laden |
nft monitor | Aenderungen 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:
- Greifen Sie ueber eine Konsole auf den Server zu (Web-Konsole des Cloud-Anbieters, KVM oder physischer Zugang)
- Bereinigen Sie alle Regeln:
sudo nft flush ruleset - Ueberpruefen Sie, ob der Zugang wiederhergestellt ist
- 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-translateundiptables-restore-translatezur 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.