Installation und Konfiguration von nftables unter Linux
nftables ist ein modernes Framework zur Paketfilterung in Linux, das iptables ablöst. Es bietet einen einheitlichen und leistungsstarken Ansatz zur Verwaltung von Firewall-Regeln für mehrere Protokolle wie IPv4, IPv6 und ARP. Durch die Installation und Einrichtung von nftables profitieren Sie von einer besseren Performance und einer vereinfachten, konsolidierten Oberfläche im Vergleich zum mehrstufigen Tabellenansatz von iptables.
In dieser Anleitung wird beschrieben, wie Sie nftables unter Linux installieren und einrichten, grundlegende Firewall-Regeln konfigurieren, den Netzwerkverkehr steuern und gängige Sicherheitsrichtlinien umsetzen.
Voraussetzungen
- Zugriff auf ein Linux-basiertes System mit einem Nicht-Root-Benutzer mit sudo-Rechten.
- Grundkenntnisse zu Netzwerkprotokollen und der Verwaltung von Firewall-Regeln.
nftables im Vergleich zu iptables
iptables war lange Zeit das Standard-Tool für Firewalls unter Linux, weist jedoch Schwächen auf, darunter eine komplizierte Regelstruktur, geringere Effizienz und die Notwendigkeit, mehrere Werkzeuge für unterschiedliche Protokolle (IPv4, IPv6, ARP usw.) zu nutzen. nftables wurde entwickelt, um diese Probleme zu lösen, und bietet mehr Funktionalität, bessere Leistung und einfachere Bedienung.
Die folgende Tabelle zeigt die wichtigsten Unterschiede in Funktionalität, Performance und Benutzerfreundlichkeit und verdeutlicht, warum nftables die bevorzugte Wahl ist.
Funktion | iptables | nftables |
---|---|---|
Paketfilterung | Erfordert mehrere Tools für verschiedene Protokolle (iptables, ip6tables, arptables) | Verwendet einen einheitlichen Ansatz mit benannten Tabellen und Chains |
Regelsyntax | Komplexe Chain-basierte Regeln mit vielen Einträgen | Moderne, tabellenbasierte Syntax für einfachere Regeldefinition |
Performance | Regeln werden nacheinander verarbeitet, was bei vielen Regeln verlangsamt | Optimierte Auswertung reduziert den Verarbeitungsaufwand |
Atomare Regeländerungen | Gesamte Regelsets müssen gelöscht und neu geladen werden | Unterstützt atomare Updates ohne Unterbrechung |
Logging | Verwendet ältere LOG- und ULOG-Frameworks | Enthält integriertes Logging mit erweitertem Tracing (meta nftrace, log) |
Verbindungsverfolgung | Benötigt externe conntrack-Module | Integriert Connection Tracking direkt |
Multi-Protokoll-Unterstützung | Separate Befehle für jedes Protokoll | Einheitliche Befehle für alle Protokolle |
Ressourcenverbrauch | Duplizierte Regeln führen zu höherem Speicherbedarf | Ein gemeinsames Regelset sorgt für effiziente Speichernutzung |
Scripting & Automatisierung | Abhängig von Shell-Skripten und manueller Regelverwaltung | Unterstützt JSON-basierte Regeln und direkte Skripting-Optionen |
Kompatibilität | Läuft auf allen Distributionen, jedoch mit veraltetem Design | Nativ auf modernen Systemen mit iptables-Kompatibilität |
Installation von nftables unter Linux
Befolgen Sie die nachstehenden Anweisungen entsprechend Ihrer Linux-Distribution.
Ubuntu und Debian
Aktualisieren Sie die Paketliste:
$ sudo apt update
Installieren Sie nftables mit APT:
$ sudo apt install nftables -y
Fedora, CentOS und RHEL
Aktualisieren Sie den DNF-Paketindex:
$ sudo dnf update
Installieren Sie nftables mit DNF:
$ sudo dnf install -y nftables
Arch Linux
Installieren Sie nftables mit Pacman:
$ sudo pacman -S nftables
Befehls-Syntax von nft
Die grundlegende Syntax lautet:
nft [ -nNscaeSupyjtT ] [ -I Verzeichnis ] [ -f Dateiname | -i | Befehl ... ]
- -n: Zeigt Regelnummern an.
- -N: Detaillierte Regelausgabe.
- -s: Zeigt Statistiken.
- -c: Listet Chain-Namen auf.
- -a: Zeigt Adressfamilie und Protokoll.
- -e: Erweiterte Regeldetails.
- -S: Gibt das gesamte Regelwerk aus.
- -u: Aktiviert den Update-Modus.
- -p: Ausgabe im parsbaren Format.
- -y: Detaillierte Objekttypen anzeigen.
- -j: Ausgabe im JSON-Format.
- -t: Ausgabe im Tabellenformat.
- -T: Zeigt tokenisierte Ausgabe.
- -I Verzeichnis: Konfigurationsverzeichnis angeben.
- -f Dateiname: Regelwerk aus Datei laden.
- -i: Interaktiver Modus.
- Befehl …: Argumente zur Verwaltung von nftables-Regeln.
Verwaltung des nftables-Systemdienstes
Der nftables-Dienst verwaltet Ihre Firewall-Regeln und stellt sicher, dass sie nach Neustarts bestehen bleiben. So aktivieren und starten Sie den Dienst:
Aktivieren Sie den Dienst beim Booten:
$ sudo systemctl enable nftables
Starten Sie den Dienst:
$ sudo systemctl start nftables
Überprüfen Sie den Status des Dienstes:
$ sudo systemctl status nftables
Beispielausgabe:
● nftables.service - Netfilter Tables
Loaded: loaded (/usr/lib/systemd/system/nftables.service; enabled; preset: disabled)
Active: active (exited) since Mon 2025-03-31 17:52:35 UTC; 5s ago
Docs: man:nft(8)
Process: 1838 ExecStart=/sbin/nft -f /etc/sysconfig/nftables.conf (code=exited, status=0/SUCCESS)
Main PID: 1838 (code=exited, status=0/SUCCESS)
CPU: 11ms
Mar 31 17:52:35 nftables-03 systemd[1]: Starting Netfilter Tables...
Mar 31 17:52:35 nftables-03 systemd[1]: Finished Netfilter Tables.
Tabellen, Chains und Richtlinien in nftables
In nftables werden Regeln in Tabellen gruppiert, die Chains enthalten, welche festlegen, wie der Datenverkehr verarbeitet wird. Jede Chain ist einem Hook (INPUT, OUTPUT, FORWARD) zugeordnet, der bestimmt, wann sie ausgeführt wird. Zusätzlich besitzen Chains Richtlinien, die festlegen, welche Standardaktion erfolgt, wenn kein Paket einer Regel entspricht.
nftables unterstützt mehrere Adressfamilien für unterschiedliche Netzwerkprotokolle:
- inet: Einheitlich für IPv4 und IPv6.
- ip: Nur IPv4-Filterung.
- ip6: Nur IPv6-Filterung.
- arp: Filterung von ARP-Paketen.
- bridge: Paketfilterung auf Ethernet-Bridges.
- netdev: Filterung auf Ebene der Netzwerkschnittstelle.
Chain Hooks
- input: Steuert Pakete, die an die lokale Maschine gerichtet sind.
- output: Verwaltet Pakete, die die Maschine verlassen.
- forward: Behandelt Pakete, die durch die Maschine weitergeleitet werden.
Richtlinien
Richtlinien legen fest, welche Standardaktion erfolgt, wenn keine Regel zutrifft:
- policy accept: Erlaubt allen nicht übereinstimmenden Datenverkehr (praktisch für Tests).
- policy drop: Verwirft nicht passende Pakete (sicher, üblich im Produktivbetrieb).
- policy reject: Sendet eine Zurückweisung (zeigt die Existenz des Servers an).
Warnung: Verwenden Sie accept
nicht als Standardrichtlinie im Produktivbetrieb, da dadurch sämtlicher Datenverkehr zugelassen wird, sofern er nicht explizit blockiert wird.
Standardkonfiguration von nftables verwalten
Vorhandene nftables-Tabellen anzeigen:
$ sudo nft list tables
Beispielausgabe:
table ip filter
table ip6 filter
Standardkonfigurationsdatei von nftables anzeigen:
$ cat /etc/nftables.conf
Beispielinhalt:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy accept;
}
chain forward {
type filter hook forward priority 0; policy accept;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
Grundlegende nftables-Firewall-Regeln konfigurieren
Initiale Tabelle und Chains erstellen
Erstellen Sie eine Tabelle für IPv4- und IPv6-Datenverkehr:
$ sudo nft add table inet my_table
Eingangs-Chain mit Standardrichtlinie accept
hinzufügen:
$ sudo nft add chain inet my_table input { type filter hook input priority 0 \; }
Forward-Chain mit Standardrichtlinie accept
hinzufügen:
$ sudo nft add chain inet my_table forward { type filter hook forward priority 0\; }
Bestehende Verbindungen erlauben:
$ sudo nft add rule inet my_table input ct state established,related accept
Regeln hinzufügen, anzeigen und löschen
Eine bestimmte IP-Adresse blockieren:
$ sudo nft add rule inet my_table input ip saddr 192.0.2.10 drop
Alle Regeln anzeigen:
$ sudo nft list ruleset
Regeln in der Input-Chain auflisten:
$ sudo nft list chain inet my_table input
Beispielausgabe:
table inet my_table {
chain input {
type filter hook input priority filter; policy accept;
ct state established,related accept
ip saddr 192.0.2.10 drop
}
}
Regel über Handle-Nummer löschen:
$ sudo nft delete rule inet my_table input handle 0
Wichtige Sicherheitsregeln implementieren
SSH (Port 22) erlauben:
$ sudo nft add rule inet my_table input tcp dport 22 accept
HTTP (Port 80) erlauben:
$ sudo nft add rule inet my_table input tcp dport 80 accept
HTTPS (Port 443) erlauben:
$ sudo nft add rule inet my_table input tcp dport 443 accept
Allen übrigen eingehenden Datenverkehr verwerfen:
$ sudo nft add rule inet my_table input ip daddr 0.0.0.0/0 counter drop
NAT und Portweiterleitung aktivieren
Bearbeiten Sie /etc/sysctl.conf
, um IPv4-Forwarding zu aktivieren:
net.ipv4.ip_forward=1
Änderungen anwenden:
$ sudo sysctl -p
NAT-Tabelle und Postrouting-Chain erstellen:
$ sudo nft add table nat
$ sudo nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
Masquerading-Regel hinzufügen:
$ sudo nft add rule nat postrouting ip saddr 192.0.2.0/24 oif enp1s0 masquerade
Regeln dauerhaft über Neustarts speichern
Aktuelle Regeln in die Konfiguration sichern:
$ sudo nft list ruleset | sudo tee /etc/nftables.conf
Gespeicherte Regeln anwenden:
$ sudo nft -f /etc/nftables.conf
nftables-Dienst neu starten:
$ sudo systemctl restart nftables
Erweiterte Regelkonfiguration
SSH-Verbindungen begrenzen:
$ sudo nft add rule inet my_table input tcp dport 22 limit rate 3/minute accept
Portweiterleitung einrichten:
$ sudo nft add chain ip nat prerouting { type nat hook prerouting priority 0 \; }
$ sudo nft add rule nat prerouting tcp dport 80 dnat to 192.0.2.10
Logging für verworfene Pakete aktivieren:
$ sudo nft 'add rule inet my_table input log prefix "nftables-drop: " drop'
Alle Regeln löschen:
$ sudo nft flush ruleset
Warnung: Durch das Leeren werden sämtliche Regeln entfernt und die Firewall wird zurückgesetzt.
Fazit
Sie haben nftables unter Linux installiert und konfiguriert, Tabellen erstellt, Richtlinien gesetzt und Regeln verwaltet. nftables modernisiert die Paketfilterung durch die einheitliche Behandlung von IPv4/IPv6, atomare Updates und eine höhere Leistung. Mit integriertem Connection Tracking und Logging wird die Verwaltung der Netzwerksicherheit erheblich vereinfacht. Weitere Details und fortgeschrittene Konfigurationen finden Sie im offiziellen nftables-Wiki.