iptables Cheatsheet

7 Kernkonzepte
Die wichtigsten iptables-Konzepte für Linux-Firewalls: Filter · NAT · Chains · Regeln · Zustände · Targets iptables ist der Standard-Firewall-Framework unter Linux. Mit diesen Befehlen können Sie Paketfilter, NAT und Netzwerksicherheit konfigurieren.

Tabellen & Chains – Die Grundstruktur

filter · nat · mangle · raw · security
// Tabellen filter // Standard (INPUT, OUTPUT, FORWARD) nat // Network Address Translation (PREROUTING, POSTROUTING) mangle // Paketmodifikation (TTL, TOS) raw // Connection Tracking ausschalten

Tabellen organisieren Firewall-Regeln nach Funktion. Chains sind die Regelketten innerhalb der Tabellen, die Pakete durchlaufen.

Die wichtigsten Chains

Chain Tabelle Beschreibung
INPUT filter Pakete, die an das System selbst gerichtet sind
OUTPUT filter Pakete, die vom System ausgehen
FORWARD filter Pakete, die durch das System geroutet werden
PREROUTING nat Pakete vor dem Routing (DNAT)
POSTROUTING nat Pakete nach dem Routing (SNAT, MASQUERADE)
OUTPUT nat Lokale Pakete für NAT
Beispiele
iptables -L # Alle Regeln in filter anzeigen
iptables -t nat -L # Regeln in nat-Tabelle
iptables -L -v -n # Ausführlich, numerisch (kein DNS)
iptables -L --line-numbers # Mit Zeilennummern
Tipp: iptables -L -v -n zeigt Paket- und Byte-Zähler für jede Regel – nützlich, um zu sehen, welche Regeln aktiv genutzt werden.

Regeln – Syntax und Optionen

-A · -I · -D · -P · -F · -Z
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Regeln definieren, was mit Paketen geschieht. Sie bestehen aus Matches (Bedingungen) und Targets (Aktionen).

Grundlegende Optionen

Option Beschreibung Beispiel
-A <chain> Regel am Ende hinzufügen (Append) -A INPUT -j DROP
-I <chain> [nr] Regel am Anfang (oder an Position) einfügen -I INPUT 1 -j DROP
-D <chain> Regel löschen (durch Spezifikation oder Nr.) -D INPUT 3
-P <chain> Default-Policy setzen -P INPUT DROP
-F <chain> Alle Regeln aus Chain löschen (Flush) -F INPUT
-Z <chain> Zähler zurücksetzen (Zero) -Z INPUT
Beispiele
# Standard-Policy setzen
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Regeln hinzufügen
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Regel löschen
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
iptables -D INPUT 2 # Regel Nr. 2 löschen
# Alle Regeln löschen (Vorsicht!)
iptables -F
iptables -t nat -F
⚠️ Achtung: iptables -F löscht alle Regeln! Wenn Sie sich über SSH verbinden, könnte die Verbindung abbrechen. Setzen Sie zuerst die Default-Policy auf ACCEPT oder planen Sie eine andere Rettungsmethode.

Matches – Bedingungen für Regeln

-p · -s · -d · --dport · -m state
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT

Matches definieren, auf welche Pakete eine Regel zutrifft – Protokoll, Quell-/Zieladresse, Ports, Zustand und mehr.

Wichtige Matches

Match Beschreibung Beispiel
-p tcp/udp/icmp Protokoll -p tcp
-s <ip> Quell-IP-Adresse -s 192.168.1.10
-d <ip> Ziel-IP-Adresse -d 10.0.0.5
--sport <port> Quell-Port --sport 1024:65535
--dport <port> Ziel-Port --dport 80
-m state Zustandsbasiertes Filter (NEW, ESTABLISHED, RELATED) -m state --state ESTABLISHED,RELATED
-m multiport Mehrere Ports -m multiport --dports 80,443,8080
-m limit Ratenbegrenzung -m limit --limit 5/min --limit-burst 10
-m mac MAC-Adresse -m mac --mac-source 00:11:22:33:44:55
-m comment Kommentar -m comment --comment "SSH allow"
Beispiele
# Zustandsbasiertes Filter (empfohlen)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Rate Limiting für SSH (Brute-Force-Schutz)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 5 -j ACCEPT
# ICMP (Ping) erlauben
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Mehrere Ports
iptables -A INPUT -p tcp -m multiport --dports 80,443,8080 -j ACCEPT
Tipp: Das state-Match ist essenziell für eine effiziente Firewall. Erlauben Sie etablierte Verbindungen, um den Durchsatz zu erhöhen und die Regeln zu vereinfachen.

Targets – Aktionen für Pakete

ACCEPT · DROP · REJECT · LOG · DNAT · SNAT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH: "

Targets legen fest, was mit einem Paket geschieht, das alle Match-Bedingungen erfüllt – von Annehmen über Verwerfen bis zu Logging.

Die wichtigsten Targets

Target Beschreibung Verwendung
ACCEPT Paket annehmen Erlaubte Verbindungen
DROP Paket verwerfen (keine Antwort) Blockierte Verbindungen (stiller)
REJECT Paket verwerfen mit Fehlermeldung Blockierte Verbindungen (sichtbar)
LOG Paket ins Syslog schreiben Debugging / Überwachung
DNAT Zieladresse ändern (Destination NAT) Port-Forwarding
SNAT Quelladresse ändern (Source NAT) Internet-Zugang für lokale Netzwerke
MASQUERADE SNAT mit dynamischer IP Bei DHCP / PPPoE
Beispiele
# Logging von SSH-Versuchen
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH: " --log-level 4
# DROP vs REJECT
iptables -A INPUT -p tcp --dport 23 -j DROP # Telnet blockieren (stiller)
iptables -A INPUT -p tcp --dport 23 -j REJECT --reject-with tcp-reset # Mit Reset
# Chain-Springen (User-defined)
iptables -N MYCHAIN
iptables -A MYCHAIN -j LOG
iptables -A INPUT -j MYCHAIN
Tipp: Verwenden Sie LOG vor DROP/REJECT, um blockierte Pakete zu protokollieren. Die Logs finden Sie in /var/log/syslog oder /var/log/kern.log.

NAT – Port-Forwarding & Masquerading

DNAT · SNAT · MASQUERADE
// Port-Forwarding (DNAT) iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80 // Masquerading (SNAT dynamisch) iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

NAT (Network Address Translation) ermöglicht Port-Forwarding, Internetzugang für interne Netze und die Umleitung von Traffic.

Beispiele
# Port-Forwarding: externer Port 8080 → intern 192.168.1.10:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
# Zusätzlich: Forwarding erlauben
iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
# MASQUERADE (für Internet-Zugang)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# SNAT (statische IP)
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.5
# Forwarding aktivieren (IP-Forwarding)
echo 1 > /proc/sys/net/ipv4/ip_forward
# Dauerhaft: /etc/sysctl.conf net.ipv4.ip_forward=1
Tipp: Für NAT muss IP-Forwarding aktiviert sein (/proc/sys/net/ipv4/ip_forward). Vergessen Sie nicht, die FORWARD-Chain zu konfigurieren – sie ist standardmäßig auf DROP gesetzt.

Persistenz & Diagnose – Regeln speichern und prüfen

save · restore · iptables-save · iptables-restore
// Regeln sichern iptables-save > /etc/iptables/rules.v4 // Regeln wiederherstellen iptables-restore < /etc/iptables/rules.v4

Persistenz sorgt dafür, dass iptables-Regeln nach einem Neustart erhalten bleiben. iptables-save und iptables-restore sind die Werkzeuge dafür.

Persistenz unter verschiedenen Distributionen

Distribution Methode Befehl
Debian / Ubuntu iptables-persistent netfilter-persistent save
RHEL / CentOS 7+ firewalld (empfohlen) firewall-cmd --permanent
RHEL / CentOS 6 iptables-service service iptables save
Arch Linux iptables.service systemctl enable iptables
Generisch Manuelle Methode iptables-save > /etc/iptables/rules.v4
Beispiele
# Regeln speichern (Debian/Ubuntu)
sudo netfilter-persistent save
# Regeln speichern (RHEL/CentOS 6)
sudo service iptables save
# Regeln anzeigen als Skript
iptables-save
# Regeln wiederherstellen
iptables-restore < /etc/iptables/rules.v4
# Prüfen auf Fehler
iptables -L -v -n
iptables -t nat -L -v -n
Tipp: Testen Sie Ihre Regeln vor dem Speichern mit iptables -L -v -n. Bei Ubuntu/Debian installieren Sie iptables-persistent für die automatische Persistenz (sudo apt install iptables-persistent).

iptables im Überblick

filter Standard-Tabelle
INPUT, OUTPUT, FORWARD
nat Network Address Translation
PREROUTING, POSTROUTING
mangle Paketmodifikation
TTL, TOS, Markierungen
state Zustandsbasiertes Filtern
NEW, ESTABLISHED, RELATED
LOG Pakete protokollieren
Syslog, Debugging
DROP Paket verwerfen
Stiller Block

Quick Summary

filter
Standard-Filter
INPUT
Eingehende Pakete
-A
Regel hinzufügen
--dport
Ziel-Port
ACCEPT
Annehmen
DNAT
Port-Forwarding
save
Regeln speichern
iptables -A INPUT -p tcp --dport 22 -j ACCEPT · iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80