Iptables Fundamentals: Chains & Rules (Artikel 307)
Beherrschung des klassischen Iptables-Firewall-Systems. Erfahren Sie alles über Tables, Chains und Targets sowie den Aufbau einer grundlegenden Firewall-Logik.
# Iptables Fundamentals: Den Datenfluss im Kernel steuern
TL;DR / Management Summary Obwohl modernere Tools wie nftables (Artikel 091) existieren, bleibt iptables das Fundament, auf dem Millionen von Firewalls (inkl. Docker und Kubernetes) basieren. Wer iptables versteht, versteht, wie der Linux-Kernel Pakete filtert, umleitet oder manipuliert. Wir lernen die Architektur aus Tables (z.B. Filter, NAT) und Chains (INPUT, OUTPUT, FORWARD) kennen, um den Traffic gezielt zu bändigen.
# 1. Einführung & Architektur
Die Netfilter-Struktur.
Iptables ist ein Frontend für das Netfilter-Framework im Kernel.
# Die drei wichtigsten Tables
- FILTER (Standard): Entscheidet über Erlauben oder Blockieren.
- NAT: Ändert Quell- oder Ziel-IPs/Ports (Port-Forwarding).
- MANGLE: Modifiziert Paket-Header (TTL, Quality of Service).
# Die Chains (Mermaid)
graph TD
A[Incoming Packet] --> B[PREROUTING: NAT/Mangle]
B --> C{Routing Decision}
C -->|To Local Process| D[INPUT: Filter]
C -->|To Another Host| E[FORWARD: Filter]
D --> F[Local Application]
E --> G[POSTROUTING: NAT]
F --> H[OUTPUT: Filter]
H --> G
G --> I[Outgoing Packet]
# 2. Grundlegende Befehle
Sichtbarkeit und einfache Regeln.
# Bestehende Regeln anzeigen
# -L: List, -n: Numeric, -v: Verbose (Paketzähler!)
sudo iptables -L -n -v
# Die erste Firewall-Regel (SSH erlauben)
# -A: Append, -p: Protocol, --dport: Destination Port, -j: Jump to Target
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 3. Die Standard-Policy (White-Listing)
Sicher durch ‘Deny by Default’.
Ein professionelles Setup erlaubt nur das Nötigste und verwirft den Rest.
# 1. SSH Erlauben (sonst Aussperrung!)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 2. Bestehende Verbindungen erlauben (Stateful)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 3. Den Rest blockieren
sudo iptables -P INPUT DROP
# 4. Day-2 Operations: Regeln persistent machen
Damit sie den Reboot überleben.
Iptables-Regeln leben nur im RAM.
# Unter Debian/Ubuntu
sudo apt install iptables-persistent
sudo netfilter-persistent save
# Unter Arch/RHEL
sudo iptables-save > /etc/iptables/iptables.rules
# 5. Troubleshooting & “War Stories”
Wenn die Firewall blind macht.
# Story 1: “Die Reihenfolge-Falle”
Symptom: Der Admin fügt eine ACCEPT Regel für Port 80 hinzu, aber der Webserver ist nicht erreichbar.
Ursache: Am Anfang der Kette steht eine DROP Regel, die alles blockiert. Iptables verarbeitet Regeln von oben nach unten.
Lösung: Nutzen Sie -I (Insert) statt -A (Append), um Regeln an den Anfang zu schieben:
sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT.
# Story 2: “Das ICMP-Problem”
Symptom: Der Server ist über die IP erreichbar, aber ping meldet Timeouts. DNS funktioniert nicht zuverlässig.
Ursache: Eine zu aggressive DROP ALL Policy blockiert auch notwendige ICMP-Pakete (z.B. Fragmentation Needed oder Echo Reply).
Lösung: Erlauben Sie ICMP explizit:
sudo iptables -A INPUT -p icmp -j ACCEPT.
# 6. Fazit & Empfehlung
- Wahl: Nutzen Sie Iptables für einfache, statische Setups.
- Sicherheit: Prüfen Sie regelmäßig die Paketzähler (
-v). Wenn eineACCEPTRegel 0 Pakete sieht, ist sie eventuell redundant oder an der falschen Stelle. - Modernisierung: Migrieren Sie neue Projekte zu nftables (Artikel 091/226), da es effizienter und übersichtlicher ist.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Liste aller Regeln | iptables -S |
| Regel löschen (Nr) | iptables -D INPUT 1 |
| Gesamte Chain flushen | iptables -F INPUT |
| NAT-Regeln sehen | iptables -t nat -L -n |
| Port-Forwarding | iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 10.0.0.5:80 |
| Quell-IP bannen | iptables -A INPUT -s 1.2.3.4 -j DROP |
| Hilfe anzeigen | iptables --help |
| IP-Sets nutzen | iptables -A INPUT -m set --match-set blacklist src -j DROP |