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:sudo nft add table inet filterKontrolle:
sudo 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:sudo 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:
sudo 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.sudo nft add rule inet filter input ct state established,related acceptKontrolle:
sudo 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:
sudo nft add rule inet filter input tcp dport 22 accept sudo nft add rule inet filter input tcp dport 80 accept sudo nft add rule inet filter input tcp dport 443 acceptKontrolle:
sudo 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:sudo nft add rule inet filter input iifname lo acceptiifname= input interface name, also die Schnittstelle, über die das Paket ankam.Kontrolle:
sudo 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:
sudo systemctl enable nftablessorgt dafür, dass nftables beim Booten automatisch startet und/etc/nftables.conflädt.
sudo sh -c 'sudo sh -c 'nft list ruleset > /etc/nftables.conf'' sudo systemctl enable nftablesKontrolle:
/etc/nftables.confenthälttable inet filter, undsystemctl is-enabled nftablesmeldetenabled.- Regeln in eine Datei exportieren:
Verwandte Kurse
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).
