Schloss digital

Sicherheit erhöhen – Raspberry Pi mit SSH-Schlüssel absichern

Um den unberechtigten Zugriff auf den Raspberry Pi zu verhindern, habe ich in meinem Beitrag Raspberry Pi – Betriebssystem installieren darauf hingewiesen, das allseits bekannte Passwort raspberry des Nutzers pi zu ändern. Für den Heimgebrauch mag das ausreichend sein. Wer allerdings vor hat, seinen Raspberry Pi ins Internet zu stellen, um ihn auch von „außen“ zu erreichen, sollte etwas mehr Aufwand betreiben.

Bisher haben wir uns im lokalen Netzwerk mittels PuTTY über SSH am Raspberry Pi angemeldet, wurden nach Nutzername und Passwort gefragt und waren nach erfolgreicher Passworteingabe „drin“. Würde man das nun ans Internet hängen, könnte man sicherlich drauf warten, bis die ersten Scriptkiddies automatisiert Login-Versuche starten, um das Passwort zu erraten. Früher oder später werden sie erfolgreich sein. Damit der Zeitpunkt für das Erraten gegen Unendlich tendiert, wäre zum Beispiel folgendes Passwort gut:

Leider kann man sich ein solches Passwort erstens schlecht merken und zweitens wird es schwierig, es ohne Tippfehler einzugeben.

Die Lösung ist, sich mittels eines Schlüsselpaares anzumelden (Asymmetrisches Kryptosystem). Dazu wird auf dem Server (also dem Raspberry Pi) nur der öffentliche Schlüssel (Public Key) abgelegt und auf dem Client (das Gerät, auf dem PuTTY oder ähnliches läuft) der dazu passende private Schlüssel (Private Key) hinterlegt. Was ist also zu tun?

SSH-Schlüsselpaar erzeugen

Auf dem Client (also dem Rechner, auf dem wir uns später mit dem Raspberry Pi verbinden wollen) müssen wir einen SSH-Key erstellen. Je nach Betriebssystem geht das ganz einfach.

Linux und MacOS

Unter Linux bzw. MacOS brauchen wir nur

in ein Konsolenfenster eingeben. Beim Generieren des Schlüsselpaares wird man gefragt, ob man den privaten Schlüssel noch mit einem Passwort bzw. Passphrase absichern möchte. Je nach dem, welches Sicherheitsbedürfnis man hat, kann man dieses Passwort weg lassen oder eben eines vergeben. Vergibt man hier ein Passwort, muss man dieses dann bei jeder Nutzung des Privaten Schlüssels (also bei jedem Login) eingeben. Anschließend findet man die beiden generierten Dateien id_rsa und id_rsa.pub im Verzeichnis ~/.ssh

Windows

Microsoft Windows liefert kein solches Programm zum generieren eines SSH-Schlüssels von Haus aus mit. Deshalb muss man hier erst PuTTYgen herunterladen und ausführen. Anschließend sollte man sicherstellen, dass unter „Parameters“ der Radio-Button auf „RSA“ steht. Damit wird eingestellt, dass wir einen SSH-2 RSA-Schlüssel erstellen werden. Die Schlüssellänge sollte 2048 Bit betragen.

PuTTY Key Generator

Mit dem Klick auf „Generate“ wird der Vorgang der Schlüsselerzeugung gestartet. Damit der Schlüssel möglichst viele zufällige Werte enthält, erwartet das Programm, dass man den Mauszeiger nun in zufälligen Bewegungen über das graue Fenster bewegt. Anhand des Fortschrittsbalkens kann man erkennen, wie weit das Erstellen des Schlüssels fortgeschritten ist. Am Ende steht der generierte öffentliche Schlüssel im Fenster und man kann unter „Key comment“ eine Beschreibung für den Schlüssel hinterlegen (z.B. für welchen Server dieser Schlüssel Verwendung finden soll) und unter „Key passphrase“ kann man, wie weiter oben bereits erläutert, den privaten Schlüssel zusätzlich mit einem Passwort bzw. einer Passphrase versehen. Unter „Confirm passphrase“ muss man das eventuell gewählte Passwort/Passphrase zur Sicherheit noch ein weiteres Mal eingeben.

Nun wird der öffentliche Schlüssel mit „Save public key“ unter dem Dateinamen id_rsa.pub gespeichert. Der private Schlüssel wird mit „Save private key“ unter dem Dateinamen id_rsa.ppk gespeichert.

Öffentlichen Schlüssel auf dem Raspberry Pi hinterlegen

Als nächstes melden wir uns am Raspberry Pi mit dem Nutzer pi an (bzw. mit dem Nutzer, der dann mit dem neuen SSH-Key angemeldet werden soll). Dann erstellen wir das Verzeichnis .ssh mit dem Befehl

Nun erstellen wir die Datei authorized_keys mittels Aufruf des Texteditors nano mit folgendem Befehl:

Jetzt fügen wir den Inhalt der Datei id_rsa.pub in diese Datei mittels Copy und Paste ein. Der Inhalt sieht dann beispielsweise so aus:

Möglichkeit der Anmeldung mit SSH-Schlüssel einschalten

Im nächsten Schritt muss am Raspberry Pi noch eingestellt werden, dass zur Anmeldung auch SSH-Schlüssel verwendet werden sollen. Dazu muss die Datei sshd_config bearbeitet werden. Das erfolgt mit dem Befehl

Die Einträge

ändern wir in

Speichern funktioniert im Texteditor nano mittels STRG+O und <Enter>. Verlassen wird der Editor dann mit STRG-X.

Mittels SSH-Schlüssel-Datei anmelden

Mit diesen Einstellungen kann man sich nun sowohl mittels SSH-Schlüssel-Datei als auch weiterhin mittels Eingabe von Nutzername und Passwort am Raspberry Pi anmelden. Das das Anmelden mit SSH-Schlüssel funktioniert, sollte man unbedingt erst einmal überprüfen, bevor es mit dem nächsten Schritt weiter geht. Im Programm PuTTY stellen wir also folgendes ein:

PuTTY Session

Unter „Session“ stellen wir die korrekte IP-Adresse unseres Raspberry Pi ein und wählen „SSH“ als Verbindungstyp. Der Port 22 wird dann automatisch gesetzt.

PuTTY Connection Data

Unter „Connection – Data“ tragen wir bei Auto-login username den Nutzernamen pi ein (oder einen abweichenden, wenn man einen weiteren Nutzer angelegt hat), damit beim Anmelden dieser Nutzername gleich verwendet wird.

PuTTY Connection SSH Auth

Im letzten Schritt wählen wir unter „Connection – SSH – Auth“ mittels des Buttons „Browse“ noch unseren privaten Schlüssel, also die Datei id_rsa.ppk.

Zurück zum Bereich „Session“ können wir dieser Verbindung noch einen aussagekräftigen Namen geben (in meinem Beispiel-Screenshot „Raspberry Pi“ und können mittels „Save“ diese Verbindung abspeichern. Damit können wir beim nächsten Mal die Verbindung mittels Doppelklick auf den gewählten Namen einfach starten. Mit „Open“ sollte sich nun eine Verbindung zum Raspberry Pi aufbauen. Sofern man ein Passwort/Passphrase für den privaten Schlüssel vergeben hat, wird man nach diesem gefragt. Nach der Eingabe desselben oder wenn keins gesetzt wurde, wird die Verbindung hoffentlich hergestellt.

War das Anmelden mittels Schlüsseldatei erfolgreich, sollte man sich die Datei id_rsa.ppk gut irgendwo sichern, wo sie zwar nicht in fremde Hände kommt, aber andererseits auch vor Verlust gut geschützt ist (eine Festplatte kann auch mal kaputt gehen!). Diese Datei ist jetzt sozusagen unser Haustürschlüssel zum Raspberry Pi.

Anmeldung mit Nutzername und Passwort abschalten

Im letzten Schritt mauern wir nun noch die Nebeneingangstür zu, um die Sicherheit zu erhöhen. Soll heißen, wir deaktivieren jetzt die Möglichkeit, sich auch mit Eingabe von Nutzername und Passwort anzumelden (was wir bisher ja gemacht haben).

Diesen Schritt sollte man aber wirklich erst gehen, wenn man zuvor erfolgreich geprüft hat, dass die Anmeldung mit der Schlüsseldatei funktioniert! Sonst sperrt man sich mit diesem letzten Schritt selbst aus und hat dann keine Möglichkeit mehr, auf seinen Raspberry Pi zu kommen. Wir öffnen also ein weiteres Mal die Datei sshd_config mittels

und ersetzen den Eintrag

durch den Eintrag

Die Änderungen werden mit STRG-O und <Enter> gespeichert und der Editor mit STRG-X verlassen.

Nun ist man vor Brute-Force-Angriffen gut gesichert. Damit sind die Scriptkiddies erst mal außen vor, und man könnte seinen Raspberry Pi ins Internet hängen – allerdings wäre unsere FHEM-Webseite für jedermann erreichbar und jeder könnte unsere Steckdosen schalten und die erfassten Temperaturen ablesen – und schlimmer noch – jeder könnte in unserer FHEM-Installation Änderungen vornehmen. Also reicht die Absicherung noch nicht – bisher ist nur der Zugriff auf das Betriebssystem abgesichert, die FHEM-Webseite abzusichern steht noch aus. Das werde ich im nächsten Artikel Reverse-Proxy mit HTTPS und Authentifizierung einrichten beschreiben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.