Linux-Firewall mit nftables
Du lernst nftables — den modernen Nachfolger von iptables, der auf 75% aller Linux-Server Standard ist. Du baust Schritt für Schritt eine produktionsreife Firewall: Tabellen und Ketten anlegen, SSH und HTTP/S erlauben, alles andere blockieren und Regeln persistent machen. 6 Aufgaben, ca. 75 Minuten.
Produktions-Firewall mit nftables aufbauen
Was ist eine Firewall — und was ist nftables?
Eine Firewall ist ein Filter, der entscheidet, welche Netzwerk-Pakete einen Server erreichen dürfen und welche verworfen werden. Sie ist die erste Verteidigungslinie eines Servers: Ohne Firewall ist jeder offene Dienst direkt aus dem Internet angreifbar.
nftables ist das moderne Firewall-Framework des Linux-Kernels. Es ersetzt das ältere iptables und ist heute auf den meisten Linux-Servern Standard. Du beschreibst damit in einer klaren Syntax, welcher Verkehr erlaubt ist — alles andere wird blockiert.
Die drei Bausteine von nftables
- Tabelle (table): der oberste Container für deine Regeln. Die Familie legt fest, wofür sie gilt —
inetdeckt IPv4 und IPv6 gemeinsam ab. - Kette (chain): hängt an einem Hook, einem festen Punkt im Paket-Weg des Kernels. Die
input-Kette bearbeitet alle eingehenden Pakete. Jede Kette hat eine Policy (Grundregel):policy dropheißt „verwirf alles, was keine Regel ausdrücklich erlaubt" — das sichere Prinzip Default-Deny. - Regel (rule): eine einzelne Erlaubnis in einer Kette, z. B. „TCP-Port 22 (SSH) zulassen".
Dein Ziel in dieser Lektion
Du baust Schritt für Schritt eine produktionsreife Firewall auf: eine inet-Tabelle mit einer input-Kette (Default drop), die nur das Nötigste erlaubt — SSH (Port 22), HTTP (80), HTTPS (443), bereits bestehende Verbindungen und den lokalen Loopback. Zum Schluss machst du die Regeln neustart-fest. Die VM startet ohne aktive Firewall-Regeln.
Aufgaben
1. inet-Tabelle anlegen
Begriff: Tabelle. Die Tabelle ist der oberste Container in nftables — sie nimmt gleich deine Ketten und Regeln auf. Die Familie bestimmt, für welche Protokolle sie gilt:
inetsteht für IPv4 und IPv6 zusammen, du pflegst deine Regeln also nur einmal.Lege eine Tabelle namens
filterin der Familieinetan:nft add table inet filterKontrolle:
nft list tableszeigt alle Tabellen —table inet filtermuss dabei sein.2. Input-Kette mit Drop-Policy
Begriff: Kette & Policy. Eine Kette (chain) hängt an einem Hook — einem festen Punkt im Paket-Weg des Kernels. Der Hook
inputfängt alle eingehenden Pakete ab. Die Policy ist das Standard-Verhalten, wenn keine Regel passt:policy drop= alles verwerfen (Default-Deny). Das ist sicherer alsaccept, weil du danach gezielt nur erlaubst, was du brauchst.Erstelle in der Tabelle
inet filtereineinput-Kette mit Drop-Policy:nft 'add chain inet filter input { type filter hook input priority 0; policy drop; }'⚠️ Wichtig: Sobald
policy dropaktiv ist, blockiert die Firewall auch deine eigene SSH-Verbindung — bis du in den nächsten Schritten SSH ausdrücklich erlaubst. Auf dieser Übungs-VM ist das ungefährlich (der Plattform-Prüfer hat einen eigenen Zugang).Kontrolle:
nft list chain inet filter inputmusspolicy dropzeigen.3. Bestehende Verbindungen erlauben
Begriff: Connection-Tracking. Der Kernel merkt sich den Zustand jeder Verbindung.
ct state established,relatedtrifft Pakete, die zu einer bereits aufgebauten Verbindung gehören (oder unmittelbar dazu, z. B. ein FTP-Datenkanal).Warum als erste Regel? Ohne sie würde die
drop-Policy auch die Antwortpakete deiner eigenen ausgehenden Verbindungen verwerfen (z. B. die Antwort einesapt update). Diese Regel lässt genau diese erlaubten Rückflüsse zu — und gehört deshalb ganz nach oben.nft add rule inet filter input ct state established,related acceptKontrolle:
nft list chain inet filter inputenthältct state established.4. SSH, HTTP und HTTPS freischalten
Begriff: Port &
dport. Ein Port ist die „Tür" zu einem bestimmten Dienst auf dem Server.dport(destination port) ist der Ziel-Port des eingehenden Pakets. Du erlaubst gezielt die Dienste, die von außen erreichbar sein sollen:- 22 = SSH (Fernzugriff / Administration)
- 80 = HTTP (Webseite unverschlüsselt, u. a. für die Let's-Encrypt-Prüfung)
- 443 = HTTPS (verschlüsselte Webseite)
Füge drei Regeln hinzu — eine pro Port:
nft add rule inet filter input tcp dport 22 accept nft add rule inet filter input tcp dport 80 accept nft add rule inet filter input tcp dport 443 acceptKontrolle:
nft list chain inet filter inputzeigtdport 22,dport 80unddport 443jeweils mitaccept.5. Loopback-Interface erlauben
Begriff: Loopback (
lo). Das Loopback-Interfaceloist die interne Netzwerk-Schnittstelle des Servers zu sich selbst (Adresse127.0.0.1). Viele lokale Dienste — Datenbanken, Caches, Mail — kommunizieren ausschließlich überlo. Blockiert diedrop-Policy auch Loopback, brechen diese internen Verbindungen — ein häufiger, schwer zu findender Fehler.Erlaube allen Verkehr, der über das Interface
lohereinkommt:nft add rule inet filter input iifname lo acceptiifname= input interface name, also die Schnittstelle, über die das Paket ankam.Kontrolle:
nft list chain inet filter inputenthält einelo-Regel mitaccept.6. Regeln persistent machen
Problem: nftables-Regeln leben nur im Arbeitsspeicher (Kernel). Nach einem Neustart wären sie weg — der Server stünde ohne Firewall da. Du musst sie deshalb persistent machen, in zwei Schritten:
- Regeln in eine Datei exportieren:
/etc/nftables.confist die Standard-Datei, die nftables beim Start einliest. - Den Dienst aktivieren:
systemctl enable nftablessorgt dafür, dass nftables beim Booten automatisch startet und/etc/nftables.conflädt.
nft list ruleset > /etc/nftables.conf systemctl enable nftablesKontrolle:
/etc/nftables.confenthälttable inet filter, undsystemctl is-enabled nftablesmeldetenabled.- Regeln in eine Datei exportieren:
Jetzt selbst üben
Lesen ist gut – selbst machen ist besser. Starte diesen Kurs an einer echten Linux-VM, direkt im Browser. Ein kostenloses Konto genügt.
Kostenlos startenLab-Inhalte unter CC BY 4.0 – frei nutzbar mit Namensnennung (© TechLogia).
