In dieser Anleitung wird aufgezeigt, wie man mit ein paar einfachen Schritten jeden Raspberry Pi-Computer für den produktiven Einsatz grundlegend absichern kann.
Manche dieser Schritte decken sich mit der offiziellen Dokumentation bei der Raspberry Pi-Website.
Es ist wichtig, das Betriebssystem mitsamt aller installierten Software-Pakete durch regelmäßige Aktualisierungen (Upgrades) auf dem neuesten Stand zu halten.
Die Aktualisierung des kompletten Systems lässt sich in der Befehlskonsole (Strg + Alt + t) über eine relativ kurze Befehlszeile anstoßen:
sudo apt update && sudo apt dist-upgrade
Dabei bezweckt sudo, dass der nachfolgende Befehl mit administrativen Systemrechten, als Super User ausgeführt wird.
apt ist die
Software-Paketverwaltungssoftware, mit der sich unter anderem
Software installieren, löschen und eben auch aktualisieren lässt.
Die angegebenen Parameter update
und dist-upgrade bewirken,
dass die lokalen Software-Listen zuerst mit dem Internet synchronisiert
und verfügbare Updates für installierte Software-Pakete dann gegebenenfalls
installiert werden.
Die && -Zeichen verketten die beiden Befehle miteinander, sodass der Upgrade-Befehl nur dann ausgeführt wird, wenn die neuesten Paketlisten erfolgreich eingelesen wurden.
Falls man das System nicht ständig manuell aktualisieren möchte, sollte man den Aktualisierungsprozess über das unattended-upgrades -Software-Paket automatisieren.
Um dies zu tun, installiert man diese Software zunächst mit dem APT-Paketmanager:
sudo apt install unattended-upgrades
Im Anschluss nimmt man mit dem dpkg-reconfigure -Befehl noch die nötige Konfiguration dieser Software vor:
sudo dpkg-reconfigure --priority=low unattended-upgrades
Beim Ausführen dieses Befehls wird man lediglich gefragt,
ob stabile Aktualisierungen automatisch heruntergeladen und
installiert werden sollen.
Mit den Pfeiltasten wählt man YES aus und bestätigt mit der Eingabe-Taste.
Falls man den Neustart auch noch automatisieren möchte, kann man dies zum Beispiel über einen Cronjob realisieren.
Um einen Cronjob für den automatischen Neustart einzurichten, bearbeitet man die Crontab des Benutzers «root», um sicherzustellen, dass die nötigen Systemrechte für den Neustart-Befehl gegeben sind:
sudo crontab -e
Falls man dabei gefragt wird, welchen Editor man benutzen möchte, wählt man im Zweifel den nano aus.
In der Datei fügt man am Schluss dann die folgende Zeile ein:
0 4 * /sbin/shutdown -r +5
Mit den Pfeiltasten navigiert man durch die Datei.
Speichern tut man die Änderungen mit Strg + o
und beenden kann man den Editor mit Strg + x.
Ist die Zeile eingetragen und gespeichert, würde der Rechner dann jeden Tag zwischen 4:00 Uhr und 04:05 Uhr neugestartet werden, unabhängig davon ob es aufgrund von Updates nötig wäre oder nicht.
Sowohl der Benutzername als auch das Passwort ist bei jedem
Raspbian-Grundsystem da draußen dasselbe.
Diese ungeheure Sicherheitslücke gehört selbstverständlich geschlossen,
bevor man irgendwelche Dienste über das Internet freigibt.
Der direkteste Weg, das Passwort des aktuellen Benutzers zu ändern, ist der passwd -Befehl:
passwd
Führt man diesen Befehl aus, muss man anschließend das gewünschte neue Passwort eingeben und anschließend durch eine erneute Eingabe bestätigen.
Nachdem der Befehl dann erfolgreich ausgeführt wurde, ist das neue Passwort auch schon wirksam.
Anders als bei anderen Linux-Betriebssystemen, haben sich die
Raspbian-Entwickler dazu entschieden, für die Ausführung von
Befehlen mit höchsten Systemrechten standardmäßig kein
Passwort abzufragen.
Für den Benutzer «root» mit den höchsten Rechten ist zudem
kein eigenes Passwort gesetzt.
Zunächst bietet es sich an, auch dem Benutzer «root»
ein eigenes Passwort zu vergeben, das man dann zum Anmelden als
eben dieser Benutzer eingeben muss.
Dies ist für die Passwortabfrage allerdings nicht notwendig,
denn mit der Standardkonfiguration von sudo muss das Passwort
des Benutzers »pi« eingegeben werden, um einen Befehl mit root-Rechten
auszuführen.
Möchte man für die erhöhte Sicherheit ein Passwort für «root» festlegen, verwendet man am besten, wie zuvor, den passwd -Befehl, führt diesen aber mit vorangestelltem sudo aus:
sudo passwd
Zum Aktivieren der Passwortabfrage für die Verwendung des sudo-Befehls muss eine ganz bestimmte Konfigurationsdatei angepasst werden, die nur eine einzige Zeile beinhaltet.
Zum Bearbeiten dieser Datei kann man den nano-Texteditor verwenden.
Bevor man die Datei allerdings bearbeitet, müssen die Dateirechte so
angepasst werden, dass die Datei vom Benutzer »root« verändert werden darf:
sudo chmod u+w /etc/sudoers.d/010_pi-nopasswd
Zum Ändern der Konfigurationsdatei werden erhöhte Rechte benötigt, weswegen sudo benutzt werden muss. Hinter dem nano-Befehl gibt man einfach die zu öffnende Datei an:
sudo nano /etc/sudoers.d/010_pi-nopasswd
In der geöffneten Datei muss dann lediglich die Information NOPASSWD zu PASSWD geändert werden.
Mit den Pfeiltasten navigiert man dazu einfach an die Stelle in der Zeile und löscht schlicht und einfach das "NO".
Ist das erledigt, so speichert man mit Strg + o
die Datei.
Mit Strg + x schließt man die Datei und damit
auch den Editor.
Sobald die Datei gespeichert wurde, sind die Änderungen wirksam.
Um die Dateirechte wieder auf ihre Ursprungswerte zu bringen, entzieht man dem Eigentümer der Datei wieder die Schreibrechte:
sudo chmod u-w /etc/sudoers.d/010_pi-nopasswd
Eine Firewall kann dazu benutzt werden, um den Zugang von anderen Geräten auf die laufenden Dienste zu blockieren, und nur jene Dienste freizugeben, die man von außerhalb erreichen können soll (z. B. Website, SSH).
An lokalen Rechnern müssen Dienste über Ports zwar ohnehin explizit über den Netzwerkrouter für den Zugriff über das Internet freigegeben werden, allerdings kann eine lokale Firewall als zusätzliche Sicherheitsmaßnahme nicht schaden.
Als Firewall-Software kann man beispielsweise die UFW (Uncomplicated Fire Wall) installieren:
sudo apt install ufw
Nach der Installation ist die Firewall noch nicht aktiv. Bevor man dies ändert, sollte man die Ports, über welche die gewünschten Dienste erreichbar sind, freigeben (insbesondere, wenn man in diesem Moment mit einem anderen Computer per SSH zum Raspberry Pi verbunden ist!).
Der Befehl zum Freigeben des SSH-Dienstes lautet:
sudo ufw allow 22
22 ist dabei die standardmäßige Port-Nummer vom SSH-Dienst.
Die standardmäßig genutzten Ports von bestimmten Diensten
lassen sich am einfachsten über das Internet herausfinden.
Hier sind einige Beispiele für häufig genutzte Dienste:
Standard-Port | Dienst |
---|---|
21 | FTP-Server (File Transfer Protocol) |
80 und 443 | HTTP-Webserver (443 für HTTPS-Verschlüsselung) |
1194 | OpenVPN Server (Virtual Private Network) |
6681 bis 6889 (nur TCP) | BitTorrent |
64738 | Mumble VoIP-Server |
Falls ein Dienst von den beiden Protokollen TCP und UDP nur eines benötigt, kann man dieses explizit mit einem Schrägstrich direkt hinter der Port-Nummer und der Angabe des Protokolls freigeben:
sudo ufw allow 22/tcp
Mit diesem Befehl würde die Firewall den Port 22 für SSH über das TCP-Protokoll freigeben, aber den gleichen Port über das UDP-Protokoll verbieten.
Mit der UFW-Firewall kann man bei freigegebenem SSH-Port außerdem die Anmeldeversuche per SSH limitieren:
sudo ufw limit ssh/tcp
Möchte man die eingespeisten Firewall-Regeln allesamt zurücksetzen, benutzt man den einfachen "reset"-Befehlsparameter:
sudo ufw reset
Um die UFW-Firewall schließlich zu aktivieren, benutzt man den folgenden Befehl:
sudo ufw enable
Die Firewall ist dann aktiv und bleibt solange im Betrieb, bis man diese mit dem disable -Befehlsparameter deaktiviert oder die Firewall-Software deinstalliert.
Fail2Ban ist ein Prozess, welcher im Hintergrund läuft und die Log-Dateien installierter Dienste auf verdächtige Aktivitäten überprüft und die IP-Adressen der Übeltäter für bestimmte Zeit mittels Firewall-Regeln sperrt.
Fail2Ban greift auf die vorinstallierte Software iptables, bzw. nftables zurück.
Um Fail2Ban zu installieren verwendet man den folgenden Befehl:
sudo apt install fail2ban
Ist Fail2Ban installiert, ist diese Software bereits aktiv. Man kann aber noch eine individuelle Konfiguration der Software vornehmen.
Dazu erzeugt man sich zunächst eine eigene Konfigurationsdatei, indem man am besten die Standard-Konfigurationsdatei kopiert, um Werte anpassen zu können und nicht alles von Hand tippen zu müssen:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Der cp -Befehl
kopiert Dateien und nach Wunsch auch komplette Verzeichnisse.
Als Parameter gibt man die zu kopierende Datei(en) und abschließend das Ziel ein.
Die Datei muss, wie im Befehl angegeben, in diesem Fall "jail.local" heißen.
Die neu erstellte Datei öffnet man anschließend mit administrativen Rechten mit einem Text-Editor, wie nano:
sudo nano /etc/fail2ban/jail.local
In der Datei sucht man sich zum Beispiel den [SSH]-Block und kann dort unter anderem die maximalen Anmeldeversuche und die Dauer der Sperre anpassen.
Im Beispiel unten wird nach 2 fehlgeschlagenen Anmeldeversuchen die jeweilige IP Adresse permanent gesperrt.
Ist man mit den Anpassungen fertig, speichert man die Datei im nano mit Strg + o und beendet den Editor mit Strg + x.
Man kann jederzeit in der Log-Datei von Fail2Ban nachschauen, welche IP Adressen gesperrt, oder auch entsperrt wurden:
sudo tail /var/log/fail2ban.log
Der tail -Befehl gibt zusammen mit der Angabe einer Datei, ohne zusätzliche Parameter, nur die letzten 10 Zeilen der Datei aus.
Möchte man sich die komplette Datei ausgeben lassen, ohne dass die Befehlskonsole maßlos überflutet wird, kann man den Befehl zum Ausgeben des Inhalts einer Datei an den less-Pager übergeben, sodass man eine schöne Ansicht zum Scrollen erhält:
sudo cat /var/log/fail2ban.log | less
Das | -Symbol (Pipe-Symbol) erzeugt man durch das Drücken der Alt Gr + > -Taste, die sich links neben der Y -Taste befinden sollte.
In der less-Ansicht kann man mit den Pfeiltasten scrollen und mit q das Ganze beenden.
Wenn man auf dem Raspberry Pi einen SSH-Server betreibt, sollten der Sicherheit wegen noch ein paar Konfigurationen vorgenommen werden.
Hierzu öffnet man die Konfigurationsdatei für den OpenSSH-Server:
sudo nano /etc/ssh/sshd_config
In der Datei kann man oben den Port ändern, unter dem
der SSH-Dienst läuft (Standard: 22).
Mit dieser Änderung geht man den allermeisten automatisierten
Angriffen auf den SSH-Server aus dem Weg.
Ändert man den SSH-Port, muss bei aktiver Firewall eine entsprechende Regel erstellt werden!
Man sollte in der Datei auf jeden Fall die folgende Zeile hinzufügen, um nur die nötigen Benutzer für SSH zu verwenden und alle anderen Nutzer nicht einzubeziehen:
AllowUsers pi
Die Standard-Einstellung PermitRootLogin
sollte man zudem auf no stellen, um die Anmeldung als «root»
via SSH zu verweigern.
Befindet sich ein Rautezeichen davor, muss das #-Zeichen
entfernt werden, da es ansonsten nur ein Kommentar und nicht wirksam ist:
PermitRootLogin no
Hat man die gewünschten Änderungen vorgenommen, kann man die Datei mit Strg + o speichern und mit Strg + x wieder schließen.
Damit die Änderungen wirksam werden, muss man den OpenSSH-Server neu starten:
sudo systemctl restart ssh
Je nach Stärke des gewählten Passworts des Benutzers eignet es sich umso mehr, eine Private/Public Key-Authentication anstelle der Passwort-Authentifizierung einzurichten. Diese wäre viel, viel schwieriger zu knacken und ist im Serverbereich heutzutage bevorzugt im Einsatz.
Da sich der Einrichtungsprozess über einige Schritte zieht und
abhängig vom genutzten Betriebssystem des Client-Rechners ist, wird
diese prodezur, die auf alle Linux-Server anwendbar ist, in einem
zukünftigen Beitrag erläutert.
Sollte dazu hier noch keiner veröffentlicht worden sein, finden sich
zahlreiche Beiträge zu dem Thema im Internet.
Fertig!
Dieser Artikel wurde von Kevin Mandura verfasst.
Für Rückmeldungen hat der Autor Kontaktdaten angegeben.