Security & Hardening

nftables, iptables oder firewalld: Welche Linux-Firewall du heute nutzen solltest

Neue Systeme setzt du auf nftables auf, das ist der Standard aller aktuellen Distributionen. firewalld ist die richtige Wahl, wenn mehrere Personen die Regeln pflegen, und gewachsene iptables-Regelwerke migrierst du geplant statt im laufenden Betrieb.

6 Kapitel mit allen Befehlen
Zwei Security-Fachleute prüfen ein Dashboard im Betriebsraum
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Seit 1997 am Markt Präsenz & Live-Online 4,9 aus 503 Google-Bewertungen Auch Inhouse für dein Team
Worum es geht

Warum die Firewall-Frage unter Linux gerade wieder auf dem Tisch liegt

Auf aktuellen Enterprise-Distributionen ist nftables das Paketfilter-Framework im Kernel, und die vertrauten iptables-Kommandos sind meist nur noch ein Frontend darauf. Wer iptables -L aufruft, spricht in der Regel mit iptables-nft und sieht deshalb ein Bild, das nicht mehr zu dem passt, was nft list ruleset ausgibt. Genau an dieser Stelle entstehen die meisten Missverständnisse im Betrieb, weil zwei Werkzeuge dieselbe Wahrheit unterschiedlich darstellen.

Dazu kommt die Abstraktionsfrage. firewalld verwaltet Zonen, Services und Policies und schreibt sie nach nftables, ufw fährt einen deutlich schlankeren Ansatz für einzelne Hosts, und pures nft gibt dir die volle Kontrolle über Families, Hooks, Prioritäten, Sets und Verdict Maps. Alle drei sind legitim, sie passen nur zu unterschiedlichen Umgebungen. Ein Kubernetes-Node oder ein Docker-Host bringt zusätzlich eigene Regeln mit, die von außen eingehängt werden und mit einem handgeschriebenen Regelwerk kollidieren können.

Typische Fehler sind gut vorhersagbar: Legacy- und nft-Regelwerke laufen parallel, weil iptables-legacy noch aktiv ist und beide Sätze am selben Hook hängen. Regeln werden mit firewall-cmd zur Laufzeit gesetzt und nach dem Reboot fehlen sie, weil --permanent oder --runtime-to-permanent vergessen wurde. Oder es werden Direct Rules in firewalld gepflegt, die die Zonenlogik umgehen und beim nächsten Upgrade niemand mehr versteht. Fehlende Conntrack-Regeln für ct state established,related runden das Bild ab und sorgen für schwer greifbare Verbindungsabbrüche.

Miniatur-Szene: Serverschrank in einer Schutzhülle, Vorhängeschlösser und ein Schild davor
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt

Von iptables nach nftables in sechs Schritten

  1. 01 Backend prüfen: legacy oder nft
  2. 02 Regelwerk mit iptables-save sichern
  3. 03 Mit iptables-restore-translate übersetzen
  4. 04 Auf inet-Tabelle und Sets umbauen
  5. 05 Werkzeug festlegen: nft, firewalld oder ufw
  6. 06 Counter prüfen, Reboot-Test, dokumentieren
Was du mitnimmst

So triffst du die Entscheidung und migrierst dein Regelwerk

Der Weg von einem historisch gewachsenen iptables-Setup zu einem wartbaren Firewall-Betrieb ist gut planbar, wenn du Backend, Werkzeug und Regelinhalt getrennt betrachtest. Diese Punkte bilden die Reihenfolge ab, die sich in der Praxis bewährt hat.

Backend feststellen, bevor du irgendetwas änderst

Prüfe mit iptables --version und update-alternatives --display iptables beziehungsweise alternatives --display iptables, ob du auf der Legacy- oder auf der nft-Variante unterwegs bist. Ein nft list ruleset zeigt dir anschließend, was der Kernel tatsächlich auswertet. Erst wenn beide Bilder zusammenpassen, hast du eine belastbare Ausgangslage.

Bestehende Regeln maschinell übersetzen

Mit iptables-save sicherst du den Ist-Zustand, iptables-restore-translate -f rules.v4 erzeugt daraus nftables-Syntax und iptables-translate hilft bei einzelnen Zeilen. Die Übersetzung ist ein guter Startpunkt, aber kein fertiges Regelwerk: Sie bildet die alte Ketten-Struktur eins zu eins ab, statt die Möglichkeiten von nftables zu nutzen.

Die nftables-Konzepte wirklich verwenden

Eine table inet filter deckt IPv4 und IPv6 gemeinsam ab, Base Chains bekommen Typ, Hook, Priority und Policy, und Sets sowie Verdict Maps ersetzen lange Ketten aus Einzelregeln. Damit schrumpfen Regelwerke deutlich und werden schneller nachvollziehbar, weil Ports und Netze als benannte Objekte gepflegt werden.

Abstraktionsebene bewusst wählen

firewalld passt dort, wo Zonen, wechselnde Interfaces und Rollen im Spiel sind, etwa auf RHEL- oder SLES-Systemen mit vielen Diensten. ufw ist eine sinnvolle Wahl für einzelne Ubuntu-Hosts mit überschaubarem Regelbedarf. Pures nft lohnt sich auf Routern, Gateways und überall dort, wo du Regeln versioniert ausrollst und exakte Kontrolle über Hooks und Reihenfolge brauchst.

Container und Cluster mitdenken

Docker hängt eigene Regeln ein und stellt dafür die Kette DOCKER-USER bereit, kube-proxy bringt inzwischen ein nftables-Backend mit. Wenn du eigene Regeln schreibst, plane die Priorität deiner Chains so, dass sie sich mit diesen automatisch erzeugten Regeln vertragen, statt sie zu überschreiben.

Rollout absichern und dokumentieren

Arbeite bei Remote-Systemen mit einem Rückfall-Timer oder einer zweiten Session, prüfe Treffer über Counter und Log-Regeln und lege das Regelwerk als Datei in die Konfigurationsverwaltung, zum Beispiel über Ansible. Ein Reboot-Test gehört zwingend dazu, damit Laufzeit- und Persistenzstand nicht auseinanderlaufen.

Tutorial

Vom gewachsenen Regelwerk zu einem nftables-Satz, den du noch lesen kannst

Die Reihenfolge entscheidet: erst feststellen, was tatsächlich aktiv ist, dann die Regeln maschinell übersetzen, danach von Hand in echte nftables-Strukturen bringen. Zum Schluss geht es um Container, die sich um deine Zonen nicht kümmern, und um einen Rollout, bei dem du dich nicht aussperrst.

01

Feststellen, was wirklich aktiv ist

Auf gewachsenen Systemen laufen erstaunlich oft zwei Firewall-Ebenen gleichzeitig. Bevor du eine einzige Regel anfasst, klärst du, welcher Dienst das Regelwerk besitzt.

Bestandsaufnahme in einem Durchgang
# Welche Dienste beanspruchen die Firewall für sich?
systemctl is-enabled nftables firewalld ufw iptables 2>/dev/null
systemctl is-active  nftables firewalld ufw 2>/dev/null

# Welches Backend spricht das iptables-Kommando?
sudo iptables -V                                # "(nf_tables)" oder "(legacy)"
sudo update-alternatives --display iptables     # Debian/Ubuntu
sudo alternatives --display iptables            # RHEL/Rocky/Alma

# Der wahre Zustand im Kernel
sudo nft list tables
sudo nft list ruleset | head -40

iptables -V ist der wichtigste Befehl dieses Kapitels. Auf allen aktuellen Distributionen ist iptables nur noch eine Übersetzungsschicht, die im Kernel nftables anspricht. Was iptables -S zeigt, ist deshalb immer nur ein Ausschnitt aus dem, was nft list ruleset ausgibt.

02

Bestehende Regeln sichern und übersetzen

Der Übersetzungsschritt ist reine Absicherung: Er beweist, dass beim Wechsel nichts verloren geht. Der lesbare Zustand entsteht erst danach von Hand.

Sicherung und maschinelle Übersetzung
# Immer zuerst: vollständige Sicherung mit Datum im Dateinamen
sudo iptables-save  > /root/fw-$(date +%F).v4
sudo ip6tables-save > /root/fw-$(date +%F).v6
sudo nft list ruleset > /root/nft-$(date +%F).nft

# Übersetzen: schreibt nach stdout und ändert nichts am laufenden System
sudo iptables-restore-translate  -f /root/fw-$(date +%F).v4 >  /root/uebersetzt.nft
sudo ip6tables-restore-translate -f /root/fw-$(date +%F).v6 >> /root/uebersetzt.nft

# Einzelne Regel im Vorbeigehen übersetzen
iptables-translate -A INPUT -p tcp --dport 22 -j ACCEPT

# Syntaxprüfung, ohne zu laden
sudo nft -c -f /root/uebersetzt.nft

iptables-restore-translate arbeitet Zeile für Zeile und erzeugt ein technisch korrektes, aber unleserliches Regelwerk mit genau denselben Wiederholungen wie vorher. Nimm das Ergebnis als Beleg der Vollständigkeit, nicht als Zielzustand.

Interessant wird die Datei beim Lesen: Jede Zeile, die eine einzelne IP-Adresse freigibt, ist ein Kandidat für ein benanntes Set. Jede Regel ohne Treffer ist ein Kandidat für die Mülltonne. Markiere beides direkt in der übersetzten Datei, bevor du das neue Regelwerk schreibst.

03

Das Regelwerk so schreiben, wie nftables gedacht ist

Der Gewinn liegt nicht in der neuen Syntax, sondern in drei Konzepten: eine gemeinsame Tabelle für IPv4 und IPv6, benannte Sets statt hundert Einzelregeln und Zähler, die zeigen, ob eine Regel überhaupt greift.

/etc/nftables.conf
#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    set admin_hosts {
        type ipv4_addr
        flags interval
        elements = { 10.10.0.0/24, 192.0.2.10 }
    }

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

        ct state established,related accept
        ct state invalid drop
        iif lo accept

        ip protocol icmp accept
        ip6 nexthdr icmpv6 accept

        tcp dport 22 ip saddr @admin_hosts counter accept
        tcp dport { 80, 443 } counter accept

        limit rate 5/minute burst 10 packets log prefix "nft-drop " level info
    }

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

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

Eine inet-Tabelle deckt IPv4 und IPv6 gemeinsam ab, du pflegst die Regeln also nur einmal. Die policy drop in der Eingangskette ist der eigentliche Schutz, alles davor sind Ausnahmen. Achte darauf, dass die Zeile mit ct state established,related ganz oben steht, sonst brechen Antwortpakete ab.

Das Regelwerk im Betrieb pflegen
# Adresse freischalten, ohne die Datei anzufassen
sudo nft add element inet filter admin_hosts { 198.51.100.7 }
sudo nft list set inet filter admin_hosts

# Greift eine Regel überhaupt? Zähler ansehen
sudo nft list chain inet filter input

# Gezielt löschen: erst das Handle ermitteln
sudo nft -a list chain inet filter input
sudo nft delete rule inet filter input handle 12

# Dauerhaft machen
# Die Datei ist die Quelle, ein roher Dump ueberschreibt sie ohne Flush-Zeile
# und laesst sich danach nicht mehr sauber laden. Deshalb mit Flush schreiben:
{ echo '#!/usr/sbin/nft -f'; echo 'flush ruleset'; sudo nft list ruleset; } | sudo tee /etc/nftables.conf > /dev/null     # Debian/Ubuntu
# RHEL/Rocky/Alma: /etc/sysconfig/nftables.conf bindet eigene Dateien per include ein
sudo systemctl enable --now nftables

Zähler sind das ehrlichste Aufräumwerkzeug: Eine Regel, deren Zähler nach Wochen noch auf null steht, wird nicht gebraucht. Beim Löschen über Handles gilt: Die Nummern ändern sich bei jedem Neuladen, ermittle sie also immer unmittelbar vorher.

04

firewalld, wenn mehrere Leute die Regeln pflegen

firewalld ist keine andere Firewall, sondern eine Verwaltungsebene über nftables. Sein Vorteil ist die Trennung zwischen laufender und dauerhafter Konfiguration, sein Preis eine Abstraktion, die sehr feingranulare Regelwerke sperrig macht.

Zonen statt Einzelregeln
sudo firewall-cmd --state
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --zone=public --list-all

# Interne Netze in eine eigene Zone, SSH ausschließlich dort
sudo firewall-cmd --permanent --zone=internal --add-source=10.10.0.0/24
sudo firewall-cmd --permanent --zone=internal --add-service=ssh
sudo firewall-cmd --permanent --zone=public   --remove-service=ssh
sudo firewall-cmd --permanent --zone=public   --add-service=https

# Prüfen, dann anwenden
sudo firewall-cmd --check-config
sudo firewall-cmd --reload

# Zur Laufzeit erprobte Regeln festschreiben
sudo firewall-cmd --runtime-to-permanent

Der Zweiklang aus Laufzeit- und Dauerkonfiguration ist der eigentliche Nutzen: Du probierst eine Regel ohne --permanent aus, und ein firewall-cmd --reload stellt den alten Zustand wieder her, falls du dich vertan hast. Erst --runtime-to-permanent schreibt fest.

05

Container und Cluster halten sich nicht an deine Zonen

Sobald eine Container-Laufzeit auf dem Host arbeitet, ist dein Regelwerk nicht mehr das einzige. Das ist der häufigste Grund für offene Ports, die in keiner Firewall-Anzeige auftauchen.

Wer schreibt hier noch Regeln?
sudo nft list tables
sudo nft list ruleset | grep -iE 'docker|netavark|kube|cni'
sudo iptables -t nat -S 2>/dev/null | grep -i docker | head

# Der sichere Weg, einen Container-Port zu veröffentlichen
docker run -d -p 127.0.0.1:8080:80 <image>

Auf einem Knoten mit Container-Laufzeit prüfst du nach jeder Änderung nft list ruleset im Ganzen, nicht nur deine eigene Tabelle. Sonst siehst du deine Regeln und übersiehst die, die jemand anderes im laufenden Betrieb erzeugt.

Podman legt seine Regeln über netavark ab und kann dabei ebenfalls nftables verwenden, rootless betriebene Container brauchen dagegen häufig gar keine Regel auf dem Host. Auf Kubernetes-Knoten kommt kube-proxy hinzu, das je nach Betriebsart iptables-, ipvs- oder nftables-Regeln erzeugt. Plane deine eigene Tabelle deshalb so, dass sie neben diesen Regeln funktioniert, statt sie überschreiben zu wollen.

06

Rollout mit Rückfahrkarte

Jede Firewall-Änderung an einem entfernten System ist ein Eingriff in genau den Weg, über den du arbeitest. Richte die Rücknahme ein, bevor du die Änderung lädst.

Die Rückfahrkarte vor der Änderung einrichten
# 1. Aktuellen Zustand sichern
{ echo 'flush ruleset'; sudo nft list ruleset; } > /root/fw-rollback.nft

# 2. Automatische Rücknahme in zehn Minuten einplanen
sudo systemd-run --on-active=10m --unit=fw-rollback \
  /usr/sbin/nft -f /root/fw-rollback.nft

# 3. Neues Regelwerk prüfen und erst dann laden
sudo nft -c -f /etc/nftables.conf && sudo nft -f /etc/nftables.conf

# 4. Aus einer ZWEITEN Sitzung testen, die alte offen lassen
ssh -v <benutzer>@<server>
ss -tulpen

# 5. Erst wenn alles läuft: Rücknahme abbestellen
sudo systemctl stop fw-rollback.timer

Schritt zwei ist die eigentliche Lebensversicherung. Sperrt dich das neue Regelwerk aus, stellt der Timer nach zehn Minuten den alten Zustand wieder her, ganz ohne Konsolenzugriff. Auf entfernten Systemen ohne Fernwartung ist das der Unterschied zwischen einer Schrecksekunde und einer Fahrt ins Rechenzentrum.

Vor dem Scharfschalten

  • Es gibt eine Sicherung des alten Regelwerks mit Datum im Dateinamen.Ohne Sicherung ist die einzige Rücknahme ein von Hand nachgebautes Regelwerk unter Zeitdruck. Genau dabei entstehen die Lücken, die anschließend jahrelang unbemerkt offen bleiben.
  • Das neue Regelwerk hat nft -c -f fehlerfrei durchlaufen.Eine Datei beginnt mit flush ruleset. Ein Tippfehler weiter unten hinterlässt damit ein System ganz ohne Regeln oder ganz ohne Erreichbarkeit.
  • Die Freigabe für den Verwaltungszugang steht vor allen Ablehnungen.Regeln werden von oben nach unten ausgewertet. Eine SSH-Freigabe unterhalb einer allgemeinen Ablehnung ist wirkungslos, sieht in der Datei aber völlig richtig aus.
  • Getestet wurde aus einer zweiten Sitzung, die alte blieb offen.Eine bestehende Verbindung überlebt eine Regeländerung wegen der Zustandsverfolgung oft noch. Ob sich neue Verbindungen aufbauen lassen, sagt sie dir nicht.
  • Die Regeldateien liegen versioniert im Repository, nicht nur auf dem Server.Wer später beantworten soll, warum ein Port offen ist, braucht die Historie mit Begründung. Auf dem Server steht nur der aktuelle Zustand ohne jeden Kontext.
Gut zu wissen

Häufige Fragen zu nftables, iptables und firewalld

Noch etwas offen? Wir sind ohne Warteschleife für dich da.

Frag uns direkt
Ist iptables abgekündigt?
Das Kommando iptables gibt es weiterhin, aber auf aktuellen Distributionen ist es in der Regel nur noch ein Frontend, das über iptables-nft in nftables schreibt. Das alte xtables-Backend gilt als Auslaufmodell, deshalb solltest du neue Regelwerke direkt in nftables-Syntax aufbauen und bestehende Setups planbar übersetzen.
Kann ich iptables und nftables parallel betreiben?
Technisch ist es möglich, weil beide Regelsätze an denselben Netfilter-Hooks hängen, betrieblich ist es eine der häufigsten Fehlerquellen. Die Auswertungsreihenfolge ergibt sich dann aus den Prioritäten und ist kaum noch nachvollziehbar, deshalb solltest du dich pro System für einen Weg entscheiden.
Nutzt firewalld intern nftables?
Ja, firewalld verwendet nftables als Standard-Backend und legt dafür eigene Tabellen und Ketten an. Du solltest deshalb keine handgeschriebenen Regeln in denselben Tabellen pflegen, sondern entweder über firewall-cmd arbeiten oder firewalld deaktivieren und nftables direkt verwalten.
Wann ist ufw die bessere Wahl als firewalld?
ufw eignet sich für einzelne Server mit klaren, wenigen Freigaben, weil die Konfiguration schnell zu lesen und zu übergeben ist. Sobald du mit Zonen, mehreren Interfaces, Rich Rules oder rollenabhängigen Profilen arbeitest, ist firewalld deutlich tragfähiger.
Wie teste ich ein neues Regelwerk, ohne mich auszusperren?
Lege das Regelwerk als Datei ab, lade es mit nft -f und plane vorab einen automatischen Rückfall auf die alte Konfiguration, etwa über einen at-Job oder ein Timeout-Skript. Zusätzlich helfen Counter an den relevanten Regeln und eine Log-Regel vor dem finalen Drop, um zu sehen, was tatsächlich verworfen wird.

Zuletzt geprüft am 26. Juli 2026.

Das sagen Teilnehmer

Echte Stimmen aus unseren IT-Kursen

Der Trainer konnte die Inhalte sehr gut vermitteln. Ich habe dabei viel gelernt.
Rückmeldung aus dem Kurs „Monitoring mit Prometheus und Grafana - Grundkurs“
Der Kursinhalt entsprach voll meinen Erwartungen, die richtige Mischung aus Theorie und Praxis.
Rückmeldung aus dem Kurs „Kubernetes Grundkurs“
Persönlich für dich da

Deine Ansprechpartner

Du bist dir nicht sicher, welcher Kurs oder welches Level zu dir passt? Wir beraten dich persönlich und kostenlos.

Yves Hoppe

Yves Hoppe

Weiterbildung & Beratung

Hilft dir, aus dem Linux-Programm den passenden Kurs oder Lernpfad zu finden.

Norbert Jansen

Norbert Jansen

Beratung & Inhouse

Plant mit dir Inhouse-Trainings, die exakt auf eure Systemlandschaft und Distributionen zugeschnitten sind.

Nächster Schritt

Firewall-Regeln mit erfahrenen Trainern durchgehen

Im Linux Security Intensivkurs arbeitest du mit nftables, firewalld und Härtungsmaßnahmen am laufenden System, das Linux Netzwerkadministration Advanced Training vertieft Routing, Filtern und Netzwerkdienste, und der Kompaktkurs Linux Netzwerk und Netzwerkdienste gibt dir den kompletten Überblick. Alle Termine gibt es als Präsenz- oder Live-Online-Schulung, und wenn du deine konkrete Migration besprechen willst, meldest du dich einfach bei uns.