PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : lokales Portforwarding per IPTables



Thovan
25.05.09, 14:28
Hallo,

ich lese mich gerade in IPTables ein und suche eine Lösung für das folgende Problem:

Ich möchte Verbindungen, die von einer ganz bestimmten IP-Adresse (Bsp.: 192.168.1.5) an einen ganz bestimmten Port kommen auf einen anderen Port umleiten, während alle anderen Clients unverändert bleiben

Also in etwa so:


.--[CLIENT]--. .-(IPTABLES)-. .--[SERVER]---.
|192.168.1.5 |==Port:25=>| |==Port:10025=>| |
| |<=Port:25==| |<=Port:10025==| |
°------------° °------------° °-------------°



.--[CLIENT]--. .-(IPTABLES)-. .--[SERVER]---.
|x.x.x.x |==Port:25=>| |==Port:25=>| |
| |<=Port:25==| |<=Port:25==| |
°------------° °------------° °-------------°


.--[CLIENT]--. .-(IPTABLES)-. .--[SERVER]---.
|x.x.x.x |==Port:10025=>| |==Port:10025=>| |
| |<=Port:10025==| |<=Port:10025==| |
°------------° °------------° °-------------°


Bis jetzt habe ich folgendes:
iptables -A INPUT -p 25 -s 192.168.1.5 -i ethX -j REDIRECT --to-port 10025

Habe ich das so richtig verstanden?

Muss ich noch etwas beachten?

Ach ja: Werden lokale Verbindungen auch durch iptables abgewickelt?

JAF
25.05.09, 21:36
am ersten blick sage ich ja, sollte so funktionieren.


Ach ja: Werden lokale Verbindungen auch durch iptables abgewickelt?

ja, es kommt immer nur darauf an, welche chain du verwendet.
mit INPUT + OUTPUT: damit werden zum beispiel pakete verarbeitet, die DIREKT für das gerät bestimmt sind auf dem iptables läuft bzw. von diesem rechner weggeht (output), also AN bzw. VON einem lokem prozess geht/kommt.

hat du deine regel schon getestet?

Thovan
25.05.09, 22:12
am ersten blick sage ich ja, sollte so funktionieren.



ja, es kommt immer nur darauf an, welche chain du verwendet.
mit INPUT + OUTPUT: damit werden zum beispiel pakete verarbeitet, die DIREKT für das gerät bestimmt sind auf dem iptables läuft bzw. von diesem rechner weggeht (output), also AN bzw. VON einem lokem prozess geht/kommt.

hat du deine regel schon getestet?

Im Prinzip geht es mir auch nur um die Firewall einer "lokalen Maschine" - also kein Router/Gateway.

Na dann spiel ich einfach mal mit iptables.

HirschHeisseIch
25.05.09, 22:13
Auf den ersten Blick sage ich nein. Wird so nicht funktionieren. ;)


-p, --protocol [!] protocol
The protocol of the rule or of the packet to check. (...)

Der Port wird mit --dport angegeben.

Thovan
26.05.09, 07:15
Auf den ersten Blick sage ich nein. Wird so nicht funktionieren. ;)



Der Port wird mit --dport angegeben.

Ahh ... OK, dann hatte ich den Parameter fehlgedeutet.
Im HowTo, was ich gelesen habe stand auch zum Beispiel -p http.
Da dachte ich, man kann den Port numerisch oder eben über einen Bezeichner angeben (ich glaube bei CISCOs ACLs geht sowas) - nur hatte ich nicht rausgefunden wo für iptables die Zuordnung der Bezeichner festgelegt wird.

Gemäß IPTables-Manpage würde das Beispiel aus dem HowTo aber nicht funktionieren, da in der Datei /etc/protocols httpd nicht festgelegt wird.

Thovan
26.05.09, 10:59
Die korrekte Regel muss lauten:
iptables -t nat -A PREROUTING -p --dport 25 -s 192.168.1.5 -j REDIRECT --to-port 10025


Ach ja: Werden lokale Verbindungen auch durch iptables abgewickelt?



ja, es kommt immer nur darauf an, welche chain du verwendet.

Kann man sich dann darauf verlassen, dass lokale Verbindungen - also zu Diensten die auf der gleichen Maschine installiert sind - per se immer von 127.0.0.1 kommen, außer wenn die Verbindung explizit über ein Netzwerkinterface aufgebaut wird?

Oder wird das differenziert je nachdem wie die Maschine als Ziel der Verbdinung angegeben wurde?
(Also bei Verbindung zu 127.0.0.1 oder localhost ist auch die Quelle localhost und bei Verbindungen zu Hostname / externe IP ist es der tatsächliche Hostname/ die Netzwerk-IP?)