Unter Linux bildet iptables die klassische Grundlage für Paketfilterung, Stateful Inspection, NAT und Portfreigaben. Diese Seite erklärt die Funktionsweise einer Firewall, die Struktur von iptables und zeigt praxisnahe Beispiele für eine sichere Server‑Konfiguration.
Was ist eine Firewall?
Eine Firewall überwacht und kontrolliert Netzwerkpakete anhand definierter Regeln. Sie schützt Systeme vor ungewolltem Zugriff, Angriffen und Datenabfluss. Unter Linux erfolgt dies über Netfilter, das durch iptables gesteuert wird.
- Paketfilter – entscheidet, ob Pakete erlaubt oder blockiert werden
- Stateful Inspection – erkennt Verbindungen und deren Status
- NAT – Network Address Translation (z. B. für Router)
- Logging – protokolliert sicherheitsrelevante Ereignisse
iptables – Aufbau & Funktionsweise
iptables arbeitet mit Tables, Chains und Rules. Jede Tabelle enthält Chains, die wiederum Regeln enthalten.
Wichtige Tabellen
- filter – Standardtabelle für Paketfilterung
- nat – für NAT, Port‑Forwarding, Masquerading
- mangle – Paketmanipulation
Wichtige Chains
- INPUT – eingehende Pakete
- OUTPUT – ausgehende Pakete
- FORWARD – weitergeleitete Pakete (Router)
- PREROUTING – vor Routing‑Entscheidung (NAT)
- POSTROUTING – nach Routing‑Entscheidung (NAT)
Grundkonfiguration einer sicheren Firewall
⚠️ Wichtiger Warnhinweis zur Standard-Policy
ACHTUNG: Wenn Sie via SSH verbunden sind, müssen Sie ZWINGEND zuerst die SSH-Regel (Schritt 3) aktivieren, bevor Sie die Standard-Policy auf DROP setzen (Schritt 5). Andernfalls werden Sie sofort ausgesperrt!
Sichere Reihenfolge bei SSH-Verbindung: Loopback → Established → SSH → ICMP → dann Standard-Policy
Sichere Reihenfolge lokal am Server: Loopback → Established → SSH → ICMP → dann Standard-Policy
1. Loopback‑Traffic erlauben
Wichtig: Immer zuerst aktivieren – benötigt für lokale Dienste und Systemfunktionen.
sudo iptables -A INPUT -i lo -j ACCEPT2. Bereits etablierte Verbindungen erlauben
Dies sichert bestehende Verbindungen (wichtig wenn Sie via SSH arbeiten).
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT3. SSH‑Zugriff erlauben
ZUERST aktivieren, bevor Sie Standard-Policies setzen! Wenn via SSH verbunden: Diese Regel sofort vor Schritt 4 ausführen.
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT4. ICMP (Ping) kontrolliert erlauben
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT5. Standard‑Policies setzen
Erst jetzt die Standard-Policies auf DROP setzen – nachdem die erlaubenden Regeln aktiv sind:
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPTFirewall‑Logging
Logging ist essenziell, um Angriffe zu erkennen und Fehlkonfigurationen zu analysieren.
sudo iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4Logs erscheinen in:
/var/log/syslogNAT & Port‑Weiterleitung (Router‑Betrieb)
Masquerading (Internetfreigabe)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEPort‑Forwarding
Beispiel: Port 80 extern → interner Webserver 192.168.1.50:80
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
-j DNAT --to-destination 192.168.1.50:80Firewall‑Härtung (Hardening)
Die folgenden Maßnahmen erhöhen die Sicherheit einer iptables‑basierten Firewall erheblich.
1. SSH‑Brute‑Force‑Schutz
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
-m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
-m recent --update --seconds 60 --hitcount 5 -j DROP2. Port‑Scanning erkennen & blockieren
sudo iptables -A INPUT -m recent --name portscan --set -j DROP
sudo iptables -A INPUT -m recent --name portscan --update --seconds 60 --hitcount 10 -j DROP3. SYN‑Flood‑Schutz
sudo iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
sudo iptables -A INPUT -p tcp --syn -m limit --limit 5/s -j ACCEPT4. Ungültige Pakete verwerfen
sudo iptables -A INPUT -m state --state INVALID -j DROP5. Fragmentierte Pakete blockieren
sudo iptables -A INPUT -f -j DROP6. Private IP‑Bereiche auf WAN‑Interface blockieren
Schützt vor Spoofing‑Angriffen:
sudo iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
sudo iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
sudo iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROPRegeln dauerhaft speichern
iptables‑Regeln sind nach einem Neustart verloren. Persistenz aktivieren:
sudo apt install iptables-persistent
sudo netfilter-persistent saveFirewall‑Konfiguration anzeigen
sudo iptables -L -v -nBest Practices für eine sichere Firewall
- Standard‑Policy: DROP
- Nur notwendige Ports öffnen
- SSH absichern (Key‑Login, Fail2Ban, Rate‑Limit)
- Regelmäßige Log‑Analyse
- Firewall‑Regeln dokumentieren
- Regelmäßige Backups der iptables‑Konfiguration
Mit einer sauber konfigurierten iptables‑Firewall lässt sich ein Linux‑System effektiv gegen Angriffe schützen. Die Kombination aus Paketfilterung, Stateful Inspection, Logging und Hardening bildet eine robuste Sicherheitsbasis für Server und Netzwerke.
