Du musst NAT-Regeln erstellen, die dem Kernel sagen, was für
Verbindungen er ändern soll, und wie er sie ändern 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 ändern soll.
Die Tabelle der NAT-Regeln enthält drei Listen, die Ketten genannt
werden: Alle Regeln werden der Reihe nach untersucht, bis eine davon
zutrifft. Die drei Ketten heißen PREROUTING (für Destination NAT, da
die Pakete hereinkommen), POSTROUTING (für Source NAT, da die Pakete
ausgehen) und OUTPUT (für Destination NAT von lokal generierten
Paketen).
Wenn ich irgendein künstlerisches Talent hätte, würde 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 für einer Verbindung es gehört. 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.
iptables benötigt eine Reihe von Standardoptionen, die weiter unten
aufgelistet werden. Die Optionen mit einem doppelten Gedankenstrich
können abgekürzt werden, solange iptables sie danach noch von den
anderen Optionen unterscheiden kann. Wenn Dein Kernel iptables als
Modul unterstützt, wirst Du das iptables.o Modul zuerst laden
müssen: insmod iptables.o.
Die wichtigste Option ist hier die, mit der man die Tabelle auswählen
kann, -t. Für 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
anhängen kann (z.B. -A POSTROUTING), oder -I, um eine Regel am
Anfang einer Kette einzufügen (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. http://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 hängt davon ab, in welche Kette Du diese Regel
einfügst: Bei der PREROUTING-Kette kannst Du nur die eingehende
Schnittstelle wählen, und bei der POSTROUTING-Schnittstelle (OUTPUT)
nur die ausgehende. Wenn Du die falsche wählst, wird iptables Dir
eine Fehlermeldung geben.
|
Ich habe weiter oben gesagt, dass Du eine Quell- und eine Zieladresse
bestimmen kannst. Wenn Du die Quelladresse weglässt, wird jegliche
Adresse zutreffend sein. Wenn Du die Zieladresse weglässt, 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 hierfür besteht darin, dass das
Bestimmen eines Protokolls Extra-Optionen erlaubt: insbesondere die
--source-port und die --destination-port Optionen (abgekürzt 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
nützlich für umgeleitete Web-Anfragen (TCP-Port 80 und 8080) und
lässt andere Pakete außer Acht.
Diese Optionen müssen der -p Option folgen (welche den Nebeneffekt
hat, dass die Erweiterungen für die shared libraries für das
entsprechende Protokoll geladen werden). Du kannst Portnummern verwenden
oder Namen aus der /etc/services Datei.
All die verschiedenen Eigenschaften, nach denen Du Pakete auswählen
kannst, werden in schmerzhaften Einzelheiten detailliert in der
Man-Page beschrieben (man iptables).
|
|