iptables-Tutorial: So konfigurieren Sie die Filtertabellen des Linux-Kernels

Paketfilterung ist eine entscheidende Komponente des Sicherheitskonzepts aller Computersysteme, die sich in einem Netzwerk befinden. Die Kontrolle und Verwaltung des ein- und ausgehenden Datenverkehrs – häufig als Bestandteil einer Firewall – soll sicherstellen, dass nur solche Datenpakete empfangen oder versendet werden, die frei von Malware und Spam sind. Im Linux-Kernel ist standardmäßig ein solcher Paketfilter integriert, der durch Module des Software-Pakets Netfilter bereitgestellt wird. Allerdings ist ein zusätzliches Programm notwendig, um diesen zu konfigurieren. Für die Linux-Kernel 2.4 und 2.6 benötigen Sie die freie Software iptables, die ebenfalls vom Netfilter-Projekt-Team entwickelt wurde.

Als Administrator verwenden Sie iptables, um Regeln aufzustellen, zu verändern oder zu löschen, wobei die Einstellungen allerdings beim Systemneustart verloren gehen. Mithilfe der zu iptables gehörenden Tools iptables-save und iptables-restore können Sie angelegte Regelwerke speichern und wiederherstellen. Mit einem sogenannten Init-Script gelingt dies sogar ganz automatisch im Laufe des Bootprozesses. iptables ist auf das Protokoll IPv4 beschränkt, für die weiteren Protokolle gibt es entsprechende Varianten wie ip6tables für IPv6 oder ebtables für Ethernet-Pakete, die ebenfalls im Kernel-Modul enthalten sind.

Im folgenden iptables-Tutorial stellen wir Ihnen die Basisfunktionen und -optionen der Paketfilter-Software vor. Anschließend erklären wir auch die Konfiguration der Tabellen anhand verschiedener Beispiele.

So funktioniert iptables

Unter Linux ist iptables für gewöhnlich bereits vorinstalliert. Wenn dies nicht der Fall ist oder Sie sichergehen wollen, dass Sie die aktuelle Software-Version verwenden, können Sie zum Updaten bzw. Installieren auch den Weg über den jeweiligen Paket-Manager Ihrer Distribution wählen. Geben Sie dazu einfach den folgenden Befehl ins Terminal ein:

sudo apt-get install iptables

Es gibt verschiedene grafische Oberflächen für iptables, z. B. Webmin, wobei die Bedienung des Programms über die Kommandozeile relativ unkompliziert und schnell zu erlernen ist.

iptables setzt erweiterte Systemprivilegien voraus und kann daher nur als Root oder mit entsprechenden Administrator-Rechten ausgeführt werden. Die mit dem Programm geladenen und zuvor vom Kernel erzeugten Tabellen (tables) enthalten Ketten (chains) von Regeln (rules), die aussagen, wie eingehende und verschickte Datenpakete behandelt werden sollen. Diese Pakete werden innerhalb einer Kette von Regel zu Regel weitergereicht, wobei jede Regel eine Aktion hervorrufen (jump target) oder einen Wechsel in eine andere Kette bewirken (goto chain) kann.

Aktionen, die eintreten, wenn eine Regel auf das jeweilige Datenpaket zutrifft, können folgende sein:

  • ACCEPT: Das Paket wird angenommen.
  • DROP: Das Paket wird verworfen.
  • QUEUE: Verschiebt das Paket in die Benutzerprozesse; setzt einen Vermittler (queue handler) voraus, der die Pakete an eine Anwendung weiterleitet.
  • RETURN: Das Paket wird in die vorangegangene Kette zurückgeschickt, wenn es sich um eine benutzerdefinierte Kette handelt. In Standardketten wird die Richtlinie (policy) der Kette ausgeführt (ohne Konfiguration standardmäßig: ACCEPT).

Die bei der RETURN-Aktion erwähnten Standardketten sind in der iptables-Filtertabelle vorgegeben. Es handelt sich um die drei Ketten INPUT, FORWARD und OUTPUT. Erstere behandelt Pakete, die dem System zugestellt werden sollen, während die zweite ankommende Datenpakete bearbeitet, die für die Weiterleitung bestimmt sind. Die OUTPUT-Kette hingegen kontrolliert den Datenverkehr, der vom eigenen Computer erzeugt wird. Neben der Filtertabelle existieren im Übrigen eine NAT-Tabelle zur Übersetzung der Netzwerkadressen sowie eine MANGLE-Tabelle zur Paketmanipulation. Eine detaillierte Übersicht über die Funktionsweise der Paketfilter-Software bietet die Man-Page, die Sie jederzeit mit dem Kommando

man iptables

aufrufen können. Alternativ finden Sie auf netfilter.org zahlreiche iptables-How-tos in diversen Sprachen.

An dieser Stelle des iptables-Tutorials gehen wir auf die Filtertabelle und deren Regelwerk ein. Die untenstehende Tabelle enthält die einzelnen Befehle zum Erstellen und Verwalten von Ketten. Zur Regulierung des Datenverkehrs können Sie entweder eine eigene Kette erstellen oder auf die drei Standardketten INPUT, OUTPUT und FORWARD zurückgreifen. Das sind die wichtigsten Konfigurationsoptionen:

iptables-CommandsBeispielErklärung
-N "Name der Kette"sudo iptables -N testErstellt eine neue Kette mit dem Namen "test".
-X "Name der Kette"sudo iptables -X testLöscht die leere Kette mit dem Namen "test"; funktioniert nicht mit den Standardketten INPUT, OUTPUT und FORWARD.
-L "Name der Kette"sudo iptables -L testListet die Regeln der Kette mit dem Namen "test" auf.
-F "Name der Kette"sudo iptables -F testLöscht alle Regeln der Kette mit dem Namen "test".
-P "Name der Kette" "Aktion"sudo iptables -P INPUT ACCEPTLegt die Policy für die Kette fest. Im Beispiel wird das Paket automatisch angenommen, wenn die Filterregeln der Kette INPUT nicht greifen.
-A "Name der Kette" "Regel"sudo iptables -A test -s 127.0.0.1 -j DROPHängt eine neue Regel an die ausgewählte Kette an. Im Beispiel wird die Regel, Datenpakete von der IP-Adresse 127.0.0.1 zu verwerfen, der Kette "test" hinzugefügt.
-D "Name der Kette" "Regel"sudo iptables -D test -s 127.0.0.1 -j DROPLöscht die angegebene Regel der ausgewählten Kette.
-I "Name der Kette" "Position" "Regel"sudo iptables -I test 1 -s 127.0.0.1 -j DROPFügt die neue Regel an die ausgewählte Position der Kette ein; im Beispiel an Position 1.
-D "Name der Kette" "Position"sudo iptables -D test 1Löscht die Regel der ausgewählten Kette unter Angabe der Position dieser Regel; im Beispiel ebenfalls an Position 1.

Wie iptables mit Filterregeln zum Systemschutz beiträgt

Nun zeigen wir Ihnen die Möglichkeiten von iptables beispielhaft anhand der Einrichtung einer rudimentären Firewall. Da die drei Standardketten INPUT, OUTPUT und FORWARD je nach Distribution schon vordefinierte Regeln aufweisen, gilt es zunächst, diese zu löschen:

sudo iptables -F

Im zweiten Schritt fügen Sie für jede der drei Ketten die DROP-Policy hinzu, um sicherzustellen, dass Datenpakete in jedem Fall blockiert werden, insofern keine der aufgestellten Filterregeln zu einem positiven Ergebnis führt:

sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP

Als nächstes schalten Sie das eigene System, den localhost (lo), für den eingehenden (-i) und ausgehenden (-o) Datenverkehr frei (ACCEPT), indem Sie sowohl die INPUT- als auch die OUTPUT-Kette durch die entsprechende Regel erweitern (-A):

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

Anschließend geben Sie die Freigabe für ausgehende HTTP- und HTTPS-Verbindungen (Port 80 und Port 443) für die gängigen TCP-Ports 1024 bis 65535:

sudo iptables -A OUTPUT -o eth0 -p tcp --dport 80 --sport 1024:65535 -j ACCEPT
sudo iptables -A OUTPUT -o eth0 -p tcp --dport 443 --sport 1024:65535 -j ACCEPT

Im letzten Schritt lassen Sie alle eingehenden und ausgehenden Datenpakete zu, die zu einer bereits bestehenden Verbindung gehören (--state ESTABLISHED) oder sich auf eine bereits bestehende Verbindung beziehen (--state RELATED):

sudo iptables -A INPUT -i eth0 -m state -state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o eth0 -m state -state RELATED,ESTABLISHED -j ACCEPT

Da das mit iptables erstellte Regelwerk flüchtig ist und nur bis zum Ausschalten des Computers erhalten bleibt, sollten Sie Ihre Einstellungen mithilfe von iptables-save in der .rules-Datei im jeweiligen iptables-Verzeichnis sichern. Der passende Befehl lautet z. B. für Ubuntu-Systeme:

sudo iptables-save > /etc/iptables/iptables.rules

Mit der Eingabe des Befehls

sudo iptables-restore < /etc/iptables/iptables.rules

laden Sie diese Datei nun manuell nach jedem Neustart Ihres Systems. Alternativ können Sie ein entsprechendes Skript erstellen, damit die Paketfilter-Anwendung automatisch ausgeführt wird.

Für weitere Informationen zu Netzwerkfiltern und iptables empfehlen wir Ihnen einen Blick in das iptables-Tutorial „Linux-Praxisbuch: Linux Firewall mit IP-Tables“ in der freien Wikibooks-Bibliothek.