Raspberry Pi

Raspberry Pi: SSH Verbindung absichern

Raspberry Pi SSH Login
Geschrieben von Tony

Betreibt man einen Raspberry Pi, welcher Dienste bereitstellt die auch via Internet erreichbar sind, sollte man den Raspberry Pi und dessen SSH Zugang unbedingt absichern. Wie man die Raspberry Pi SSH Verbindung absichern kann, wird im Folgenden vorgestellt.

Die folgenden Ausführungen beziehen sich auf das Betriebssystem Raspbian, sind aber auf andere Systeme weitestgehend übertragbar.

Bei dem Standardbetriebssystem Raspbian für den Raspberry Pi war lange Zeit bis zu einem großen Sicherheitsupdate im November 2016 der SSH-Server standardmäßig aktiviert. Von nun an ist der SSH-Dienst per default deaktiviert, solange bis man SSH vor dem ersten Start des Systems via Datei, oder nachträglich über die grafische Oberfläche aktiviert.

Standard Benutzername und Passwort ändern

Schnell Raspbian heruntergeladen, auf eine SD-Karte gepackt, SSH aktiviert, seine Dienste eingerichtet und via Portfreigabe im Router über das Internet freigegeben: Schon kann jeder recht einfach auf deinen Raspberry Pi und damit dein Heimnetz zugreifen. Der Grund ist recht einfach: Der Standard Benutzername und das dazugehörige Passwort. Die Default Benutzerkennung des Nutzers pi ist kein Geheimnis und verschafft Anderen leichten Zugriff auf euer System.

Aus diesem Grund sollte die erste Maßnahme beim Einrichten von Raspbian die Änderung des Passworts sein. Mit der Änderung in ein benutzerdefiniertes langes Passwort, ist SSH weitestgehend schon abgesichert. Mit folgendem Befehl kannst du das Passworts des Nutzers pi bzw. jedes Nutzers ändern.

passwd

Zur weiteren Absicherung kann ebenfalls der Name des Nutzers pi geändert werden.

SSH-Port ändern

SSH läuft standardmäßig auf dem Port 22. Um es einem Angreiffer zusätzlich schwer zu machen bzw. sich vor automatisierten Loginversuchen zu schützen, kann der Port des SSH-Servers geändert werden. Unterm Strich ist dies eine effektive Methode. Zum Ändern des SSH-Ports muss die entsprechende Konfiguration angepasst werden. Dazu bearbeiten wir die sshd_config mit dem Editor nano.

nano /etc/ssh/sshd_config

In der Datei ändern wir den folgenden Eintrag auf einen benutzerdefinierten Port und Speichern anschließen die Datei.

Port 22

Bei der Wahl des Ports ist darauf zu achten, dass man keinen Port verwendet, welcher bereits durch einen anderen Dienst belegt ist.

Nachdem man Konfiguration angepasst hat, muss der SSH-Dienst neugestartet werden.

/etc/init.d/ssh restart

SSH Key verwenden

Die Verwendung eines sicheren Passworts für den Nutzer pi gestaltet den SSH-Zugang bereits recht sicher. Dennoch geht es noch sicherer: Durch Verwendung eines SSH Keys. Dabei handelt es sich grundlegend um ein langes Passwort (Schlüssel), welcher jedoch in einer Datei gespeichert wird. Ein SSH Key wird in der Regel mit RSA erstellt und asynchron verschlüsselt. Folglich liegt auf dem Raspberry Pi selbst der Public Key, welcher zum Lesen des Private Keys des Clients dient. Wie man einen SSH Schlüssel (Paar) generiert und auf dem Raspberry Pi implementiert, wird im nächsten Artikel erläutert.

Brute-Force abwehren

Automatisierte Loginattacken auf den SSH-Zugang durch Probieren von diversen Passwörtern mit dem Benutzernamen pi oder root zählen zu sogenannten Brute-Force-Attacken. Hierbei wird solange eine Benutzer-Passwort-Kombination (bei bekanntem Nutzername) via SSH versucht, bis diese erfolgreich ist. Um sich vor solch einer Attacke zu schützen, sollte man auf das Programm fail2ban zurückgreifen.

Fail2ban zählt mit, wie oft ein SSH-Loginversuch einer IP-Adresse fehlschlägt. Ist eine gewisse Anzahl an fehlgeschlagenen Versuchen erreicht, wird die IP-Adresse für eine gewisse Zeit blockiert bzw. gebannt, sodass der Angreifer (temporär) sich nicht mehr am Pi überhaupt anmelden kann. Die Standardkonfiguration von fail2ban genügt in der Regel, sodass man es lediglich einmal installieren muss. Welche Konfigurationsmöglichkeiten dieses Tool mit sich bringt, kann hier quer gelesen werden.

sudo apt-get install fail2ban

Root-Login verbieten

Zur weiteren Absicherung ist es sinnvoll, dass man sich nicht als Root-Benutzer am Raspberry Pi anmelden kann. Die Anmeldung durch andere Nutzer und dann via su zum Root-Wechsel bzw sudo verwenden ist die bessere Alternative. Um den Login eines Root-Nutzers via SSH zu verbieten, passt man die SSH Konfiguration mit dem Editor nano an.

sudo nano /etc/ssh/sshd_config

Innerhalb der Konfiguration ändern wir den Eintrag PermitRootLogin yes zu PermitRootLogin no. Anschließend speichern wir das Ganze und starten den SSH-Dienst neu.

sudo /etc/init.d/ssh restart

Neben den hier vorgestellten Methoden, gibt es sicherlich noch eine ganze Reihe anderer Verfahren und nützlichen Tools. Jedoch ist mit den oben erläuteten Schritten, das Gröbste getan, um den Raspberry Pi nicht offen im Netz zu belassen. Welche andere Methoden und Tools nutzt ihr?

Über den Autor

Tony

Ich bin Tony, begeistert von Einplatinencomputer und berichte über meine Erfahrungen und Projekte mit dem Raspberry Pi, Banana Pi und anderen Minicomputern.

Hinterlasse eine Antwort

Kommentare

  • Hallo Tony,

    kleiner Hinweis zu Fail2Ban. Die Standardversion unter Raspbian (Jessie) unterstützt noch kein Systemd Journal. Dies muss in der Datei „/etc/fail2ban/jail.local“ unter backend eingesellt werden. Allerdigns geht dies eben nur, wenn auch systemd als Option angezeigt wird. Alternativ empfehle ich komplett auf fail2ban zu verzichten und SSH Bruteforce Angriffe per iptables abzusichern. Ist zwar in der initialen Konfiguration etwas aufwendiger, dafür braucht man aber kein eigenes Paket, welches unter Umständen auch wieder anfällig ist. Meine iptables Konfiguration (nur für ipv4) dafür sieht z.B. so aus:

    iptables -N IN_SSH
    iptables -A INPUT -p tcp –dport ssh -m conntrack –ctstate NEW -j IN_SSH
    iptables -A IN_SSH -m recent –name sshbf –rttl –rcheck –hitcount 3 –seconds 15 -j DROP
    iptables -A IN_SSH -m recent –name sshbf –rttl –rcheck –hitcount 5 –seconds 1800 -j DROP

    Als weitere Alternative zum SSH absichern, kann man auch den SSH Port nur über ein VPN von außen erreichbar machen. Dann ist der Port über das Internet gar nicht erreichbar.

    Gruß
    Michi

  • Hi

    Ich würde diese Sachen als Basics ansehen wenn es etwas mehr Sicherheit seinen darf würde ich folgende Punkt noch beachten.

    1) Unsichere Host keys ausschalten.
    die beiden Zeilen mit

    HostKey /etc/ssh/ssh_host_dsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key

    auskommentieren [Grund: DSA ist unsicher und ecdsa gehört zur nist und die zur cia ]

    Zu dem würde ich empfehlen für den host einen neuen RSA und ed25519 Key zu erzeugen.
    Da manche Dist dieses nicht bei ersten Booten selbständig machen.

    2) Wenn man ssh Keys verwendet sollte man auf dem Server

    PasswordAuthentication no

    setzen . [Tip: es ist auch möglich den login mit Pw für einen IP Adress Raum zu erlauben mit

    Match User Address 192.168.1.*,192.168.3.*
    PasswordAuthentication yes
    ]

    3) ssh-key.
    Wichtig bei der Erzeugung von ssh-keys ist das wenn man RSA verwendet die Key mindesten 4096 Bits haben soll. Ich persönlich bevorzuge aber ed25519 Key da diese Deutlich keiner sind bei der gleichen bis besseren Sicherheit.

    4) Nur bestimmten Benutzer SSH erlauben.
    Durch Verwendung von

    AllowUsers

    Kann man einzelnen Benutzer den Login mit ssh erlauben. Oder man verwendet

    AllowGroups ssh

    erstellt einen Gruppe mit dem Namen ssh und fügt die Benutzer dieser Gruppe hinzu.

    5) KexAlgorithms und Ciphers.
    Es ist nicht gut wenn alle unterstützen Algorithmen auch aktiv sind da so der Client in der Lage ist einen unsicheren auszuwählen.
    Dies kann man einfach lösen in dem man folgenden Zeilen in die sshd_config schreibt.

    KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256

    Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr

    Gruß
    Arne

    Quellen: https://bettercrypto.org/ und Vortrage der Rechner Betriebs Gruppe der Technischen Fakultät der Uni Bielefeld.

  • Wenn man den SSH Port nicht über das Internet erreichbar macht, muss man diesen ja eigentlich nicht absichern. Richtig?

    • Ja und nein: Die Betonung liegt hier auf dem eigentlich. Wenn du den SSH-Port über den Router nicht nach außen hin freischaltest (Port geschlossen), dann kann von außen so erstmal keiner ran, insofern nicht andere Ports von anderen Geräten offen sind, wo eine Lücke entstehen kann. Im kleinen Heimnetz sollte das aber kein Problem sein. Aber das Passwort zu ändern ist immer zu empfehlen 🙂