Sicherheit

Wie können wir helfen?

Anleitungen und technische Dokumentation für Ihren Dedicated Server oder VPS von Server4You.

iptables-Konfiguration & Sicherheit

Diese Anleitung zeigt, wie Sie mit iptables eine Default-Deny-Firewall auf Ihrem Linux-Server einrichten: Eingehender Verkehr wird blockiert, sofern er nicht explizit erlaubt ist. Sie behandelt Basisregeln, Ports für Dienste, Flood-Schutz, Protokollierung und das dauerhafte Speichern der Regeln.

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 conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m conntrack --ctstate 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 Erlaubnisregeln, setzen Sie die globale Blockierungsregel. Alle eingehenden Pakete, die keine vorherige Regel akzeptiert hat, werden verworfen. Ausgehender Verkehr bleibt erlaubt, damit der Server weiterhin DNS-Namen auflösen und Updates installieren kann:

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

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

Ergänzen Sie einen Basisschutz gegen Floods und die Protokollierung verworfener Pakete:

SYN-Flood-Schutz (Rate-Limit)

Begrenzt neue Verbindungen pro Quell-IP, um einfache Flood-Angriffe auf einen Port abzuwehren. Die Regeln werden oben in die INPUT-Chain eingefügt (-I), damit sie vor der allgemeinen Freigabe für Port 80 greifen:

Rate-Limit für Port 80
iptables -I INPUT 1 -p tcp --dport 80 -m conntrack --ctstate NEW -m recent --update --seconds 10 --hitcount 20 -j DROP iptables -I INPUT 2 -p tcp --dport 80 -m conntrack --ctstate 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. Auch diese Regeln werden oben in die INPUT-Chain eingefügt:

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

Protokollierung verworfener Pakete

Hängen Sie diese Regeln ans Ende der INPUT-Chain an, damit sie direkt vor der finalen DROP-Policy greifen — 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 — AlmaLinux / Rocky Linux

Regeln speichern (AlmaLinux / Rocky Linux)
dnf install iptables-services iptables-save > /etc/sysconfig/iptables systemctl disable --now firewalld systemctl enable --now iptables

Alternative nftables: Auf aktuellen Distributionen wie Debian 13, Ubuntu 24.04, AlmaLinux und Rocky Linux hat nftables iptables als Standard abgelöst. Für neue Server 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.