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?
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
Interessant, war mir so noch nicht bekannt, danke dafür!
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.
Hallo Arne,
danke für deine ausführliche Ergänzung. Deine Tipps gefallen mir sehr gut, werde ich im Artikel ergänzen!
Gruß,
Tony
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 :)