iptables - portforwarding von interner ip

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
copter
Beiträge: 26
Registriert: 31.01.2004 15:48:38
Kontaktdaten:

iptables - portforwarding von interner ip

Beitrag von copter » 16.03.2008 15:10:42

Hallo,
erstmal vornweg: Die Suche hab ich schon bemüht und bin nicht so richtig fündig geworden.

Ich habe follgendes Szenario:

Rechner poseidon - 192.168.123.1 (ip von eth0) ist Internet-Gateway/NAT-Router: internet -- ppp0 - eth0 -- lan
ppp0=xxx.homeunix.org
Rechner hera - 192.168.123.2 ist MailServer wo IMAP über SSL auf Port 993 läuft

Der Port 993 soll von poseidon nach hera weitergeleitet werden.
Hier die dazugehörige iptables von poseidon http://nopaste.debianforum.de/7662

Von einem externen Rechner kann ich mich problemlos auf den Mailserver xxx.homeunix.org über Port 993 verbinden -> Portforwarding funktioniert soweit.

Mein Problem
Wenn ein interner Rechner (192.168.123.x) den Mailserver auf xxx.homeunix.org ansprechen möchte, kann er sich nicht verbinden.

Ich hoffe mir kann jemand helfen.
Danke schonmal

Gruss

storm
Beiträge: 1581
Registriert: 01.05.2004 13:21:26
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DE

Re: iptables - portforwarding von interner ip

Beitrag von storm » 16.03.2008 15:58:38

copter hat geschrieben:Mein Problem
Wenn ein interner Rechner (192.168.123.x) den Mailserver auf xxx.homeunix.org ansprechen möchte, kann er sich nicht verbinden.
Das müsstest du schon etwas ausführlicher erklären, kann der interne Rechner den Mailserver überhaupt sehen (ping)? Wenn du mit dem internen Rechner auf den Mailserver per xxx.homeunix.org zugreifst, muss dein router natürlich zur passende Adresse auflösen, d.h. der router liefert wahrscheinlich für xxx.homeunix.org die externe ip, also musst du die Abfrage entweder per /etc/host auf dem router abfangen (xxx.homeunix.org löst zur internen ip auf) oder du musst eine passende Weiterleitung mit iptables erstellen. Ersteres wäre imo besser.
Meintest du das?

ciao, storm
drivers/ata/libata-core.c: /* devices which puke on READ_NATIVE_MAX */

copter
Beiträge: 26
Registriert: 31.01.2004 15:48:38
Kontaktdaten:

Re: iptables - portforwarding von interner ip

Beitrag von copter » 16.03.2008 16:22:08

Das müsstest du schon etwas ausführlicher erklären, kann der interne Rechner den Mailserver überhaupt sehen (ping)?
Ja, das funktioniert. Über die interne IP 192.168.123.2 kann ich den Rechner von jedem Rechner im gleichen Subnetz anpingen. Wenn ich die Mailabfrage direkt an die IP 192.168.123.2 richte geht das auch problemlos -> IMAP-Server funktioniert.

Die interne Adresse fest in die Clients einzutragen ist auch nicht sonderlich toll, da z.B. Notebooks von extern und von intern zugreifen -> man müsste jedesmal andere Einstellungen eintragen.
Wenn du mit dem internen Rechner auf den Mailserver per xxx.homeunix.org zugreifst, muss dein router natürlich zur passende Adresse auflösen, d.h. der router liefert wahrscheinlich für xxx.homeunix.org die externe ip, also musst du die Abfrage entweder per /etc/host auf dem router abfangen (xxx.homeunix.org löst zur internen ip auf)
So hab ich es übergangsweise auch eingerichtet. Aber gefällt mir nicht, da dann der öffentliche Name xxx.homeunix.org für interne Rechner immer nach 192.168.123.2 verweist. Es ist angedacht, dass auf ner anderen IP andere Serverdienste (Web etc) erreichbar sind und die entsprechenden ports von xxx.homeunix.org dann ebenfalls an die internen Rechner geleitet werden.
oder du musst eine passende Weiterleitung mit iptables erstellen.
Meintest du das?
Genau das habe ich vor. Aber da hängts grad ;-)


Gruss

storm
Beiträge: 1581
Registriert: 01.05.2004 13:21:26
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DE

Beitrag von storm » 17.03.2008 19:12:16

Ganz so einfach ist das nicht, gerade wenn schon komplexes iptables-Setup existiert. Aber die Doku [1] geht da auch drauf ein. Du musst das natürlich auf deine Bedürfnisse anpassen, das hier ist die minimale Variante:

Code: Alles auswählen

iptables -A FORWARD -d $IMAP_IP -j ACCEPT
iptables -t nat -A POSTROUTING -p tcp --src $LOCAL_NET/24 --dst $IMAP_IP --dport 993 -j SNAT --to-source $ROUTER_IP
Die erste Regel sorgt dafür, dass das Paket überhaupt drin bleibt und den entsprechenden Ausgang bekommt, die zweite Regel ändert die Herkunftsadresse auf die des Routers, für den Server kommt die Anfrage damit vom router. Am besten noch LOG-Regeln vor den eigentlichen rules einfügen, damit das erstmal nachvollziehbar wird.
Mir selbst ist bei dieser Variante nicht richtig wohl, aus verschiedenen Gründen:
  • fällt die dynamische Auflösung mal aus, kannst du mit keinem Rechner (extern/intern) den Server erreichen, es sei denn du legst wieder Hand an
  • für den Server kommen alle Anfragen von der router-Adresse, egal ob berechtigt oder nicht. Damit kannst du dir das Logging schon sparen, da es eh nichts bringt
  • den Traffic, wenn vielleicht auch wenig anfällt, zwingst du so immer über den router, d.h. erhöhte Last und single point of failure
  • die Postrouting-Regel enthält hier schon die Bedingung "src=lokales Netz": fehlt diese, ist es nicht schwer sich selbst in den Fuß zu schießen und mit etwas rules-Kuddelmuddel einen offenen relay zu produzieren.
Aber möglicherweise bin ich auch etwas übervorsichtig, bei eigener Frickelei mit iptables kamen immer mal wieder seltsame Ergebnisse zustande. *g


ciao, storm


[1] http://iptables-tutorial.frozentux.net/ ... x4033.html
drivers/ata/libata-core.c: /* devices which puke on READ_NATIVE_MAX */

Antworten