Next Previous Contents

5. Kontrollieren, worauf man NAT anwendet

Du musst NAT-Regeln erstellen, die dem Kernel sagen, was fuer Verbindungen er aendern soll, und wie er sie aendern soll. Um das zu tun, setzen wir das vielseitige iptables Tool ein und sagen ihm durch das Angeben der '-t nat' Option, dass es die NAT-Tabelle aendern soll.

Die Tabelle der NAT-Regeln enthaelt drei Listen, die 'Ketten' genannt werden: Alle Regeln werden der Reihe nach untersucht, bis eine davon zutrifft. Die drei Ketten heissen PREROUTING (fuer Destination NAT, da die Pakete hereinkommen), POSTROUTING (fuer Source NAT, da die Pakete ausgehen) und OUTPUT (fuer Destination NAT von lokal generierten Paketen).

Wenn ich irgendein kuenstlerisches Talent haette, wuerde dieses Diagramm es ganz gut zeigen:

 _____                                     _____
/     \                                   /     \
PREROUTING -->[Routing ]----------------->POSTROUTING----->
\D-NAT/     [Entscheidung]                \S-NAT/
              |                            ^
              |                          __|__
              |                         /     \
              |                        | OUTPUT|
              |                         \D-NAT/
              |                            ^
              |                            |
              -------->Lokaler Prozess------

Wenn ein Paket durchgeht, schauen wir an jedem der obigen Punkte nach, zu was fuer einer Verbindung es gehoert. Wenn es eine neue Verbindung ist, sehen wir in der entsprechenden Kette der NAT-Tabelle nach, was zu tun ist. Die Antwort, die wir erhalten, wird auf alle weiteren Pakete dieser Verbindung angewendet.

5.1 Einfache Auswahl mit iptables

iptables benoetigt eine Reihe von Standardoptionen, die weiter unten aufgelistet werden. Die Optionen mit einem doppelten Gedankenstrich koennen abgekuerzt werden, solange iptables sie danach noch von den anderen Optionen unterscheiden kann. Wenn Dein Kernel iptables als Modul unterstuetzt, wirst Du das 'iptables.o' Modul zuerst laden muessen: 'insmod iptables.o'.

Die wichtigste Option ist hier die, mit der man die Tabelle auswaehlen kann, '-t'. Fuer alle NAT Operationen wirst Du '-t nat' verwenden wollen, um in die NAT-Tabelle zu schreiben. Die zweitwichtigste Option ist das `-A', mit dem man eine neue Regel an das Ende einer Kette anhaengen kann (z.B. '-A POSTROUTING'), oder '-I', um eine Regel am Anfang einer Kette einzufuegen (z.B. '-I PREROUTING').

Du kannst die Quelle ('-s' oder '--source') und das Ziel ('-d' oder ('--destination') eines Pakets bestimmen, auf das Du NAT anwenden willst. Diesen Angaben kann eine einzelne IP-Adresse (z.B. 192.168.1.1), ein Name (z.B. www.gnumonks.org) oder ein Netzwerkadresse (z.B. 192.168.1.0/24 oder 192.168.1.0/255.255.255.0) folgen.

Du kannst die Schnittstelle bestimmen, an der Pakete eingehen ('-i' oder '--in-interface') oder ausgehen ('-o' oder '--out-interface'), aber welche von beiden haengt davon ab, in welche Kette Du diese Regel einfuegst: Bei der PREROUTING-Kette kannst Du nur die eingehende Schnittstelle waehlen, und bei der POSTROUTING-Schnittstelle (OUTPUT) nur die ausgehende. Wenn Du die falsche waehlst, wird iptables Dir eine Fehlermeldung geben.

5.2 Genauere Auswahl der betreffenden Pakete

Ich habe weiter oben gesagt, dass Du eine Quell- und eine Zieladresse bestimmen kannst. Wenn Du die Quelladresse weglaesst, wird jegliche Adresse zutreffend sein. Wenn Du die Zieladresse weglaesst, wird jegliche Zieladresse zutreffend sein.

Du kannst auch ein bestimmtes Protokoll ('-p' oder '--protocol') angeben, so wie TCP oder UDP; nur auf Pakete dieses Typs wird die Regel zutreffen. Der Hauptgrund hierfuer besteht darin, dass das Bestimmen eines Protokolls Extra-Optionen erlaubt: insbesondere die '--source-port' und die `--destination-port' Optionen (abgekuerzt als '-sport' und '-dport').

Diese Optionen erlauben Dir, zu bestimmen, dass eine Regel nur auf Pakete mit einem bestimmten Quell- oder Zielport zutrifft. Dies ist nuetzlich fuer umgeleitete Web-Anfragen (TCP-Port 80 und 8080) und laesst andere Pakete ausser Acht.

Diese Optionen muessen der '-p' Option folgen (welche den Nebeneffekt hat, dass die Erweiterungen fuer die shared libraries fuer das ent- sprechende Protokoll geladen werden). Du kannst Portnummern verwenden oder Namen aus der /etc/services Datei.

All die verschiedenen Eigenschaften, nach denen Du Pakete auswaehlen kannst, werden in schmerzhaften Einzelheiten detailliert in der Man-Page beschrieben (man iptables).


Next Previous Contents