SSH Bouncing

Will man sich auf einen Rechner per SSH einloggen muss der Port offen sein. Ist man drin kann man sich innerhalb dieses Netzwerks bewegen, sprich auf auf andere Rechner mittels SSH zugreifen. Das kann in einem Wust an SSH-Verbindungen und offenen Terminals enden. Einfacher geht das mit SSH Bouncing.
Warum ich gerade jetzt darauf komme? Weil es unter Mac OS X 10.5 ein kleines Problem damit gibt. Wie immer bei Links auf Mac OS X Hints gilt: Kommentare lesen.

Add comment März 27th, 2009

SSH-Tunnel: sichere Dienste am Beispiel VNC

Ich nutze VNC, um extern auf die GUI meines PowerBooks zuzugreifen. Leider bietet VNC von sich aus keine Verschlüsselung und ist damit per se unsicher. Eine Verwendung ohne Verschlüsselung über fremde Netze – das Internet ist so eins – ist nicht zu empfehlen. Zudem muss in der Firewall auf dem Router ein Port weitergeschaltet werden. Damit kann jeder auf den VNC-Dienst zugreifen. Das nötige Passwort kann schlicht durch Bruteforce herausgefunden werden.

SSH
Obige Tatsachen lassen das Betreiben eines VNC-Servers, der aus dem Internet erreichbar ist, erst einmal als nicht empfehlenswert aussehen. Jedoch ist Mac OS X ein Unix und bietet daher den Dienst SSH an. Unter Windows muss dieser mit Open SSH nachinstalliert werden.
Den meisten ist SSH als sicherer Login auf ein entferntes Terminal bekannt und dies ist auch der größte Verwendungszweck. Jedoch bietet SSH zahlreiche weitere Möglichkeiten. Mit "man ssh" in einer Shell lassen sich alle Parameter nachlesen. Ein Feature ist der SSH-Tunnel.

Funktionsweise
Wenn ich mich vom Rechner Bob über das Internet zum Rechner Alice per SSH verbinde, so ist diese Verbindung verschlüsselt. Zusätzlich kann ich festlegen, dass der Zugriff auf den Dienst xy auf meinem lokalen Rechner Bob durch die SSH-Verbindung in Wahrheit an Alice weitergeleitet und dort bearbeitet wird.
Beispiel: Gebe ich im Browser auf Bob localhost:8080/geheimeSeite ein, so wird dieser Aufruf an Alice weitergereicht und die Webseite kommt nicht von Bob, sondern von Alice. Natürlich muss diese Weiterleitung erst eingerichtet werden.

Syntax
Die Syntax sieht folgendermaßen aus:

ssh -L lokalerPort:aktuellerRechner:zielPort kennung@zielsystem

Optional kann man noch mit der Option -N das Absetzen von Kommandos über die geöffnete Shell verhindern und mit -p einen anderen Port als den Standard 22 angeben. Für meine VNC-Anwendung auf Port 5900 sieht es dann konkret so aus:

ssh -p 22222 -L 5900:localhost:5900 mathias@meinName.dyndns.tld

Fazit
Die Sicherung beliebiger Dienste über einen SSH-Tunnel ist einfacher als es sich anhört und in jedem Fall zu empfehlen. Zum einen wird der Datenverkehr verschlüsselt und zum anderen sind Dienste nicht direkt von außen zugänglich. D.h. keine Portweiterleitungen und damit potentielle Angriffsflächen. Je nach Port-Angabe kann ein anderer Dienst gesichert werden. Außer den angesprochenen Web- und VNC-Servern können auch Verbindungen zu Mail-Servern oder irgendwas anderem getunnelt werden.

Hinweise
Es empfiehlt sich den SSH-Zugang auf wenige, oder gar nur einen Account ohne Admin-Rechte zu begrenzen. Ausreichend lange Passwörter mit Groß- und Kleinschreibung, sowie Zahlen und Sonderzeichen sind ein Muss.

1 comment Juni 4th, 2007

SSH: Nur bestimmte Benutzer zulassen

Auf meinem Powerbook läuft der SSH Deamon für entfernte Logins und SSH-Tunneling. Nun arbeite ich mit einem Useraccount ohne Adminrechte. Zusätzlich gibt es noch den Account admin. Leider kommt es immer wieder einmal vor, dass jemand versucht von Außen auf meinen Rechner zuzugreifen. Dabei wird immer admin verwendet, da dies nun einmal ein häufig verwendeter Nutzer ist. Der Root-Login ist jedoch deaktiviert. Wie man das macht kommt noch. Nun will ich jedoch die Angriffsfläche für meine Dienste so gering wie möglich gestalten. Daher habe ich nun den Login mit allen Namen, außer meinem Nutzernamen unterbunden.
Dazu ist eine Änderung in der Datei sshd_config notwendig. Auf dem Mac liegt diese unter /private/etc, unter Linux in /etc/ssh/. Dieser Datei müssen folgende Zeilen hinzugefügt werden:

PermitRootLogin No
AllowUsers name1 name2 nameX # keine Kommas!

Dabei bezeichnen name1, name2 und nameX drei erlaubte Benutzer. Hier einfach den eigenen Nutzernamen eintragen und bei Bedarf um andere ergänzen. Ist man einmal eingelogt, so kann man mittels su ganz einfach auf andere Nutzernamen wechseln.

5 comments Februar 3rd, 2007

SSH Probleme mit Mac OS X und Fink?

Gestern wolllte ich kurz von extern auf meinen Mac zugreifen. Es erschien aber nur der mir bisher unbekannte Fehler:

ssh_exchange_identification: Connection closed by remote host

Mit ein bischen Google fand ich heraus, dass dies mit Einstellungen in /etc/hosts zusammenhängen kann. In dieser Datei habe ich aber nichts geändert. Heute nun sitze ich wieder vor dem Rechner und sehe diese Zeile mehrfach in den Logs:

Oct 1 13:26:23 computerName sshd[PID]: fatal: Missing privilege separation directory: /var/empty

Unter /var fand sich tatsächlich kein Verzeichnis emtpy, also hab ich eines angelegt und siehe da, remote login geht wieder. Warum diese Datei nicht da war kann ich nicht sagen. Ich habe die Rechte repariert, Festplatte repariert und sogar noch 10.4.8 installiert. Ohne Erfolg. Erst das simple Anlegen diesers Ordners schaffte Abhilfe.
Am Tag davor hatte ich das Fink Upgradescript von 10.4.transitional auf den jetzt unterstützten Zweig laufen lassen. Dabei wurde unter anderem OpenSSL upgedated. Warum dann jedoch dieser Ordner fehlte, ist mir ein Rätsel. Auf der Mailingliste von Apple und bei Webservertalk findet sich genau mein Problem. Nur sind die Beiträge vier bzw. zwei Jahre alt! Naja, vielleicht hilft diese deutsche Beschreibung mal jemanden. Und wenn noch jemand sagen kann, warum dieser Fehler aufgetreten ist, wäre ich auch sehr dankbar.

Add comment Oktober 1st, 2006