Masquerading/NAT mit Iptables – 3. Chains und Tables

iptables kennt 5 Chains (PREROUTING / INPUT / FORWARD / OUTPUT / POSTROUTING) die abhaengig vom Routing (Routing Decision) durchlaufen werden.
In jeder Chain gibt es verschiedene Tabellen (raw / nat / filter / mangle) in denen Regeln eingetragen
werden koennen die auf die Pakete angewendet werden die die jeweilige chain durchlaufen.
Nicht jede Tabelle ist in jeder Chain vorhanden.

Die unten aufgelisteten Befehle zeigen alle Kombinationsmoeglichkeiten.

iptables -t raw -L
iptables -t raw -L PREROUTING
iptables -t raw -L OUTPUT
iptables -t nat -L
iptables -t nat -L PREROUTING
iptables -t nat -L OUTPUT
iptables -t nat -L POSTROUTING
iptables -t filter -L
iptables -t filter -L INPUT
iptables -t filter -L FORWARD
iptables -t filter -L OUTPUT
iptables -t mangle -L
iptables -t mangle -L PREROUTING
iptables -t mangle -L INPUT
iptables -t mangle -L FORWARD
iptables -t mangle -L OUTPUT
iptables -t mangle -L POSTROUTING

iptables

Beispiel 1: Rechner empfaengt ein Paket fuer ein anderes Netz.
Der Rechner empfaengt ein Paket zuerst geht dieses durch die PREROUTING Chain, hier git es eine raw / nat und mangle Tabelle in der Anweisungen stehen koennen was mit dem Paket gemacht werden soll. Danach kommt das Paket in die input Chain , hier wird entschieden (Routing Decision) ob das Packet fuer den Rechner selber bestimmt ist (z.b zugriff auf einen Proxy oder eine ssh Verbindung) oder ob es an andere Rechner bzw Netze weitergeleitet wird. Ist das Packet fuer ein anderes Netz bestimmt tritt es danach in die Forward Chain wo wiederum eine filter / mangle Tabelle vorhanden ist in der Anweisungen stehen koennen was mit dem Paket gemacht werden soll. Danach geht das Paket weiter in die Postrouting Chain in der dann eine nat und eine mangle Tabelle vorhanden ist in der Anweisungen stehen was mit dem Paket gemacht werden soll. Von dort wird das Paket dann weitergesendet.

Beispiel 2: Rechner empfaengt ein Paket das fuer in selbst Bestimmt ist.
Der Rechner empfaengt ein Paket zuerst geht dieses durch die PREROUTING Chain, hier git es eine raw / nat und mangle Tabelle in der Anweisungen stehen koennen was mit dem Paket gemacht werden soll.Danach kommt das Paket in die input Chain , hier wird entschieden (Routing Decision) ob das Packet fuer den Rechner selber bestimmt ist (z.b zugriff auf einen Proxy oder eine ssh Verbindung) oder ob es an andere Rechner bzw Netze weitergeleitet wird. Ist das Paket fuer den Rechner selbst bestimmt dann werden in der input chain die Anweisungen angewendet die in einer filter und in einer mangle Tabelle eingetragen sind. Danach ereicht das Paket das Betriebssystem des Hosts und wird dort entgegengenommen. Wenn vom Host selber ein Paket ausgesand wird, z.b weil auf dem Host ein Proxy laeuft, dann tritt dieses Paket ueber dieses als erste in die
Output Chain ein. Dort ist dann eine raw / nat / filter / mangle Tabelle vorhanden in der Anweisungen stehen koennen was mit dem Paket gemacht werden soll. Danach kommt es in die Postrouting Chain in der eine nat / mangle Tabelle vorhanden ist in der Anweisungen stehen koennen was mit dem Palet gemacht werden soll. Von dort wird das Paket dann weitergesendet.