iptables Konfiguration & Sicherheit

Diese Anleitung erklärt, wie Sie eine sichere Default-Deny Firewall-Strategie mit iptables auf Ihrem Linux-Server implementieren — jeglicher Datenverkehr wird blockiert, sofern er nicht explizit erlaubt wird.

Reihenfolge ist kritisch! Das Ausführen der finalen DROP-Richtlinie vor dem Erlauben des SSH-Zugriffs führt sofort zu einem Serverausschluss (Lockout). Testen Sie Regeln stets sorgfältig und halten Sie immer einen Konsolenzugang über das PowerPanel bereit.

1. Basisregeln in der richtigen Reihenfolge

Konfigurieren Sie zunächst alle notwendigen Zugriffe, bevor die globale Blockierungsregel angewandt wird.

Schritt 1: Regeln löschen

Beginnen Sie mit einer sauberen Konfiguration, indem Sie alle bestehenden iptables-Regeln löschen:

Alle Regeln löschen
iptables -F

Schritt 2: Loopback-Verkehr zulassen

Erlauben Sie den gesamten internen Verkehr über das Loopback-Interface. Dies ist für lokale Dienste unerlässlich:

Loopback-Regeln hinzufügen
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT

Schritt 3: Etablierten Verkehr erlauben

Erlauben Sie Pakete, die zu einer bereits hergestellten Verbindung gehören — notwendig damit Antworten auf ausgehende Anfragen (z. B. DNS, Updates) den Server erreichen:

Stateful Inspection
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Schritt 4: SSH-Zugriff erlauben

Erlauben Sie SSH bevor Sie die DROP-Policy setzen — sonst sperren Sie sich sofort aus:

SSH-Zugriff erlauben (Port 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Schritt 5: Standardrichtlinie auf DROP setzen

Erst jetzt, nach allen erlaubten Regeln, wird die globale Blockierungsregel gesetzt. Alle Pakete, die nicht von den vorherigen Regeln akzeptiert wurden, werden verworfen:

Standard-Policies setzen
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP

2. Ports für Dienste öffnen

Fügen Sie Regeln für alle Dienste hinzu, die von außen erreichbar sein müssen. Für bessere Wartbarkeit empfiehlt sich die Nutzung einer benutzerdefinierten Chain:

Benutzerdefinierte Chain für Dienste

Um die INPUT-Kette übersichtlich zu halten, erstellen Sie eine eigene Chain für offene Ports:

Chain erstellen
iptables -N OPEN_PORTS iptables -A INPUT -j OPEN_PORTS

HTTP & HTTPS (Webserver)

HTTP/HTTPS freigeben
iptables -A OPEN_PORTS -p tcp --dport 80 -j ACCEPT iptables -A OPEN_PORTS -p tcp --dport 443 -j ACCEPT

Datenbanken auf bestimmte IPs beschränken

Kritische Ports wie Datenbankports sollten nur für bekannte IP-Adressen geöffnet werden:

MySQL nur für eine IP freigeben
iptables -A OPEN_PORTS -p tcp -s 192.0.2.5 --dport 3306 -j ACCEPT

ICMP (Ping) erlauben

Optional — erlaubt eingehende und ausgehende Ping-Anfragen zur Erreichbarkeitsprüfung:

Ping erlauben
iptables -A INPUT -p icmp -j ACCEPT iptables -A OUTPUT -p icmp -j ACCEPT

3. Schutzmechanismen & Protokollierung

Integrieren Sie Basisschutz gegen Floods und Protokollierung verworfener Pakete:

SYN-Flood-Schutz (Rate-Limit)

Begrenzt neue Verbindungen pro Quell-IP, um einfache Flood-Angriffe auf einen Port zu mitigieren:

Rate-Limit für Port 80
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 50 -j DROP iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set -j ACCEPT

Ungültige Pakete verwerfen (Anti-Scan)

Blockiert Pakete, die typischerweise für Port-Scans und spezielle Angriffe verwendet werden:

Anomalien blockieren
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP iptables -A INPUT -f -j DROP

Protokollierung verworfener Pakete

Fügen Sie diese Regel direkt vor der finalen DROP-Policy ein — mit Rate-Limit um Log-Flooding zu verhindern:

Logging einrichten
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "IPTABLES LIMITED: " --log-level 7 iptables -A INPUT -j LOG --log-prefix "IPTABLES DROPPED FINAL: " --log-level 7

4. Regeln speichern & prüfen

iptables-Regeln sind temporär und gehen nach einem Neustart verloren. Sie müssen persistent gespeichert werden.

Aktuelle Regeln prüfen

Regeln anzeigen
iptables -L -n -v

Persistent speichern — Debian / Ubuntu

Installieren Sie iptables-persistent — es lädt die Regeln automatisch bei jedem Neustart:

iptables-persistent installieren & speichern
apt update && apt install iptables-persistent netfilter-persistent save

Persistent speichern — CentOS / RHEL

Regeln speichern (CentOS)
service iptables save

Alternative nftables: Auf modernen Distributionen (Debian 10+, Ubuntu 20.04+, RHEL 8+) wird iptables durch nftables abgelöst. Für neue Server-Deployments empfehlen wir nftables — es ist performanter, übersichtlicher und wird aktiv weiterentwickelt. Zur nftables-Anleitung →

Weiterführende Dokumentation

Für eine vollständige Referenz aller iptables-Optionen empfehlen wir die offizielle Dokumentation.