iptables ist der klassische Paketfilter des Linux-Kernels (netfilter). Regeln werden in Tabellen organisiert, die Ketten enthalten, an denen der Kernel Pakete entlangschickt. Die wichtigste Tabelle ist filter mit den Ketten INPUT (eingehend), OUTPUT (ausgehend) und FORWARD (durchgereicht). Modernere Systeme ersetzen iptables zunehmend durch nftables.
Regeln anzeigen und verwalten
sudo iptables -L -n -v # Regeln mit Zählern, ohne Namensauflösung
sudo iptables -t nat -L # NAT-Tabelle anzeigen
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # Regel anhängen
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT # Regel löschen
sudo iptables -F # alle Regeln leeren (flush)
sudo iptables -P INPUT DROP # Standard-Policy der Kette setzen
Typische Server-Regeln
sudo iptables -P INPUT DROP
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
-m conntrack --ctstate ESTABLISHED,RELATED lässt Antworten zu bestehenden Verbindungen durch, während neue Verbindungen nur auf freigegebenen Ports erlaubt sind (Stateful Filtering, siehe Firewall-Arten).
NAT und Persistenz
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # NAT für Clients
sudo iptables-save # Regeln als Text ausgeben
sudo iptables-restore < /etc/iptables/rules.v4 # Regeln laden
Manuelle Regeln gehen beim Neustart verloren. Zur Persistenz dienen iptables-persistent bzw. netfilter-persistent. Für IPv6 existiert der parallele Befehl ip6tables.
Verwandte Grundlagen: ufw-Befehle (einfacherer Frontend), nftables-Befehle (moderner Nachfolger).