Den Raspberry Pi absichern

Heute möchte ich ein wichtiges Thema mit dir besprechen. Die Rede ist von Sicherheit. Viel zu schnell ahmt man Befehle aus Video, Foren, Blogbeiträgen oder anderen Quellen nach, um z.B. einen eigenen Webserver zu erhalten oder eine eigene Cloud. Was aber viele Autoren dieser Beiträge verschweigen, ist das Thema Sicherheit! Gerade weil dem Raspberry Pi anscheinend keine Grenzen mehr gesetzt sind, ist das Nachmachen vieler Ideen sehr einfach geworden. Doch wenn etwas passiert, dann ist es zu spät und die Aussage „das wusste ich aber nicht“ hilft dann leider auch nicht mehr. Gerade wenn der Raspberry Pi oder andere Hardware im Internet erreichbar ist, durch z.B. DNS-Weiterleitungen, ist die Gefahr umso größer. Daher möchte ich dir heute das Thema Hard- und Softwaresicherheit beim Raspberry Pi etwas näherbringen. Das Thema VPN werde ich beim nächsten Blobbeitrag über Docker genauer erklären

DISCLAIMER: Die hier gezeigten Dinge erfüllen vielleicht ein Minimum zum Thema Sicherheit. Weder berrybase noch ich als Autor übernehmen bei rechtlichen Problemen die Verantwortung. Hier bist du als Endanwender in der Pflicht und musst deine im Internet verfügbare Hardware korrekt absichern!

Die Hardware für diesem Blog

Grundsätzlich kannst du jeden Raspberry Pi nutzen, ich empfehle dir jedoch einen Rasberry Pi mit einer LAN-Buchse. Solltest du noch keinen Raspberry Pi besitzen, dann schau dir einmal den Raspberry Pi 400 als Kit an und bestelle auch gleich einen ausreichend großen USB-Stick dazu. Generell geht aber auch ein PC mit einem Debian-basierenden Linuxbetriebssystem.

WARENKORB

Alle für dieses Projekt notwendigen Artikel landen mit einem Klick auf den Button direkt in deinem Warenkorb, sofern sie in unserem Shop verfügbar sind. Kontrolliere daher deinen Warenkorb genau!

Hardwaresicherheit

Im Folgenden möchte ich auf das Thema Sicherheit bei der Hardware eingehen. Gerade weil der Raspberry Pi durch das Preis-Leistungs-Verhältnis deutlich attraktiver geworden ist, als ein normaler Server, sind doch einige Punkte zu beachten. Hier zeige ich dir die für mich persönlich wichtigsten Punkte, es gibt durchaus noch mehr.

Lass den Raspberry Pi von USB booten

Das Booten von einem USB-Device ist eines der ersten Dinge, die du bei deinem Raspberry Pi einstellen solltest. Dies geht mit den aktuellen Kernelversionen ohne Probleme, wobei du einen Raspberry Pi 3 oder höher benötigst. Es empfiehlt sich gerade bei einer frischen Installation von Raspberry Pi OS auf die SD-Karte, den Kernel upzudaten, siehe Befehl aus Code 1.

sudo rpi-update

Code 1: Den Kernel updaten

Im Anschluss solltest du den Raspberry Pi einmal neustarten, damit auch der neue Kernel geladen wird. Nun benötigst du einen USB-Speicher, damit die Daten von der SD geklont werden können. Dies solltest du machen, da bei vielen Lese- und Schreibzugriffen eine SD-Karte schnell kaputt gehen kann oder Daten korrupt werden. Im Startmenü unter Zubehör öffnest du den SD Card Copier, siehe Abbildung 1.

Abbildung 1: Den SD Card Copier öffnen

Wähle im sich öffnenden Dialog bei Von Gerät kopieren die SD-Karte aus, meist /dev/mmcblk0 und bei Auf Gerät kopieren das USB-Device, meist /dev/sda oder /dev/sdb. Wichtig ist an dieser Stelle, dass der Haken bei New Partition UUIDs gesetzt ist, da andernfalls bei eingelegter SD-Karte und angeschlossenem USB-Stick der Raspberry Pi nicht booten wird. Das liegt daran, dass beide Devices dieselbe UUID haben und nicht mehr zwischen SD-Karte und USB-Device unterschieden werden kann. Mit Start wird der Kopiervorgang aufs Zieldevice gestartet. Dies wird, je nach Größe der SD-Karte und des USB-Device dauern, am Ende kommt aber immer eine Abschlussmeldung.

Jetzt muss der Raspberry Pi noch auf USB-Boot umgestellt werden. Öffne dazu ein Terminal und gibt den Befehl aus Code 2 ins Terminal ein.

sudo raspi-config

Code 2: Rapsberry Pi Software Configuration Tool öffnen

Du landest automatisch im Raspberry Pi Software Configuration Tool, siehe Abbildung 2.

Abbildung 2: Rapsberry Pi Software Configuration Tool im Terminal

Nun navigierst du zu 6 Advance Options -> A6 Boot Order -> B2 USB Boot und bestätigst mit Enter. Daraufhin wird beim Raspberry Pi auf USB-Boot umgestellt, kurz darauf siehst du auch schon die Meldung USB is default boot device, siehe Abbildung 3.

Abbildung 3: USB-Device ist nun Standardbootmedium

Verlasse nun das Raspberry Pi Software Configuration Tool und starte den Raspberry Pi einmal neu. Jetzt wird automatisch immer der USB-Stick zum Booten verwendet, sofern dieser angeschlossen und eine Bootpartition besitzt.

Gerade bei einem USB3.0-Device, wird sich die Geschwindigkeit bemerkbar machen. Interessant an der Stelle ist, dass z.B. DeskPi Pro v2 Gehäuse für Raspberry Pi 4 einen SATA auf USB-Adapter benutzt, um eine HDD oder SSD als USB-Speichermedium verwenden zu können.

Nutze den Raspberry Pi mit dem LAN-Anschluss

Ein Punkt, über den man jetzt streiten kann, ich dennoch für wichtig empfinde, ist das Abschalten von WiFi und Bluetooth. Beides ist auf dem Raspberry Pi 4 vorhanden und ist mit Raspberry Pi OS auch generell aktiviert. Beide Kommunikationskanäle haben ihren Sinn, jedoch ist und bleibt eine physikalische Verbindung mittels LAN-Kabel die bessere Verbindungswahl. Gerade bei Hackern ist WLAN oder Bluetooth ein gern genutzter Angriffsvektor, daher sollte es abgeschaltet sein, wenn es nicht gerade zwingend für dein Projekt oder deine Umgebung nötig ist.

Um das WiFi und das Bluethoot zu deaktiviere, öffnest du im Terminal mit Code 3 die config.txt auf der boot-Partition.

sudo nano /boot/config.txt

Code 3: Config-Datei auf der boot-Partition öffnen

Am Ende der Datei fügst du die beiden Parameter aus Code 4 hinzu.

dtoverlay=disable-wifi
dtoverlay=disable-bt

Code 4: Wifi und Bluetooth deaktivieren

Der erste Parameter deaktiviert komplett das WiFi, der zweite das Bluetooth. Willst du eins der beiden aktiv lassen, kannst du ein # davorsetzen, damit dieser Parameter auskommentiert ist. Nach dem Speichern und Beenden der Datei, muss der Raspberry Pi neugestartet werden, damit die Änderungen aktiv werden. Im Anschluss ist das Symbol für WiFi und Bluetooth nicht mehr in der oberen Taskleiste verfügbar, siehe Abbildung 4.

Abbildung 4: WiFi und Bluetooth nicht mehr in der Taskleiste

Softwaresicherheit

In diesem Kapitel möchte ich dir etwas mehr zum Thema Sicherheit auf Softwareebene zeigen. Du musst diese Änderungen oder Vorschläge nicht umsetzen, es empfiehlt sich jedoch. Wie schon bei der Hardware sind dies alles Einstellungen, die ich persönlich als sicher ansehe.

Starkes Passwort für den Benutzer „pi“

Eins der ersten Dinge, die du auf deinem Pi ändern solltest, ist das Passwort. Jeder der sich mit dem Raspberry Pi beschäftigt weiß, dass das Standardpasswort vom User pi „raspberry“ lautet. Beim ersten Start von Raspberry Pi OS wirst du deshalb auch direkt gebeten, das Passwort zu ändern. Aber auch von Zeit zu Zeit sollte das Passwort geändert werden, was mit dem Befehl aus Code 5 im Terminal schnell umgesetzt ist.

passwd

Code 5: Terminalbefehl, um Passwort zu ändern

Wie bei jedem Betriebssystem musst du zunächst dein aktuelles und im Anschluss dein neues Passwort eingeben und ein zweites Mal das Neue Passwort zur Bestätigung, siehe Abbildung 5.

Abbildung 5: Passwort erfolgreich geändert

Wie ein sicheres Passwort aussieht, hat das BSI (Bundesamt für Sicherheit in der Informationstechnik) auf ihrer Seite zum Thema Sichere Passwörter erstellen genaustens erklärt. Interessant sind dabei auch Passwort-Verwaltungsprogramme wie z.B. keepass, welches ebenfalls vom BSI empfohlen wird, die einem sogar ein sichere Passwort generieren können.

Den User pi bei Systembefehlen zum Passwort zwingen

Das Bequeme an dem Benutzer pi ist auch gleichzeitig sein verderben, wenn Fremde sich Zugriff verschafft haben. Er darf alle Systembefehle mit sudo ausführen und muss noch nicht einmal dafür ein Passwort eingeben. Da nützt das stärkste Passwort nichts, wenn dieses nicht zum Einsatz kommt. Das solltest du auch ändern, auch wenn die Passworteingabe dich wahrscheinlich nervt.

Öffne dazu im Terminal mit dem Befehl aus Code 6 die sudoers-Einstellungen für pi.

sudo nano /etc/sudoers.d/010_pi-nopasswd

Code 6:Die sudoers-Einstellung von pi ändern

Nun änderst du pi ALL=(ALL) NOPASSWD: ALL zu pi ALL=(ALL) PASSWD: ALL und speicherst die Datei entsprechend ab, STRG + X und danach Y oder J. Damit hat pi immer noch mittels sudo Berechtigung Systemkommandos auszuführen, aber es wird nun eine Passworteingabe erzwungen. An dieser Stelle ist es wichtig zu erwähnen, dass du genau auf die korrekte Schreibweise achten musst, da sonst die modifizierte Datei unbrauchbar ist.

Sicherheitsrelevante Updates automatisch ausführen

Die tägliche Arbeit von einem Systemadministrator ist und bleibt zu prüfen, ob es sicherheitsrelevante Updates für ein Betriebssystem oder Software gibt und ob diese auch installiert wurden. Gerade Sicherheitslücken, wie aktuell Log4j zeigen, wie wichtige diese Aufgabe ist. Updates für die diversen Pakete auf deinem Raspberry Pi wird es immer wieder geben, jedoch sind die sicherheitsrelevanten Patches die wohl wichtigsten. Wie du sicherlich bereits weißt, kannst du mit dem Befehl aus Code 7 deinen Raspberry Pi auf dem aktuellen Stand halte. Aber gerade diese Updates vergisst man sehr schnell und so werden sicherheitsrelevante Updates nicht auf deinen Raspberry Pi installiert.

sudo apt update && sudo apt dist-upgrade -y

Code 7: Manuelle Installation von Updates auf dem Raspberry Pi

An dieser Stelle hilft das Tool unattended-upgrades, welches bei Raspberry Pi OS (Stand 12/2021) nicht automatisch mitinstalliert ist. Mit Code 8 im Terminal kann dieses schnell nachinstalliert werden.

sudo apt install unattended-upgrades

Code 8: unattended-upgrades nachinstallieren

Damit beginnt das Tool aber noch nicht seinen Dienst, sondern es muss noch aktiviert werden. Tippe dazu ins Terminal den Befehl aus Code 9 ein.

sudo dpkg-reconfigure --priority=low unattended-upgrades

Code 9: unattended-upgrades nachkonfigurieren

Anschließend wird dir im Terminal die Frage gestellt, ob du stabile sicherheitsrelevante Updates automatisch installieren möchtest, siehe Abbildung 6, was du mit Ja bestätigst.

Abbildung 6: unattended-upgrades stabile Sicherheitsupdates automatisch installieren

SSH-Server ein bisschen sicherer machen

Der Raspberry Pi ist ein super System und seit dem Raspberry Pi 4 ist dieser auch ein ausgezeichneter Ersatz als Desktop-PC. Doch wer z.B. einen kleinen Cloudserver mit dem Pi betreibt, der wird von außen eher per SSH auf das System zugreifen wollen, um diesen zu verwalten. Ohne z.B. einen VPN-Tunnel ist es eher untypisch sich via Remotedesktop oder VNC auf sein System zu schalten. Gerade bei den SSH-Grundeinstellungen kannst du an zwei Stellen optimieren. Zum einen kannst du den SSH-Port ändern und auf jeden Fall solltest du den Root-Zugriff unterbinden. Beide Einstellungen müssen in der sshd_config vorgenommen werden, welche du mit Code 7 im Terminal öffnest.

sudo nano /etc/ssh/sshd_config

Code 10: sshd_config öffnen

Um den SSH-Port zu ändern, suchst du nach der Zeile #Port 22 und änderst diesen z.B. zu Port 777. Speicherst du dies ab und startest den Dienst oder den Raspberry Pi neu, ist der SSH-Zugang nur noch über den Port 777 statt über den Port 22 möglich. Gerade diese Änderung ist insofern hilfreich, da Leute, die gerade erst mit dem hacken beginnen, hier schon bei Angriffen via SSH scheitern. Geübte Hacker werden jedoch schnell den Port finden, da es diverse Portscanner gibt, die Ports und ihre Funktion erfragen. Wenn du den Port geändert hast, musst du bei PuTTY oder deinem SSH-Einwahltool darauf achten, diesen mit anzugeben, siehe Abbildung 7.

Abbildung 7: PuTTY mit angepassten Port

Eine wesentlich klügere Anpassung ist der Parameter #PermitRootLogin mit dem Standardwert prohibit-passwort anzupassen. Vom Prinzip sollte und darf root keinen Zugriff via SSH erhalten, da es das schlimmste ist, was dir bzw. uns passieren kann. Der Benutzer root darf alles auf dem System und Hacker können so den größtmöglichen Schaden auf dem Raspberry Pi und deinem Netzwerk anrichten. Daher sollte dies Zeile wie folgt aussehen.

PermitRootLogin no

Mittels Code 11 im Terminal können die gespeicherten Änderungen direkt angewendet werden. Solltet ihr die Änderungen über einen SSH-Zugang gemacht haben, so bleibt eure SSH-Verbindung in den meisten Fällen bestehen.

sudo service ssh restart

Code 11: Den Service SSH neustarten

SSH nur mit Private key file

SSH ist in Kombination mit einem starken Passwort schon eine sichere Sache, doch man weiß nie, ob das Passwort wirklich sicher ist. Besser wäre es doch, wenn es eine absolut sichere Methode geben würde. Diese sichere Methode heißt Private key file authentification die mit jedem gängigen Betriebssystem möglich ist. Der Grundgedanke ist der, dass du ein Schlüsselpaar aus public key und private key erstellst. Ersteres ist bildlich gesprochen das Schloss, welches mittels des eigenen Schlüssels, dem private key, dir den Zugang gewährt.

Zunächst erstellst du dir ein Schlüsselpaar. Eine ausführliche Anleitung dazu findest du hier. Die Option mit dem Key passphrase ist nur dann wichtig, wenn du die größtmögliche Sicherheit willst. In unserem Beispiel lässt du Key passphrase und Confirm passphrase einfach leer. Damit musst du später beim Einwählen mit dem Private key nicht noch den Key passphrase, nicht zu verwechseln mit deinem Passwort,eingeben. Speichert euch sowohl den public key und den private key.

Ohne PuTTYGen oder das Tool zu Generierung des Schlüsselpaares zu Schließen erstellt ihr auf dem Raspberry Pi nun eine neue Datei im Unterordner .ssh eures Benutzers pi, mit dem Befehl aus Code 12.

mkdir /home/pi/.ssh
nano /home/pi/.ssh/authorized_keys

Code 12: Die Datei authorized_keys öffnen

Ggf. ist dieser Ordner und die Datei schon vorhanden, sofern du mittels SSH auf dem Raspberry Pi gearbeitet hast.

Nun kopierst du den Public key von PuTTYGen und fügst diesen in die eben geöffnete authorized_keys – Datei ein, siehe Abbildung 8, und speichert diese ab.

Abbildung 8: Public key inauthorized_keys speichern

Als nächstes, damit die Authentifikation auch funktioniert, müssen die Berechtigungen noch angepasst werden. Dies geschieht mit den beiden Befehlen aus Code 13.

sudo chmod 700 /home/pi/.ssh
sudo chmod 600 /home/pi/.ssh/authorized_keys

Code 13: Berechtigungsanpassungen für .ssh und authorized_keys

Im letzten Schritt stellen wir den SSH-Server so ein, dass nur noch Zugriff mit dem private key möglich ist. Öffne dazu noch einmal die Datei sshd_config im Terminal mit dem Befehl aus Code 14.

sudo nano /etc/ssh/sshd_config

Code 14: sshd_config öffnen

Suche die Zeile #PasswordAuthentication yes und ändere diese zu PasswordAuthentication no, siehe Abbildung 9.

Abbildung 9: Passworteingabe bei SSH-Zugang verweigern

Speichere die Datei wieder ab und starte den Dienst mit Code 15 neu.

sudo service ssh restart

Code 15: Den Service SSH neustarten

Wie du mittels PuTTY nun den private key verwendest, findest du auf dieser Website.

Den Raspberry Pi mit der Firewall UFW ausrüsten

Jedes Gerät, welches über das Internet erreichbar ist, sollte durch eine starke Firewall abgesichert werden. Virenschutz ist genauso wichtig, aber mit einer gut eingestellten Firewall können einige Angriff im Keim erstickt werden und viele Viren gibt es für Linux (noch) nicht. Linux hat hierfür die Firewall UFW, was die Abkürzung für Uncomplicated Firewall ist. Unkompliziert ist die Firewall wirklich, daher solltest du diese auf deinem Raspberry Pi mit dem Befehl aus Code 16 installieren.

sudo apt install ufw

Code 16: Die Firewall UFW installieren

Wenn der Paketmanager UFW installiert wurde, ist der Dienst noch nicht aktiv! Das ist auch gut so, da sonst ggf. unsere SSH-, Remotedesktop- oder VNC-Verbindung gekappt werden könnte. Damit UFW mit der Arbeit beginnen kann, müssen wir erst einmal Regeln erstellen, welche Ports überhaupt erlaubt sind. Für gängige Anwendungen reichen die in Tabelle 1 freigegebenen Ports, wobei die Liste hier nicht vollständig ist und je nach verwendetem Dienst stark abweicht.

PosPortBeschreibung
180Standardport für Webadresse mittels http
2443Standardport für Webadresse mittels https
322Der Standardport für SSH-Zugang, ggf. musst du diesen durch deinen gewählten in der sshd_config ersetzen
45900Standardport für VNC-Verbindungen
53389Standardport für Remotedesktopverbindungen
Tabelle 1: Ports für häufig genutzte Dienste

Wenn du weitere Dienste auf dem Raspberry Pi benutzt, musst du die entsprechenden Ports für den Dienst ermitteln und freigeben.

Damit nun z.B. ein Webserver auch übers Internet erreichbar ist, davon ausgehen das am Router die Ports auch freigegeben und weitergeleitet werden, reichen die Befehle aus Code 17.

sudo ufw allow 80
sudo ufw allow 443

Code 17: Ports für Webserver freischalten

Damit sind die Ports 80 und 443 schon einmal freigeschaltet und über das Internet und lokal im Netzwerk erreichbar. Willst du hingegen diese Ports nicht zulassen, dann geht dies mit den Befehlen aus Code 18.

sudo ufw deny 80
sudo ufw deny 443

Code 18: Ports für Webserver blockieren

Willst du auf Nummer sicher gehen, kannst du per default alle Ports mittels des Befehles aus Code 18 sperren, musst dann aber im Gegenzug alle benötigten Ports einzelnd wieder freischalten.

sudo ufw default deny

Code 19: Alle Ports standardmäßig sperren

Hast du alles eingestellt, muss nun noch UFW gestartet und bei jedem Neustart aktiviert werden. Dies geschieht mit dem Befehl aus Code 20.

sudo ufw enable

Code 20: UFW aktivieren

Sofern du alles richtig eingestellt hast, sollte die Firewall nun laufen und deine Ports sollten entsprechend freigeschaltet oder blockiert sein. Solltest du Einstellungen per SSH vorgenommen haben und nach der Aktivierung keiner Verbindung mehr bekommen, ist wahrscheinlich der Port nicht freigegeben, den wir weiter oben geändert haben. Die Firewall kannst du über den Befehl aus Code 20 wieder deaktivieren und dann musst noch einmal deine Ports überprüfen.

sudo ufw disable

Code 20: UFW deaktivieren

Da UFW sehr mächtig ist und hier in der Kürze nicht alles erklärt werden kann, empfehle ich dir die Wiki-Seite von ubuntuusers.de, hier kannst du alles wichtige nachlesen.

Zusammenfassung: Raspberry Pi absichern

Ich habe dir in diesem Blog viel zum Thema Hard- und Softwaresicherheit gezeigt, dabei habe ich aber nur an der Spitze vom Eisberg gekratzt. Das Thema IT-Sicherheit ist mehr denn je wichtig, gerade wenn deine Hardware aus dem Internet erreichbar ist. Die oben gezeigten Punkte sind teilweise auf jedem gängigen Debian-basierten Linuxsystem anwendbar, es gibt aber durchaus mehr, um seinen Server oder Raspberry Pi abzusichern. Zu nennen wäre hier z.B. noch fail2ban, ClamAV, RootKit-Scanner und vieles mehr. Nicht umsonst gibt es bei großen Firmen extra Abteilungen, die sich nur mit dem Thema IT-Sicherheit befassen und diese auch umsetzen. Wie du siehst, ist dieses Thema also nicht zu vernachlässigen und entsprechende Lektüre durchaus wichtig.

Für weitere spannende Raspberry Pi Tutorials schaue doch einfach hier vorbei!

Die mobile Version verlassen