Die Komponenten netfilter und iptables sind verantwortlich für das Filtern und Bearbeiten von Netzwerkpaketen sowie für NAT (Network Address Translation, Übersetzung der Netzwerkadressen). Die Filterkriterien und alle dazugehörigen Aktionen werden in Ketten gespeichert, die nacheinander mit den einzelnen eingehenden Netzwerkpaketen verglichen werden müssen. Die für den Vergleich zu verwendenden Ketten werden in Tabellen gespeichert. Mit dem Befehl iptables können Sie diese Tabellen und Regelsätze bearbeiten.
Der Linux-Kernel verwaltet drei Tabellen, wobei jede einzelne für eine bestimmte Kategorie von Funktionen des Paketfilters dient:
Diese Tabelle enthält die meisten Filterregeln, da sie die eigentliche Paketfilterung implementiert. Hier wird u. a. entschieden, welche Pakete durchgelassen (ACCEPT) oder abgelehnt (DROP) werden.
In dieser Tabelle werden alle Änderungen an den Quell- und Zieladressen von Paketen definiert. Mithilfe dieser Funktionen können Sie das Masquerading implementieren, bei dem es sich um einen Spezialfall von NAT handelt und der eingesetzt wird, um private Netzwerke mit dem Internet zu verbinden.
Die Regeln in dieser Tabelle ermöglichen das Bearbeiten von Werten, die in IP-Headern gespeichert sind (z. B. den Typ des Diensts).
Abbildung 35-1 iptables: Die möglichen Wege eines Pakets
Diese Tabellen enthalten mehrere vordefinierte Ketten, mit denen die Pakete verglichen werden:
Diese Kette wird auf eingehende Pakete angewendet.
Diese Kette wird auf Pakete angewendet, die an interne Prozesse des Systems adressiert sind.
Diese Kette wird auf Pakete angewendet, die durch das System nur weitergeleitet werden.
Diese Kette wird auf Pakete angewendet, die aus dem System selbst stammen.
Diese Kette wird auf alle ausgehenden Pakete angewendet.
Abbildung 35-1 zeigt die Wege, die ein Netzwerkpaket auf einem System durchlaufen kann. Der Einfachheit halber werden in dieser Abbildung die Tabellen als Teile von Ketten dargestellt. In Wirklichkeit sind diese Ketten jedoch in den Tabellen selbst enthalten.
Im einfachsten aller möglichen Fälle geht ein eingehendes Paket, das an das System selbst adressiert ist, an der Schnittstelle eth0 ein. Das Paket wird zunächst an die Kette PREROUTING der Tabelle mangle und anschließend an die Kette PREROUTING der Tabelle nat weitergegeben. Im folgenden Schritt des Paket-Routings wird ermittelt, dass das tatsächliche Ziel des Pakets ein Prozess des Systems selbst ist. Nach den INPUT-Ketten der Tabellen mangle und filter erreicht das Paket schließlich sein Ziel, vorausgesetzt, dass es tatsächlich den Regeln der Tabelle filter entspricht.