Iptables Firewall Grundlagen Tutorial
iptables Firewall Grundlagen – Linux Firewall manuell konfigurieren
Die iptables-Firewall ist ein leistungsstarkes Netzwerk-Filterwerkzeug unter Linux, das auf Kernel-Ebene arbeitet und es Ihnen ermöglicht, ein- und ausgehende Netzwerkverkehr zu kontrollieren. Dieses Tutorial führt Sie durch alle wichtigen Konzepte und praktische Konfigurationen.
Was ist iptables?
iptables ist ein Befehlszeilenwerkzeug zum Konfigurieren von IP-Paketfiltern im Linux-Kernel. Es arbeitet mit dem netfilter-Modul zusammen und ermöglicht es Ihnen, Regeln für eingehende, ausgehende und weiterleitete Pakete zu definieren. iptables ist seit Jahrzehnten der Standard für Firewallkonfiguration auf Linux-Systemen.
iptables vs nftables vs UFW
Im Linux-Ökosystem existieren mehrere Firewall-Lösungen mit unterschiedlichen Komplexitätsgraden:
| Merkmal | iptables | nftables | UFW |
|---|---|---|---|
| Komplexität | Mittel | Höher | Niedrig |
| Syntax | Mehrere Befehle für verschiedene Operationen | Einheitliche Syntax, tabellenbasiert | Sehr einfach und benutzerfreundlich |
| Performance | Gut | Besser (Kernel-Architektur optimiert) | Gut (baut auf iptables auf) |
| Lernkurve | Steil | Steiler | Flach |
| Einsatzbereich | Fortgeschrittene Szenarien | Moderne Systeme (Fedora 18+) | Desktop und einfache Server |
iptables Grundkonzepte
Tabellen in iptables
iptables organisiert Regeln in Tabellen, von denen jede einen anderen Aspekt der Paketverarbeitung behandelt:
- filter-Tabelle – Die wichtigste Tabelle für die meisten Firewallaufgaben. Sie filtert Pakete basierend auf den definierten Regeln und entscheidet, welche Pakete akzeptiert oder abgelehnt werden.
- nat-Tabelle – Network Address Translation. Sie wird verwendet, um Quell- und Zieladressen von Paketen zu modifizieren, besonders nützlich für Masquerading und Port-Weiterleitung.
- mangle-Tabelle – Ermöglicht die Modifizierung verschiedener Paketattribute wie TTL (Time to Live) und ToS (Type of Service).
- raw-Tabelle – Ermöglicht spezielle Verarbeitung vor der Verbindungsverfolgung (Conntrack).
- security-Tabelle – Für SELinux und ähnliche Mandatory Access Control Systeme.
Chains in iptables
Innerhalb jeder Tabelle existieren sogenannte Chains, die Sequenzen von Regeln darstellen:
- INPUT – Regeln für eingehende Pakete, die für das lokale System bestimmt sind.
- OUTPUT – Regeln für ausgehende Pakete, die vom lokalen System versendet werden.
- FORWARD – Regeln für Pakete, die durch das System weitergeleitet werden (relevant für Router).
- PREROUTING – Nur in nat und mangle Tabellen. Verarbeitet Pakete bevor Routingentscheidungen getroffen werden.
- POSTROUTING – Nur in nat und mangle Tabellen. Verarbeitet Pakete nachdem Routingentscheidungen getroffen wurden.
Policies und Target-Aktionen
Policies definieren das Standardverhalten für jeden Chain, wenn kein Regel zutrifft:
- ACCEPT – Das Paket wird akzeptiert und verarbeitet
- DROP – Das Paket wird stumm verworfen (keine Antwort)
- REJECT – Das Paket wird abgelehnt und der Absender erhält eine Rückmeldung
- RETURN – Verarbeitung des Chains stoppen und zum Parent Chain zurückkehren
Grundlegende iptables-Befehle
Regeln auflisten
Das Auflisten bestehender Regeln ist essentiell zum Verstehen der aktuellen Firewallkonfiguration:
iptables -L iptables -L -v iptables -L -v -n iptables -L -v -n --line-numbers
Die wichtigsten Optionen:
-L– Listet alle Regeln auf-v– Verbose Ausgabe (Paketstatistiken, Bytes)-n– Numerische Ausgabe (keine DNS-Auflösungen)--line-numbers– Nummeriert die Regeln zur Referenzierung
Regeln löschen und zurücksetzen
iptables -F iptables -F INPUT iptables -X iptables -F -t nat
Erklärung:
-F– Löscht (flush) alle Regeln aus einem Chain oder der gesamten Tabelle-X– Löscht alle benutzerdefinierten Chains-t– Gibt die zu bearbeitende Tabelle an
Policies setzen
iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP
Dies setzt die Standardrichtlinie für jeden Chain. Im obigen Beispiel werden alle eingehenden und weiterleiteten Pakete standardmäßig verworfen, während ausgehende Pakete akzeptiert werden.
Regeln hinzufügen und entfernen
Regeln hinzufügen
Der allgemeine Syntax zum Hinzufügen von Regeln:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -j DROP
Parameter erklären:
-A– Regel am Ende des Chains anhängen (append)-I– Regel am Anfang des Chains einfügen (insert)-p– Protokoll (tcp, udp, icmp, all)--dport– Zielport--sport– Quellport-j– Jump/Target (ACCEPT, DROP, REJECT)-i– Eingangsschnittstelle (eth0, wlan0)-o– Ausgangsschnittstelle
IPs blockieren
iptables -A INPUT -s 192.168.1.100 -j DROP iptables -A INPUT -s 10.0.0.0/8 -j DROP
Mit -s können Sie Quelladressen oder Subnetzblöcke blockieren.
Regeln mit Statusverfolgung (stateful)
Stateful Filtering ist essentiell für einen funktionsfähigen Server:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m state --state INVALID -j DROP
Dies akzeptiert alle Pakete, die zu etablierten oder verknüpften Verbindungen gehören, was den Datenverkehr von auslaufenden Verbindungen ermöglicht.
Rate Limiting
iptables -A INPUT -p tcp --dport 22 -m limit --limit 5/min --limit-burst 10 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP
Dies beschränkt SSH-Verbindungen auf maximal 5 pro Minute mit einer Burst von 10, was Brute-Force-Angriffe erschwert.
NAT und Masquerading
Masquerading für Router
Wenn Ihr Linux-System als Router fungiert, müssen Sie Masquerading aktivieren:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward
Dies ermöglicht es dem System, Pakete von einem privaten Netzwerk ins Internet weiterzuleiten und dabei die Quelladresse zu maskieren.
Port-Weiterleitung
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80 iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
Dies leitet eingehende Verbindungen auf Port 8080 an einen internen Server auf Port 80 weiter.
Regeln speichern und wiederherstellen
Regeln speichern
Ohne Persistierung gehen Ihre Regeln beim Neustart verloren:
iptables-save > /etc/iptables/rules.v4 iptables-save > /tmp/firewall-backup.txt
Regeln bei Systemstart wiederherstellen
Auf Debian/Ubuntu Systemen:
apt install iptables-persistent iptables-restore < /etc/iptables/rules.v4
Nach der Installation fragt das System, ob es die aktuellen Regeln speichern soll. Sie können diese auch manuell später speichern:
netfilter-persistent save
Praktische Serverfirewall-Konfiguration
Hier ist eine vollständige Beispielkonfiguration für einen Web- und SSH-Server:
#!/bin/bash # Standardrichtlinien setzen iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP # Loopback Interface zulassen iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Stateful Filtering iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m state --state INVALID -j DROP # ICMP (Ping) zulassen iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT # SSH mit Rate Limiting iptables -A INPUT -p tcp --dport 22 -m limit --limit 5/min --limit-burst 10 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j DROP # HTTP und HTTPS iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Alle anderen Pakete ablehnen iptables -A INPUT -j DROP # Regeln speichern iptables-save > /etc/iptables/rules.v4
Häufige iptables-Szenarien
Spezifisches Subnetz blockieren
iptables -A INPUT -s 203.0.113.0/24 -j DROP
Ein Port-Range öffnen
iptables -A INPUT -p tcp --dport 6000:6100 -j ACCEPT
Regeln mit Reihenfolge verwalten
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT iptables -D INPUT 3 iptables -R INPUT 2 -p tcp --dport 2222 -j ACCEPT
Erklärung:
-I– Insert (an Positionnummer einfügen)-D– Delete (Regel nach Position löschen)-R– Replace (Regel ersetzen)
Fehlerbehandlung und Debugging
Aktuelle Regeln mit Statistiken anzeigen
iptables -L -v -n --line-numbers iptables -L -v -n -t nat
Kernelmodule überprüfen
lsmod | grep ip_tables modprobe ip_tables
iptables-Status prüfen
systemctl status iptables systemctl status netfilter-persistent
Migration zu nftables
Moderne Systeme können die Kompatibilität mit iptables nutzen, während sie nftables unterstützen:
update-alternatives --install /etc/alternatives/iptables iptables /usr/sbin/iptables-nft 100
Zusammenfassung
iptables bleibt ein unverzichtbares Werkzeug für Linux-Systemadministratoren. Mit den Konzepten von Tabellen, Chains und Regeln können Sie granulare Kontrolle über Netzwerkverkehr ausüben. Die Kombination von stateful Filtering, Rate Limiting und gezielten Regeln schafft eine robuste Firewall für Ihre Infrastruktur.