ssh tunnel aufbauen [4newbies as well]

Dieses Thema im Forum "Howtos & Wiki" wurde erstellt von dzi, 22 Juli 2003.

  1. dzi

    dzi Guest

    Zum thema ssh hab ich bereits einige Beiträge gesehen, jedoch konnte ich nichts über tunnels finden und hab mir gedacht, dass man das doch mal erklären sollte.

    Nehmen wir folgende topologie an.

    Der Server "rambo" und "sam" stehen hinter einer firewall welche mit relativ strengen regeln aufgesetzt ist. Nehmen wir auch an "rambo" ist ein w2k server und kann lediglich über Terminal service erreicht werden. "sam" hingegen ist ein unix/linux server und ist über ssh erreichbar. Erlaubt ist die eingehende verbindung über ssh zu "sam".

    Die firewall erlaubt es "sam" über den port 3389 (terminal services) eine Verbindung zu "rambo" aufzubauen. Aber nicht vom rest der welt.

    Laut Firewall ist es nicht möglich "rambo" mit rdesktop (ts-client für unix, sehr zu empfehlen(wenns ähnliches benötigt wird)).
    Wir gehen auch davon aus das unser admin (pc/laptop) ein unix oder linux installiert hat und über den ssh client und rdesktop verfügt.

    Der admin baut nun einen ssh tunnel zu "sam" auf, welcher denn port 3389 auf den localhost (admin pc) durchschleift. Sprich, der admin wird nach aufbau des tunnels eine verbindung auf diesen Port auf seinen eigenen PC aufbauen welcher aber nicht wirklich der localhost ist, sonder "rambo".

    adminpc# ssh -2 -N -f -l samsuser -L3389:rambo:3389 sam

    wichtig ist dass

    1. samuser auf sam existiert und berechtigt per ssh verbindungen aufzubauen.

    2. Der host rambo in der /etc/hosts existiert, wenn nicht die ip von rambo genutzt wurde.

    3. in diesen Fall Protocol 2 von sshd akzepiert wird

    auf die schalter gehe ich später ein...

    Der Admin erstellt, nach erfolgreicher authentifizierung, nun die verbindung zu "rambo" mit rdesktop auf.

    adminpc# rdesktop -kde localhost

    nun sollte ein 800x600 grosse fenster mit dem login von "rambo" erscheinen und schon kann admin auch mal nen reboot ohne powerpole machen ;)

    Zu beachten ist auch, dass nach beendigung der Verbindung zu "rambo" die offene ssh Verbindung zu sam weiter besteht bis diese nicht explizit gekillt wird.

    thats it...

    zu den schaltern des ssh client

    -2 ( dürfte klar sein) protokol
    -N es sollen keine remote commando's ausgeführt werden (auf sam)

    Interessant ist auch der schalter -f

    Dieser verursacht dass die ssh session im untergrund läuft. Man sollte sich immer überlegen was man wirklich tunneln will, gerade bei Xanwendung ist dieser schalter sehr sinnvoll.

    -l (sollte auch klar sein) benutzer.


    -L definiert den Port zum dem eine locale verbindung aufgebaut werden soll. Im falle eines bereits vom adminpc belegten port muss ein anderer wie 10001 oder ähnliches definiert werden. Dabei muss natürlich bei rdesktop der schalter -t 10001 verwendet werden.


    Nehmen wir einmal an "rambo" wäre ein solaris system mit einer Java application nutzbar auf einer Xwindow umgebung. Jedoch sind von der firewall auch ssh geblockt. So dass nun wieder nur die möglichkeit besteht über einen tunnel diese application auszuführen.

    also ein

    adminpc# ssh -2 -X -lrambouser rambo

    funktioniert nicht und das X forwarding scheitert demnach auch.

    deshalb muss admin einen tunnel mit sam aufbauen

    adminpc# ssh -2 -N -f -lsamuser -L9999:rambo:22 sam

    nun besteht ein tunnel von port 9999 auf dem localhost zu port 22 auf "rambo".

    Das hat zur folge das nun eine ssh verbindung zu localhost mit X forwarding zu port 9999 aufgebaut werden muss.

    adminpc# ssh -2 -X -lrambouser -p9999

    die authentifizierung klappt wenn passwort und user auf rambo existieren !

    rambo# pwd

    /usr/home/rambouser

    rambo#

    rambo#/opt/java/bin/javabeispiel.sh start &

    jetzt sollte die application auf dem desktop des admins erscheinen. Und der admin kann admin sein...


    Referrenzen:

    ssh -- die manpage von ssh oder http://openssh.org
    rdesktop -- http://rdesktop.org

    Bei weiterem interesse schreib ich gern auch ein, praktisch advanced wenn man so will.

    Ich hoffe dass mein Beitrag für euch vielleicht mal brauchbar ist. Ich jedenfalls brauch das fast jeden Tag...

    Dieter
    Zuletzt von einem Moderator bearbeitet: 22 Juli 2003
  2. moonlook

    moonlook Meteorist

    Registriert seit:
    28 November 2002
    Beiträge:
    843
    Ort:
    bratown
    Wow, kein schlechter!

    Ich wollt solch ein Tut auch mal nachreichen, jedoch ist das wohl in Vergessenheit geraten.

    Wenn Du Dir die Mühe bei Gelegenheit machen würdest im selben Kontext (also genauso nachvollziehbar), noch ein "advanced Tutorial" mit weiteren Anwendungsfällen zu erstellen, tue Dir bitte keinen Zwang an.

    Dies hilft vielen unbedarfteren Usern, sich sicherer und professioneller zu verhalten beim Umgang mit Non-Sneaker-Networks ;)

    Nicht zuletzt steigert dies die Qualität unseres Boards hier.
  3. ReinerWein

    ReinerWein Evil Doer

    Registriert seit:
    25 Juli 2003
    Beiträge:
    79
    Hi,

    hier mein Senf zum Thema SSH-Tunnel...

    Szenario:
    - OpenBSD-Box (3.3-current) steht @home
    - Win2K-Workstation in der Firma hinter einer Firewall bzw. Proxy

    Benutzte Software:
    httptunnel www.nocrew.org/software/httptunnel.html
    den SSH-Client putty www.chiark.greenend.org.uk/~sgtatham/putty/


    1. httptunnel wie gewohnt compilieren und installieren (RTFM machen...)

    2. dann starten per /usr/local/bin/hts -F 127.0.0.1:22 443 .
    das bewirkt, dass auf Port 443 einkommende Requests lokal auf den Port 22 umgeleitet werden. Port 443 nehme ich deshalb, weil dies der https-Port ist, der durch die Firmen-FW/Proxy nicht geblockt wird. Auf dem Server kann man dann aber logischweise keine https-Dienste (z. B. per apache) anbieten
    Sinnvoll ist es evtl. auch, die rc.local mit "/usr/local/bin/hts -F 127.0.0.1:22 443" zu ergänzen, um hts bei jedem Bootvorgang starten zu lassen.

    3. auf dem W2K-Client kommen logischweise die win32-Binaries von httptunnel zum Einsatz, hier also htc.exe.
    Man öffnet eine DOS-Box und gibt folgendes ein:

    htc -P proxy-server-in-meiner-firma:proxyport -F 22 ip-meines-servers:port-auf meinem-server

    Beispiel:
    htc -P proxy-macrohard:81 -F 22 217.217.217.217:443

    Die DOS-Box MUSS geöffnet bleiben ! Wenn sie geschlossen wird, bricht die Verbindung ab.

    4. Mit putty öffnet man eine Verbindung nach localhost:22

    5. Fertig.


    Der Datenfluß:
    Von putty nach localhost auf Port 22. Dort lauscht htc.exe, die die Daten durch den Proxy-Server an die angegebene IP (also mein Server @home) auf Port 443 sendet. Dort werden die Daten auf Port 443 in Empfang genommen und nach localhost:22 weitergegeben.

    Berlin, 28 Grad, die Verbindung steht. ;-)

    Gruß
    RW
  4. daiv

    daiv AgainstAllAuthority

    Registriert seit:
    19 Juni 2004
    Beiträge:
    805
    Ort:
    Passau
    Geht das von ReinerWein beschriebene verfahren auch mit Jails?

    Wenn ja, könnte mir das vielleicht einer erklären?

    Vielen Dank!
  5. espo

    espo Mädchen für alles

    Registriert seit:
    5 Mai 2003
    Beiträge:
    61
    Ort:
    Stuttgart
    Ich denke mal ja einfach deiner firewall sagen das er den port 443 auf die jail ip leiten soll und dann in dieser jail den httptunnel laufen lassen! Würde ich nun mal so sagen aber keine garantie!

    mfg eSpo
  6. daiv

    daiv AgainstAllAuthority

    Registriert seit:
    19 Juni 2004
    Beiträge:
    805
    Ort:
    Passau
    also ich spiele jetzt schon seit längerem mit diesem httptunnel. aber das einzige was ich hinbekomme ist ein dosfenster das sich sofort schließt, wenn ich versuche mich mit putty darauf zu verbinden.

    es schließt sich sowohl putty als auch das dos fenster.
    in den /var/log/messages steht das:

    das netzwerk sieht so aus:

    internet -> weiterleitung des 443er ports auf die jail -> 192.168.0.205 -> httptunnel wartet auf verbindungen auf 443 -> leitet weiter auf 2225 (den port auf dem ssh widerum horcht) -> sshd

    müsste doch funktionieren oder?