Schlagwort-Archive: ssh

Proxyserver über SSH-Tunnel mit MyEnTunnel verwenden

Wer Zugriff auf einen anonymisierenden Proxyserver (Elite-Proxy) hat, kann diesen mit einem SSH-Tunnel zum Ziel-Netzwerk sicherer benutzen, als durch direkte Verwendung des Proxys. Diese Zugangsart eignet sich zum Beispiel um auf die Proxyserver von Perfect-Privacy oder OVPN.to zuzugreifen. Aber auch an meiner Universität wird ein solcher Privatsphären Proxy betrieben. Um diesen sicher zu verwenden, bietet sich ein SSH-Tunnel an. Wie dieser unter Windows eingerichtet wird, erklärt der folgende Artikel.

Unter Windows eignet sich für die Herstellung des SSH-Tunnels besonders das Programm MyEnTunnel. MyEnTunnel ist eine einfache Systemtray-Anwendung, die mit Hilfe des mitgelieferten Programms PuTTY Link (plink.exe) einen SSH-Tunnel aufbaut und aufrecht erhält.

Bildschirmfoto - 08.03.2014 - 17:14:55
MyEnTunnel im Windows-Systemtray

Die Software kann über die Herstellerseite N2 (Download befindet sich auf der Mitte der Seite) bezogen werden. Es ist empfehlenswert, die Entwicklungsversion 3.6.1 herunterzuladen, da diese trotz dem Status sehr stabil läuft und bei komplexen Passwörtern keine Fehler hat.

Nach der Installation kann der Tunnel zum Fakultätsproxy eingerichtet werden. Der Tunnel wird in der aus ssh bekannten Notation (Lokaler-Port:Zielhostname/IP:Ziel-Port) eingegeben.

Bildschirmfoto - 08.03.2014 - 17:13:43
Eingabe der SSH-Tunnel Konfiguration

Im letzten Schritt, wird der Zielserver im Fakultätsnetzwerk eingegeben. Geeignet ist zwar jeder Server, der per SSH mit einem Fakultäts-Account erreichbar ist. Um den Maximaldurchsatz der eigenen Internetanbindung zu erreichen sollte aber einer der Compute-Server der IRB verwendet werden. Der Hostname ergibt sich, indem .cs.tu-dortmund.de an den Hostnamen angehängt wird.

Bildschirmfoto - 08.03.2014 - 17:12:43
Eingabe der SSH-Server Konfiguration

Die Konfiguration aus obiger Abbildung kann 1:1 übernommen werden. Sollen statt dem Surfen im Web regelmäßig große Daten übertragen werden, sollte die Kompression deaktiviert werden.

OpenSSH Tunnel im Hintergrund (inkl. Monitoring)

Oft möchte man eine SSH-Verbindung im Hintergrund permanent laufen lassen. Zum Beispiel, um einen Tunnel geöffnet zu halten. Das ist mit öffentlichen Schlüsseln und den Kommandozeilen Paramtern -f und-N leicht möglich.

Hintergrund-Tunnel

Ein Befehl wie der folgende ist dazu in der Lage einen entfernten Port auf dem lokalen Computer zugänglich zu machen (wie zum Beispiel für Munin).

/usr/bin/ssh -fqnN -L4959:localhost:4949 root@irgendwo.im.internet

Die Parameter von links nach rechts haben folgende Bedeutung.

  • -f – In den Hintergrund wechseln, bevor der Befehl ausgeführt wird.
  • -q – Möglichst wenig Ausgaben erzeugen (die aus dem Hintergrund sowieso nicht gelesen werden können)
  • -n – Leitet die Standardeingabe stdin aus /dev/null weiter und ist Voraussetzung für den Betrieb im Hintergrund
  • -N – Führt auf der entfernten Seite keinen Befehl aus (der unnötig Kontingente belasten würde)
  • -L4959:localhost:4949 – Leitet alle Anfragen die lokale an Port 4959 gesendet werden über den Tunnel an den entfernten Server auf dessen Adresse localhost und Port 4949 (Standardport von munin-node)

Der Befehl funktioniert und erlaubt dem lokalen Benutzer den Zugriff auf den entfernten Port mit Verschlüsselung und gegebenenfalls auch Komprimierung (dafür -C den Argumenten hinzufügen).

Monitoring

Was aber, wenn der ssh Client im Hintergrund stirbt, oder die Verbindung aus anderen Gründen beendet wird? Diesem Problem lässt sich mit dem Ubuntu und Debian eigenen start-stop-daemon und einem kleinen Skript namens sshpin beikommen.

#!/bin/bash
USERHOST="root@irgendwo.im.internet"
NAME="haxogen"
TUNNEL_ARGS=" -fqnN -L4959:localhost:4949 ${USERHOST} -MS ~/.ssh/ctl-${NAME}"

# No Changes below here, or they'll haunt you
PATH=/sbin:/usr/sbin:/bin:/usr/bin
SSH="/usr/bin/ssh"
${SSH} -S "~/.ssh/ctl-${NAME}" -O check ${USERHOST} 2> /dev/null
if [ $? -ne 0 ]; then
	echo "Tunnel ${NAME} nicht gefunden, starte neu." | logger -t sshpin
	start-stop-daemon -bv --start --exec ${SSH} -- ${TUNNEL_ARGS} | logger -t sshpin
fi

Das Skript startet den gewünschten Tunnel mit den angegebenen Argumenten, die in der Variable TUNNEL_ARGS hinterlegt werden. Der Clou: Über den wenig bekannten ControlSocket Mechanismus von OpenSSH wird vor dem Starten geprüft, ob bereits eine Instanz von ssh läuft und nur wenn diese weder eine Verbindung aufgebaut hat, noch läuft, wird eine neue Verbindung aufgebaut. Zusätzlich produziert das Skript Einträge unterhalb von /var/log die auf das Problem hinweisen und wie folgt aussehen.

Aug  2 16:16:18 firewall sshpin: Tunnel haxogen nicht gefunden, starte neu.

Das Skript kann angepasst werden und mittels dem Befehl crontab -e wie folgt in die Cron-Tabelle aufgenommen werden.

@hourly /usr/local/sbin/sshpin.haxogen

Natürlich sind auch mehrere Tunnel kein Problem, dafür wird das Skript kopiert und mit anderem Namen in die Cron-Tabelle eingefügt. Jetzt gibt es keine Ausrede mehr für unverschlüsselt lauschende Munin Instanzen, die leider noch relativ oft zu finden sind.