• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Eingehende Pakete mittels iptables auf anderen Port umbiegen

antaeus

Newbie
Hallo zusammen.

Wie kann ich Pakete, die an meinen Rechner zu Port x geschickt werden so umbiegen, dass sie bei Port y herauskommen?

Meine Idee sah etwa so aus:

iptables -A INPUT -t nat -p udp --dport x -j DNAT --to-destination
192.168.0.21:y

Was eigentlich logisch erscheint, funktioniert aber nicht, da iptables den Regel ableht, da die INPUT Chain wohl kein DNAT "kann". Ich versuchte die PREROUTING Chain, also

iptables -A PREROUTING -t nat -p udp --dport x -j DNAT --to-destination
192.168.0.21:y

die Regel wird "gefressen" aber zeigt keine Wirkung.

Wie also kann ich eingehende Pakete umbiegen, dass sie an einem anderen Port herauskommen?

Danke und Gruß
 

Chris

Member
Ist da irgendwas in der Chain? Eine Firewall aktiv?
ggf. auch mal einen Log machen lassen (mit -j log bevor und ggf auch nachdem du umleitest). Wenn da nix kommt, ist vorher ein Ziel erreicht. Dann musst du irgendwo einfügen. Aber erst mal schaun.

MfG
Christian
 
OP
antaeus

antaeus

Newbie
Ok, danke! Das werde ich mal versuchen. Ich habe aber neulich schon mal etwas loggen lassen wollen und :D ich habe die log-files nicht gefunden *g* Wohin werden die denn verbuddelt?

Gruß!
 

Chris

Member
Standardmäßig wird nach /vaor/log/messages geloggt. (Kommt aber viel zusammen! Also sparsam verwenden.)

MfG
Christian
 
OP
antaeus

antaeus

Newbie
Da funktioniert irgendwas beim logging nicht. Wenn ich z.B. die Regeln

iptables -A INPUT -p udp --dport 5060 --sport 5060 -j LOG
iptables -A OUTPUT -p udp --dport 5060 --sport 5060 -j LOG

einfüge und danach iptables --list mache, erhalte ich diese Ausgabe auf die Konsole

Chain INPUT (policy ACCEPT)
target prot opt source destination
LOG udp -- anywhere anywhere udp spt:sip dpt:sip LOG level warning

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
LOG udp -- anywhere anywhere udp spt:sip dpt:sip LOG level warning

Man beachte die LOG level warnung... :(

_____

Aber zurück zu dem eigentlichen Problem: Ich habe sämtliche Regeln aus allen Tabellen / Chains gelöscht. D.h. ich habe einzig und allein die

iptables -A PREROUTING -t nat -p udp --dport 5060 --sport 5060 -j DNAT --to-destination 192.168.0.21:5063

Regel eingefügt. D.h. es kann zu keinen Seiteneffekten kommen. Aber ich kann trotzdem keinen Effekt der Regel erkennen. Mal eine Frage: Ist die Prerouting Chain überhaupt korrekt? Wird diese überhaupt von Paketen durchlaufen, die von außen zu einem Prozess, der lokal läuft, geschickt werden??

Gruß
 

Chris

Member
Hallo,

antaeus schrieb:
iptables -A PREROUTING -t nat -p udp --dport 5060 --sport 5060 -j DNAT --to-destination 192.168.0.21:5063

also ganz so würde ich es nicht machen. Ich würde mal überall den sport weg lassen. Grund: Der muss nicht zwingend mit dem dport übereinstimmen. (Darf er soweit ich weiß auch gar nicht. Meines Wissens wird der sport jedes mal neu (zufällig) ausgewählt, aber aus den hohen Ports, wo keine root-Reche nötig sind.)

Damit würde deine sport-Klausel alle Pakete abweisen, die du filtern/loggen willst.

Zum Thema "warning": Das ist unwichtig, ob emerg, info oder debug. Das gibt nur die Priorität im Syslogd an. In /var/log/messages landet eh alles.

Ach ja: Du sagst, du willst Pakete umleiten nach lokal? D.h. du hast einen Dienst, der auf "dem falschen Port" lauscht oder was? Das müsste sich vermutlich leichter in der jeweiligen Conf bearbeiten lassen (mutmaße ich einfach mal).

Und noch eine Sache: Wenn du Routest solltest du insbesondere die Chain FORWARD mit beachten. Da geht nämlich alles durch, was (durch-)geroutet wird. Wie das dann ist, wenn du an local routest, weiß ich nicht. Prüfen würde ich es aufjeden Fall.

MfG
Christian
 
OP
antaeus

antaeus

Newbie
Martin Breidenbach schrieb:
Naja... eine Regel die die verbogenen Pakete auch akzeptiert brauchst Du ja auch noch.

Ich denke nein. Bei mir ist die Standard Policy Accept für alle eingehenden Pakete! Oder verstehe ich dich falsch?

Chris schrieb:
also ganz so würde ich es nicht machen. Ich würde mal überall den sport weg lassen. Grund: Der muss nicht zwingend mit dem dport übereinstimmen. (Darf er soweit ich weiß auch gar nicht. Meines Wissens wird der sport jedes mal neu (zufällig) ausgewählt, aber aus den hohen Ports, wo keine root-Reche nötig sind.)
Destination und Source Port sind in meinem Fall identisch... Das kann ich im Ethereal Trace sehen.

Chris schrieb:
Ach ja: Du sagst, du willst Pakete umleiten nach lokal? D.h. du hast einen Dienst, der auf "dem falschen Port" lauscht oder was? Das müsste sich vermutlich leichter in der jeweiligen Conf bearbeiten lassen (mutmaße ich einfach mal).
Genau. Von Server gehen Pakete an den Client, der auf Port X wartet. Ein anderes Programm soll die Pakete aber empfangen und lauscht auf Port y. Also muss ich die Pakete von dport x zu dport y umbiegen.

Chris schrieb:
Und noch eine Sache: Wenn du Routest solltest du insbesondere die Chain FORWARD mit beachten. Da geht nämlich alles durch, was (durch-)geroutet wird. Wie das dann ist, wenn du an local routest, weiß ich nicht. Prüfen würde ich es aufjeden Fall.
 
OP
antaeus

antaeus

Newbie
Martin Breidenbach schrieb:
Naja... eine Regel die die verbogenen Pakete auch akzeptiert brauchst Du ja auch noch.

Ich denke nein. Bei mir ist die Standard Policy Accept für alle eingehenden Pakete! Oder verstehe ich dich falsch?

Chris schrieb:
also ganz so würde ich es nicht machen. Ich würde mal überall den sport weg lassen. Grund: Der muss nicht zwingend mit dem dport übereinstimmen. (Darf er soweit ich weiß auch gar nicht. Meines Wissens wird der sport jedes mal neu (zufällig) ausgewählt, aber aus den hohen Ports, wo keine root-Reche nötig sind.)
Destination und Source Port sind in meinem Fall identisch... Das kann ich im Ethereal Trace sehen.

Chris schrieb:
Ach ja: Du sagst, du willst Pakete umleiten nach lokal? D.h. du hast einen Dienst, der auf "dem falschen Port" lauscht oder was? Das müsste sich vermutlich leichter in der jeweiligen Conf bearbeiten lassen (mutmaße ich einfach mal).
Genau. Von Server gehen Pakete an den Client, der auf Port X wartet. Ein anderes Programm soll die Pakete aber empfangen und lauscht auf Port y. Also muss ich die Pakete von dport x zu dport y umbiegen.

Chris schrieb:
Und noch eine Sache: Wenn du Routest solltest du insbesondere die Chain FORWARD mit beachten. Da geht nämlich alles durch, was (durch-)geroutet wird. Wie das dann ist, wenn du an local routest, weiß ich nicht. Prüfen würde ich es aufjeden Fall.
 
Oben