Sorry an alle von Euch, die noch immer geschockt sind vom Übergang
von 2.0 (ipfwadm) auf 2.2 (ipchains). Es gibt gute und schlechte
Neuigkeiten.
Zuerst einmal kannst Du ipfwadm und ipchains wie gewohnt
weiterbenutzen.Um das zu tun, musst Du das ipchains.o oder
ipfwadm.o Kernelmodul aus der letzten netfilter-Distribution laden
(insmod). Diese beiden schließen sich gegenseitig aus (Du bist
gewarnt) und sollten nicht mit anderen netfilter-Modulen kombiniert
werden.
Sobald eins dieser Module installiert ist, kannst Du ipchains und
ipfwadm wie gewohnt benutzen, mit den folgenden Unterschieden:
-
Das Masquerading Timeout mit ipchains -M -S, oder mit ipfwadm -M
-S, zu setzen, bringt nichts. Da die neuen Timeouts der neuen
NAT-Infrastruktur länger sind, sollte das aber egal sein.
-
Die init_seq, delta und previous_delta Felder in der ausführlichen
Masqueradingliste sind immer Null.
-
Gleichzeitig die Zähler auflisten und auf Null setzen (-Z -L)
funktioniert nicht mehr: Die Zähler werden nicht zurückgesetzt.
Für Hacker:
-
Du kannst jetzt auch Ports von 61000-65095 einbinden, sogar wenn Du
Masquerading machst. Der Masquerading Code hatte früher
angenommen, dass alles im diesem Bereich freigehalten werden
sollte, so dass Programme ihn nicht nutzen konnten.
-
Der (undokumentierte) getsockname Hack, welchen man nutzen
konnte, um bei transparenten Proxies das wirkliche Ziel
herauszufinden, funktioniert nicht mehr.
-
Der (undokumentierte) bind-to-foreign-address Hack ist auch nicht
implementiert; dies wurde verwendet, um die Illusion von
transparenten Proxies komplett zu machen.
Das ist das, was die meisten Leute wollen. Wenn Du durch eine
PPP-Verbindung eine dynamische IP-Adresse hast (wenn Du das nicht weißt,
dann hast Du eine), möchtest Du Deinem Rechner einfach sagen, dass
alle Pakete, die aus Deinem internen Netzwerk kommen, so aussehen
sollen, als ob sie von dem Rechner mit der PPP-Verbindung kommen
würden.
|
# Das NAT-Modul laden (dies zieht all die andern mit).
modprobe iptable_nat
# In der NAT-Tabelle (-t nat) eine Regel für alle an ppp0 (-o ppp0)
# ausgehenden Pakete hinter dem Routing (POSTROUTING), die maskiert
# werden sollen, anhängen (-A).
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# IP-Forwarding aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward
|
Beachte, dass Du hier keine Pakete filterst: hierzu lese das
Paket-Filtering-HOWTO: Kombinieren von NAT und Paketfiltern.
|
Das ist eine verzwicktere Sache, und ich habe mir hier keine grossen
Sorgen um die Rückwärts-Kompatibilität gemacht. Um Port-Forwarding
zu verwenden, kannst Du einfach iptables -t nat benutzen. Unter
Linux 2.2 hättest Du es zum Beispiel so machen können:
|
# Linux 2.2
# TCP-Pakete, die an 1.2.3.4 Port 8080 gehen, an 192.168.1.1 Port 80
# weiterleiten
ipmasqadm portfw -a -P tcp -L 1.2.3.4 8080 -R 192.168.1.1 80
|
Jetzt würdest Du folgendes tun:
|
# Linux 2.4
# Eine Pre-Routing (PREROUTING) Regel an die NAT-Tabelle (-t nat)
# anhängen (-A), die besagt, dass alle TCP-Pakete (-p tcp) für 1.2.3.4
# (-d 1.2.3.4) Port 8080 (--dport) auf 192.168.1.1:80
# (--to 192.168.1.1:80) gemappt werden (-j DNAT).
iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 8080 \
-j DNAT --to 192.168.1.1:80
|
Wenn Du willst, dass diese Regel auch lokale Verbindung verändert
(ich meine, wenn sogar auf dem NAT-Rechner selbst ein Telnet auf
1.2.3.4 Port 8080 an 192.168.1.1 Port 80 geleitet wird), kannst Du
diese Regel in die OUTPUT-Kette (für lokal ausgehende Pakete)
einfügen:
|
# Linux 2.4
iptables -A OUTPUT -t nat -p tcp -d 1.2.3.4 --dport 8080 \
-j DNAT --to 192.168.1.1:80
|
|
|