IPTables zur Portumleitung verwenden

ErrorKid

Cadet 4th Year
Registriert
Aug. 2010
Beiträge
124
Hallo Leute,

ich hab keine Ahnung wo ich es Posten soll - ob Netzwerk, Android oder Linux - aber ich denke es betrifft nun mal am meisten Linux.

Ich habe eine App die sich nur über den Port 445 mit meinem Fileserver verbindet.
Nun benutze ich aber einen SSH-Tunnel. Leider ist es nicht möglich einen Port unter 1064 zu tunneln also habe ich mir gedacht, leite ich einfach den Port 445 auf einen Port > 1064 um.

Meine Vorstellung:
APP möchte über Port 445 nach außen -> 445 wird auf 4445 durch iptables umgeleitet -> 4445 wird über SSH auf den Zielport 445 getunnelt

Jetzt habe ich zum testen einfach mal den Port 80 auf 8080 umgeleitet
iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -j REDIRECT --to-ports 8080
Und dann einen Tunnel aufgemacht der von 8080 auf fritzbox:80 weiterleitet.
Wenn ich das jetzt richtig verstanden habe sollte ich jetzt eigentlich im Browser (Handy) "localhost" eingeben können und ich sollte bei meiner Fritzbox auf Port 80 ankommen.
Aber leider funktioniert es so nicht und ich hab nicht wirklich eine Ahnung wo ich "stecken bleibe"

Hoffe ihr versteht ungefähr mein Problem ;)
Grüße ErrorKid
 
Wenn ich richtig verstehe was du geschrieben hast, probiers mal mit localhost:8080

du scheinst ja, den local Port 8080 auf fritzbox:80 getunnelt zu haben ;)
 
Nein nein genau das will ich ja mit den iptables erreichen.. dass ich localhost eingebe - und es aber über 8080 gesendet wird.
 
Ja aber schau trotzdem mal ob du auf localhost:8080 kommst. Dann weisst du zumindest ob der SSH Tunnel richtig funzt und es nur an den Iptables liegt.
 
iptables -A PREROUTING -t nat -i wlan0 -p tcp --dport 80 -j REDIRECT --to-port 8080

Du hast bei dir noch hinter port ein s (--to-ports 8080)
Oder ist das hier nur ein Schreibfehler?
 
Der Tunnel funktioniert, das weiß ich. Hm ja das s ist eigentlich absichtlich da, da ich in einem thread gelesen habe, dass es nur so geht und da ich den Parameter so nicht in der Hilfe gefunden habe und ich auch keinen Fehler bekam bin ich ständig davon ausgegangen dass es so richtig war - ich probiers mal ohne s
 
Du kannst ja überprüfen ob es geklappt hat.

Code:
iptables -t nat -L
Dort müsste diese Regel dann aufgeführt sein. Mir ist die "s" Variante auch nicht bekannt und ich nutze auch die ohne "s".
 
Okay also so wie ich das sehe scheinen die IP-Tables nicht so ganz in meiner Rom integriert zu sein. Vor dem Befehl:

vorher-png.281538


Nach dem Befehl:

nachher-png.281539


Jetzt hab ich soweit aber rausgefunden, dass der fehler nichts dramatisches ist - gehen tuts trotzdem nicht.. Kann es sein das der Traffic schon getunnelt ist bevor die Regel überhaupt greift?
 

Anhänge

  • vorher.PNG
    vorher.PNG
    7,6 KB · Aufrufe: 781
  • nachher.PNG
    nachher.PNG
    15,2 KB · Aufrufe: 803
Du könntest dir sonst auch mal die App Droidwall angucken.
Obwohl mich interessiert, ob es auch so geht.

Ich habe leider zur Zeit kein Smartphone zum probieren :(
 
Mit DroidWall könnte ich höchstens schauen ob IPTables überhaupt funktionieren oder? Soweit ich das weiß kann man damit ja keine Portweiterleitung machen :/

EDIT:

Also IPTables sollten funktionieren da DroidWall-Regeln greifen - jetzt muss ich wohl nur noch die Portweiterleitung zum laufen bekommen ;)
 
Zuletzt bearbeitet:
mal zum Verständnis.

Du baust dir mithilfe eines SSH-Tunnels die Verbindung zum Fileserver auf. Die APP muss auf Port 445 auf den Fileserver zugreifen.
Du versuchst nun, den AUSGEHENDEN Traffic via iptables umzubiegen, auf einen Port >1064,


Das wird deine Firewall nicht sonderlich jucken, weil du ja den SSH Tunnel benutzt, und der läuft ja über den SSH Port (also i.d.R. Port 22). Also deine Firewall (iptables) weiß nichts von port 4445 ;)

Also, wenn ich dich richtig verstehe, ist das was du vorhast schon von der Logik her nicht möglich.
Falls ich dich falsch verstehen sollte, bitte um erklärung ;)
 
Schon fast richtig.
Die App funktioniert nur auf Port 445, sämmtlicher Traffic der über Port 445 geht soll auf einen Port der > 1064 ist (aufgrund der Android beschränkungen) umgeleitet werden (hier mal 4445 genommen).
Nun soll sämtlicher Traffic der über Port 4445 raus will, getunnelt werden. Und zwar soll er wieder auf den Zielport 445 getunnelt werden. Also von 4445 auf fileserver:445.
Meiner Logik nach sollte das funktionieren.

Was hat meine Firewall damit zu tun? Wegen DroidWall? Das war nur ein Test ob IPTables grundsätzlich in meiner ROM funktionieren.
Ergänzung ()

Recht interessante Wendung in meinem Fall:

Habe jetzt noch ein bisschen rumprobiert und habe es geschafft mit "Better Terminal Emulator Pro" einen Port unter 1024 weiter zu leiten. Damit funktioniert jetzt auch die Dateifreigabe durch den Tunnel einwandfrei!

Wichtig hierbei ist, dass man in der App Better Terminal Emulator als Shell "bash" oder "almquist Shell" einstellt! Mit der Android Shell geht es nämlich nicht. Man bekommt einen "Bad TCP forward"-fehler (ich vermute wegen Port).
Nun ja einmal im Shell angekommen einfach mit
ssh -L 455:zielrechner:445 root@sshserver.de/sshport (sollte er abweichen wie bei mir)

Am Server anmelden, Sitzung geöffnet lassen und zb. Mit dem ES Datei Explorer einfach auf die Freigabe zugreifen indem als Serverip "lcalhost" oder 127.0.0.1 eingetragen wird. Fertig :) und das alles ohne iptables :P
 
Zurück
Oben