How-to

So sichern Sie den SSH-Zugang

12.03.2023 von Stephan  Lamprecht
Mit dem SSH-Zugang arbeitet jeder Systembenutzer auf einem entfernten Rechner, als säße er direkt davor. Je nach Situation und Benutzerkreis ist es ratsam, sich Gedanken darüber zu machen, wie sich der Zugang absichern lässt.
Foto: ra2 studio - shutterstock.com

Soll ein Platinenserver wie der Raspberry Pi ohne angeschlossene Tastatur und Bildschirm bedient werden, dann bietet das SSH-Protokoll einen Weg dazu. Via SSH können Sie sich auch auf den meisten Cloudservern anmelden. Nach erfolgreicher Anmeldung stehen dann auch alle systemweiten Kommandos zur Verfügung. Nun arbeitet SSH ja als Tunnel durch das Web, ist also schon einmal besser geschützt als eine unverschlüsselte Verbindung zu einem System. Aber dennoch gibt es Optionen, den Zugang noch sicherer zu gestalten.

Die hier vorgestellten Maßnahmen können einzeln oder auch allesamt umgesetzt werden. Wie sicher der Zugang sein muss, bestimmt vor allem die Situation des Serversystems: Ist es über das Internet erreichbar, ist maximale Sicherheit angesagt, im lokalen Netz mag ein root-Verbot oder eine "AllowedUsers"-Anweisung genügen.

Keine Anmeldung für Root

Root-Anmeldung für SSH verbieten

Ein probates Mittel, um Angreifern weniger Möglichkeiten einzuräumen, besteht darin, keine Zugriffe von root via SSH zu erlauben. Diesen Weg gehen häufig auch kommerzielle Anbieter von Cloudservern. Hier ist allerdings genaues Arbeiten gefragt, damit Sie sich nicht selbst vom System aussperren. Diese zusätzliche Absicherung erfolgt in zwei Schritten - zunächst durch das Anlegen eines zusätzlichen Nutzers, der sich dann immer erst root-Recht verschaffen muss, im zweiten Schritt durch Deaktivierung des root-Zugangs via SSH.

Wenn Sie direkt vor dem betreffenden Rechner sitzen, können Sie die Arbeiten auch in der grafischen Oberfläche der Benutzerverwaltung durchführen. Schneller geht es aber in der Konsole. Sie legen zunächst den neuen Nutzer an:

useradd -g users -d /home/sepp -s /bin/bash sepp

Jetzt weisen Sie dem Nutzer ein starkes Passwort zu. Das geht mit dem Kommando

passwd sepp

und anschließend legen Sie für diesen Nutzer noch sein Home-Verzeichnis an und geben ihm die Rechte daran:

mkdir /home/sepp
chown sepp:users /home/sepp/

Anschließend müssen Sie prüfen, ob Sie sich mit diesem Konto via SSH anmelden können. Hat das funktioniert und Sie befinden sich in dem leeren Home-Verzeichnis, versuchen Sie, ein beliebiges Kommando mit dem Zusatz "su" aufzurufen. Hat das funktioniert, schalten Sie den root-Zugriff für SSH ab. Das erledigen Sie in der Datei "/etc/ssh/sshd_config". Darin finden Sie die Zeile "PermitRootLogin". Das verändern Sie zu "no". Um die Änderungen zu übernehmen, starten Sie den SSH-Dienst mit

sudo systemctl restart sshd

neu.

Um später mit root-Recht zu arbeiten, verwenden Sie nach dem Log-in auf dem System das Kommando su -l.

Verändern Sie den Standardport

Eine einfache Maßnahme, es Angreifern deutlich schwerer zu machen, besteht darin, den Standardport (22) für SSH zu verändern.

Malware-Scripts und Angreifer lieben Standardeinstellungen. Daher empfehlen wir auch stets, nach der Installation eines Dienstes die voreingestellten Passwörter zu ändern. Ähnlich verhält es sich mit Standardzugangswegen.

Um etwa öffentlich erreichbare Raspberry-Server auf Schwachstellen abzuklopfen, werden Angreifer die SSH-Standards nutzen und sich versuchsweise auf Standardport 22 mit dem Nutzer "pi" und Kennwort "raspberry" anmelden. Ungleich schwerer wird es für Angreifer mit geändertem Konto und Kennwort, noch schwerer wird es, wenn Sie den Standardport verändern. Dazu müssen Sie die Konfiguration für SSH ändern. Das können Sie wieder in der bereits genannten Konfigurationsdatei:

sudo nano /etc/ssh/sshd_config

Suchen Sie darin die Zeile "#Port", entfernen Sie das Kommentarzeichen und tragen Sie statt "22" einen Port Ihrer Wahl ein, zum Beispiel 479. Speichern Sie die Datei und starten Sie den Service mit

sudo systemctl restart sshd

neu. Wer jetzt versucht, das System von einem anderen Rechner durch die gewohnte Eingabe von "ssh [Konto]@[IP-Adresse]" zu erreichen, wird abgelehnt werden.

Um sich auf dem geänderten Port zu verbinden, muss der Befehl mit

ssh -p 479 [Konto]@[IP-Adresse]

die exakte Portangabe mitliefern.

Anmeldung auf das Heimnetz beschränken

Noch sicherer wird der Zugriff, wenn die Anmeldung ausschließlich via Schlüsseldateien erfolgt. Sie sollten den Schlüssel aber mit einem Kennwort („Passphrase“) schützen.

Die bisherigen Schritte machen es Angreifern und schädlichen Scripts deutlich schwerer. Sie nutzen nicht mehr den Standardzugang und eine Anmeldung von Root ist nicht möglich. Noch sicherer wird die Verbindung natürlich, wenn der Zugriff nur noch über bestimmte IP-Adressen erfolgen darf. Wenn diese Option in Betracht kommt, weil Sie stets nur von einem System aus einem festen IP-Bereich Anmeldungen durchführen, ist das eine vielversprechende Möglichkeit. Öffnen Sie die schon bekannte Konfigurationsdatei "sshd_ config". Um eine Anmeldung nur von einer einzigen IP-Adresse zu erlauben (hier aber für jedes Konto), fügen Sie die Zeile

AllowUsers *@192.168.178.10

ein. Das können Sie auch auf einen Adressbereich ausdehnen. Die Anweisung

AllowUsers *@192.168.178.0/24

würde den für die Fritzbox typischen Adressraum von 192.168.178.0 bis 192.168.178.255 für die SSH-Anmeldung erlauben.

Anmeldung nur via Schlüsselpaar erlauben

Bei der Verwendung von Passwörtern besteht immer das Problem, dass diese erraten, ausprobiert oder entwendet werden können. Das ist bei der Verwendung von Schlüsselpaaren anders. Hier müssten öffentliche und private Schlüssel gestohlen worden und die Passphrase für den Zugriff bekannt sein. Um sich via Schlüssel anmelden zu können, legen Sie zunächst auf ihrem Stammsystem ein Schlüsselpaar an mittels des Befehls

ssh-keygen -b 4096

Beim Speicherort, der abgefragt wird, belassen Sie es bei den Voreinstellungen. Sie können jetzt eine "Passphrase" (Kennwort) zum Schutz des Schlüssels nutzen. Das ist für hohen Sicherheitsanspruch empfehlenswert, denn ohne diese Hürde genügt ein entwendeter Schlüssel zur Anmeldung. Sie erhalten eine Rückmeldung wie "Your public key has been saved in /home/[nutzername]/.ssh/id_dsa.pub". Diesen Schlüssel müssen Sie auf den Server übertragen. Der Einfachheit halber gehen wir davon aus, dass sich auf dem Zielserver im Home-Verzeichnis des aktuellen Nutzers bereits das versteckte Verzeichnis "./ssh/" befindet. Um den öffentlichen Schlüssel zum Server zu kopieren, nutzen Sie dieses Kommando (Beispiel):

scp ~/.ssh/id_dsa.pub sepp@192.168.178.10

Bevor Sie jetzt die Anmeldung via Passwort abschalten, sollten Sie den Zugriff via Schlüssel unbedingt testen.

Es werden zwei Schlüsseldateien angelegt. Die öffentliche Datei des Nutzers, der auf den Server zugreifen soll, muss zum Server kopiert werden.

In der Konfigurationsdatei "sshd_config" (am Server) ändern Sie dazu den Wert "No" von "PubkeyAuthentication no" in "yes" und lesen die Konfiguration neu ein (sudo systemctl restart sshd). Danach testen Sie die Verbindung. Sie werden bei der Anmeldung nach der Passphrase für den Schlüssel gefragt (nicht nach dem Systemkennwort des Benutzers).

Wenn Sie sich auf diesem Weg erfolgreich anmelden konnten, schalten Sie in der Konfigurationsdatei "/etc/ssh/sshd_config" (am Server) die Anmeldung mit Konto und Passwort aus. Suchen Sie dort nach der Zeile "PasswordAuthentication" und ändern Sie den Wert von "yes" auf "no".

(PC-Welt)