Startseite > RHCE > SSH: verschlüsselungsbasierte Authentifizierung, Portforwarding

SSH: verschlüsselungsbasierte Authentifizierung, Portforwarding

2012/01/31

Einrichten verschlüsselungsbasierter Authentifizierung

Verschlüsselungsbasierte Authentifizierung kann verwendet werden um die Sicherheit von SSH weiter zu erhöhen. Empfehlenswert ist es den generierten Schlüssel mit einer Passphrase zu schützen, falls aber ein kennwortloses Login gewünscht ist (was für Skripte sehr nützlich ist) kann die Angabe einer Passphrase auch entfallen.

Der erste Schritt zum Einrichten verschlüsselungsbasierter Authentifizierung ist die Generierung eines Schlüsselpaares auf dem Client:

ssh-keygen -t rsa

ssh-keygen erstellt dabei die Dateien .ssh/id_rsa sowie .ssh/id_rsa.pub im Heimatverzeichnis des Benutzers. Die Datei id_rsa enthält den privaten Schlüssel und ist entsprechend zu schützen, id_rsa.pub enthält den öffentlichen Schlüssel. Dieser muss auf dem Server in die Datei .ssh/authorized_keys hinzugefügt werden. Diese Aufgabe erledigt der Befehl ssh-copy-id:

ssh-copy-id myuser@ftp.example.com

Nach Eingabe des Kennwortes des Benutzers myuser auf ftp.example.com erledigt ssh-copy-id seine Aufgabe und fügt den öffentlichen Schlüssel in ~myuser/.ssh/authorized_keys auf ftp.example.com ein. Leider wird der SELinux-Sicherheitskontext nicht automatisch gesetzt, dieser muss eventuell noch manuell auf ssh_home_t geändert werden. Dies kann mit restorecon geschehen:

ssh myuser@ftp.example.com
restorecon -R .ssh

SELinux verweigert den Zugriff falls der Sicherheitskontext von .ssh sowie .ssh/authorized_keys nicht auf ssh_home_t gesetzt worden sind! Der SSH-Server verweigert den Zugriff falls die Dateirechte nicht 700 für das Verzeichnis .ssh und 600 für die Datei authorized_keys entsprechen!

Falls ausschließlich verschlüsselungsbasierte Authentifizierung erlaubt sein soll ist die Direktive PasswordAuthentication in /etc/ssh/sshd_config auf dem Server auf no zu setzen.

Portforwarding

Es gibt zwei Arten von Port Forwarding: Lokales und Remote-Forwarding, welche auch bekannt sind als outgoing bzw. ingoing Tunnel.

Lokales Forwarding

Gibt an, dass der angegebene Port auf dem lokalen (Client) Host auf den angegebenen Host und Port des Remote-Hosts weitergeleitet werden soll. Dies funktioniert durch die Zuteilung eines Sockets auf dem der lokale Rechner lauscht. Immer wenn eine Verbindung zu diesem Port hergestellt wird, wird die Verbindung über den sicheren Kanal weitergeleitet.

In folgendem Beispiel wird eine Tunnelverbindung über den lokalen Port 10000 zu Port 80 (HTTP) auf Remote-Host 192.168.100.161 aufgebaut:

ssh root@192.168.100.161 -L 10000:192.168.100.161:80

Öffnet man nun einen Web-Browser und weist diesen an die Seite http://localhost:10000 zu öffnen, wird der gesamte Netzwerkverkehr zu 192.168.100.161 über SSH getunnelt. Der Nutzen ist klar: Es erscheint die selbe Website wie bei einem direkten Aufruf von http://192.168.100.161, diesmal werden Daten jedoch über eine sichere Verbindung übertragen. Ein Mitschneiden des ansonsten nomalerweise im Klartext übertragenen Netzwerkverkehrs ist nun relativ nutzlos.

Remote Forwarding

Genau umgekehrt: Gibt an, dass der angegebene Port auf dem entfernten (Server) Host auf den angegebenen Host und Port des lokalen Hosts (192.168.100.252) weitergeleitet wird:

ssh root@backup -R 10000:192.168.100.252:631
Advertisements
%d Bloggern gefällt das: