Der Einplatinencomputer Raspberry PI hat spätestens seit der Version 4 genügend Leistung, dass er als stromsparender Webserver für kleine Projekte aus dem eigenen Netzwerk taugt. Damit Du Dir kein Sicherheitsrisiko ins Haus holst, solltest Du etwas Zeit für eine sichere Konfiguration aufwenden. Wir stellen Dir ein paar einfache Maßnahmen vor, mit denen sich der Raspberry absichern lässt.
Am Anfang steht der Plan
Zu Beginn deines Vorhabens solltest Du Dir Gedanken über Deine Anforderungen machen. Hinter diesem banalen Vorschlag steht der Gedanke, eine möglichst minimale Grundinstallation zu verwenden. Das spart nicht nur Speicherplatz. All-inclusive-Pakete von Distributionen bringen eine Menge Ballast unnötiger Anwendungen mit. Im ungünstigen Fall laufen einige davon als Dienst im Hintergrund und schlucken Leistung.
Wirklich ungünstig ist jedoch, dass Du meist nicht im Detail weißt, was alles auf dem Gerät vorinstalliert ist. Jedes Programm kann ein potentielles Sicherheitsproblem darstellen und muss auf dem neuesten Stand gehalten werden.
Besser ist es also, eine Distribution wie Raspberry PI OS Lite zu verwenden und die benötigen Pakete sukzessive zu installieren.
Grundeinstellungen treffen
Für den Raspberry werden oft vorinstallierte Systeme als Images angeboten. Dort solltest Du das Passwort für den eingerichteten Nutzer ändern. Bequem geht dies beim Raspberry PI OS mit dem bereits enthaltenen Tool „raspi-config“. Zudem ist für den Nutzer „root“ zum Teil kein Passwort vergeben. Dies solltest Du unbedingt durch den Befehl sudo passwd root ändern.
Zusätzlichen Schutz kann es bieten, den voreingestellten Nutzer, z.B. „PI“ beim Raspberry PI OS, zu löschen und einen neuen Nutzer mit komplexem Namen anzulegen. Dies muss allerdings von der Kommandozeile aus geschehen :
- Anlegen des Nutzers: sudo adduser NAME (Passwort wird danach im Dialog abgefragt)
- Hinzufügen zu benötigten Gruppen, insbesondere „sudo“: sudo adduser NAME sudo
- Benutzerwechsel zum neuen Nutzer: su NAME
- Löschen des alten Nutzers: sudo userdel NAME
Erreichbarkeit aus dem Internet mit DynDNS
Sofern Du keine statische IP-Adresse von deinem Provider erhalten hast, musst Du dafür sorgen, dass Dein Webserver im Internet gefunden werden kann. Dies geht beispielsweise mit einem kostenlosen DynDNS-Dienst. Der Anbieter vergibt Dir dabei einen festen Domain-Namen. In regelmäßigen Abständen muss Dein Raspberry dort seine aktuelle dynamische IP-Adresse melden und Anfragen können vom Anbieter weitergeleitet werden.
Einrichten lässt sich ein DynDNS-Dienst direkt im Router, etwa bei der FritzBox im Menü Internet unter dem Punkt Freigaben . Alternativ kannst Du auch eine Client-Software für diesen Zweck direkt auf Deinen Raspberry installieren. Einfach einzurichten ist beispielsweise der ddclient . Dort werden nach der Installation die Zugangsdaten vom Anbieter in die Konfigurationsdatei ddclient.conf eingetragen .
Netze trennen
Eine Möglichkeit, mehr Sicherheit zu erlangen ist, den Server physikalisch durch Aufbau eines zusätzlichen Netzes für die internen Geräten zu trennen. Vorbild ist die sogenannte DMZ (Demilitarisierte Zone), mit der es beispielsweise in großen Firmennetzwerken üblich ist, das Intranet abzuschirmen.
Um dies zu erreichen, benötigst Du allerdings zwei Router oder zumindest ein zweites Gerät, das die Firewall zwischen der DMZ und deinem internen Netz stellt.
Gast-Netzwerk: Für das Betreiben einer kleinen Webseite, ist dies womöglich etwas über das Ziel hinausgeschossen. Eine einfachere Variante ist es, einen Netzwerkanschluss des Routers einem virtuellen bzw. Gast-Netzwerk zuzuordnen und den Raspberry dort anzuschließen.
SSH: Abschalten oder absichern
Ein Server soll nach der Einrichtung möglichst ohne Tastatur und Monitor bedient werden können. Dies geschieht häufig per Secureshell (SSH). Nachteilig daran ist, dass jeder, der Deinen Server erreichen kann, sich theoretisch über SSH einloggen könnte. Daher ist diese Schnittstelle ein häufiger Angriffspunkt für Server.
Wenn Du die Möglichkeit hast, den Server beispielsweise über einen KVM-Switch direkt zu bedienen, kannst Du SSH deaktivieren oder erst gar nicht installieren. Wenn dies räumlich nicht passt oder Dir zu unbequem ist, lässt sich SSH auch absichern:
- Verbot des Root-Zugriffs: Ein Einloggen als Benutzer root kannst Du verbieten, indem Du in der Datei /etc/ssh/ssh_config den Wert hinter dem Eintrag PermitRootLogin von yes auf no setzt.
- Login mittels Zertifikats: Hierzu ist es erforderlich, einen privaten und einen öffentlichen Schlüssel zu generieren. Der private Schlüssel bleibt auf dem Client-Rechner, der öffentliche wird in das Home-Verzeichnis des Nutzers auf dem Server, an den Unterpfad .ssh/authorized_keys, kopiert. Für die Schlüsselgenerierung kann unter Windows und Linux das Kommandozeilenprogramm „ssh-keygen“ verwendet werden .
Im Anschluss muss Du die Datei /etc/ssh/ssh_config anpassen. Der Wert PubkeyAuthentication muss auf yes gesetzt werden, der Wert PasswordAuthentication auf no. Nach einem Neustart des Dienstes ist eine Anmeldung nur noch mit dem Zertifikat möglich.
- Zwei-Faktor-Authentifizierung: Google bietet mit seinem Authenticator eine kostenlose Lösung für die Zwei-Faktor-Authentifizierung an. Hierzu ist eine App für Android und iOS verfügbar. Nach Austausch der Anmeldeinformationen per QR-Code, erzeugt die App zeitlich begrenzt gültige Einmal-Passwörter. Diese müssen zusätzlich zur bereits bestehenden Authentifizierung eingegeben werden.
Auf dem Raspberry musst Du das Paket libpam-google-authenticator installieren. Um diese Art der Anmeldung per SSH zu ermöglichen, muss in der Konfigurationsdatei /etc/ssh/ssh_config der Wert ChallengeResponseAuthentication von no auf yes gesetzt werden. Zudem sind zwei Änderungen in der Datei /etc/pam.d/sshd vorzunehmen: Die Zeile @include common-auth wird mit dem Zeichen # auskommentiert und die Zeile auth required pam_google_authenticator.so ergänzt . Den QR-Code für die App erhältst Du durch Eingabe des Befehls google-authenticator auf dem Raspberry. Zudem werden Dir dort Wiederherstellungsinformationen angezeigt, die Du am besten mit einem Screenshot sichern solltest.
- Fail2ban: Viele Angriffe laufen automatisiert ab. So scannen Bots Ranges von IP-Adressen im Internet. Mit der Software fail2ban kannst Du Zugriffe von IP-Adressen nach fehlgeschlagenen Anmeldeversuchen sperren . Hierzu musst Du nur das Paket fail2ban installieren. Standardmäßig überwacht es Zugriffe auf den sshd-Dienst. In der Konfigurationsdatei /etc/fail2ban/jail.conf kannst Du Details festlegen. Etwa wie lange eine IP-Adresse gesperrt bleiben soll und nach wie vielen Fehlversuchen die Sperre erfolgt. Mittels sudo fail2ban-client status bekommst Du eine Übersicht der aktuell gesperrten IP-Adressen.
Firewall
Da Dein Webserver direkt aus dem Internet erreichbar sein soll, musst Du Anfragen vom Router per Port-Forwarding durchreichen lassen. Dadurch wird er nicht mehr von dessen Firewall geschützt. Dies kannst Du durch die Installation einer eigenen Firewall auf dem Raspberry auffangen. Unter Linux steht die sehr komplexe Anwendung Iptables zur Verfügung. Deren Konfiguration bedarf einiger Einarbeitung und Erfahrung.
Zur Vereinfachung gibt es die Uncomplicated Firewall (UFW). Diese hilft bei der Einrichtung von Iptables und kann mit vergleichsweise einfachen Befehlen eingestellt werden. So können Dienste und Ports mit einem Befehl nach dem Muster:
sudo ufw allow|deny PROTOKOLL from ADRESSE port PORTNR to ADRESSE port PORTNR
erlaubt oder verboten werden. Die Adressen und Ports sind dabei optional. Der Befehl
sudo ufw deny ssh
würde beispielsweise jeglichen Zugriff per SSH unterbinden.
Aktualität: Updates automatisch installieren
Der Server versieht seinen Dienst idealerweise unauffällig im Hintergrund.
Sicherheitsupdates: Das birgt die Gefahr, dass Du vergisst, regelmäßig Sicherheitsupdates einzuspielen. Dies ist aber von enormer Wichtigkeit. Eine bekannt gewordene Schwachstelle kann Dein gesamtes Sicherheitskonzept aushebeln.
Hierfür bietet sich das Paket unantended-upgrades an. Im Rahmen der Konfiguration wirst Du gefragt, ob Du täglich nach Updates suchen lassen willst. Erscheint die Abfrage nicht, lässt sie sich mit dem Befehl
sudo dpkg-reconfigure -plow unattended-upgrades
nachholen.
Absichern des Webservers
Angreifer beginnen häufig damit, Informationen über ihre potentiellen Ziele zu sammeln. Hierzu gehören verwendete Software und deren Versionen, um ihre möglichen Schwachstellen ausnutzen zu können. Für Apache-Server empfiehlt es sich daher in der Datei /etc/apache2/conf-available/security.conf den Wert ServerTokens auf Prod und den Wert ServerSignature auf Off zu stellen.
Bei einem Nginx-Server kannst Du in der Datei /etc/nginx/nginx.conf in der Sektion http mit dem Zusatz server_tokens off die Headerausgabe unterdrücken. Nutzt Du PHP, bietet es sich an, in der Konfigurationsdatei php.ini die Ausgabe der Versionsnummer mittels des Eintrags expose_php = off zu verhindern.
Überwachen des Servers
Linux-Systeme führen einige Logprotokolle. Um über relevante Vorfälle informiert zu werden, gibt es Programme wie logcheck, welches über das gleichnamige Paket installiert werden kann. Standardmäßig überwacht es das Syslog, das relevante Systeminformationen enthält und die Datei auth.log, die Anmeldeversuche registriert.
Über Unregelmäßigkeiten kann das Programm auch per Mail informieren.
Zusätzlichen Schutz kann ein Intrusion Detection System (IDS) bieten. Unter Linux gibt es beispielsweise das Programm Tripwire. Dies prüft die Integrität von Ordnern und Dateien. Es wird ein initialer Zustand (Snapshot) erhoben und später abgeglichen. Auf diese Weise können Änderungen an Dateien erkannt werden, die auf unerwünschte Zugriffe hindeuten.
Reichhaltiger Werkzeugkasten für mehr Sicherheit
Unsere Aufzählung ist in keinem Fall abschließend. Linux-Distributionen bieten einen großen Pool an Konfigurationsmöglichkeiten und Werkzeugen, von denen wir nur einige vorstellen konnten. Das Prinzip sollte es sein, eine möglichst kleine Angriffsfläche zu bieten.
Hierdurch besteht eine gute Chance, dass einfacher zu hackende Ziele ausgewählt werden und Du Deinen Raspberry ungestört als Webserver einsetzen kannst.
https://www.raspberrypi.com/software/operating-systems/
https://www.raspberrypi.com/documentation/computers/configuration.html
https://avm.de/service/wissensdatenbank/dok/FRITZ-Box-7590/30_Dynamic-DNS-in-FRITZ-Box-einrichten/
https://github.com/ddclient/ddclient
https://wiki.ubuntuusers.de/Archiv/DDNS-Clients/
https://www.ssh.com/academy/ssh/keygen
https://www.thomas-krenn.com/de/wiki/SSH-Login_mit_2-Faktor-Authentifizierung_absichern
https://wiki.ubuntuusers.de/fail2ban/
https://wiki.ubuntuusers.de/ufw/
https://wiki.ubuntuusers.de/Aktualisierungen/Konfiguration/
https://www.pcwelt.de/a/webserver-absichern-tipps-fuer-apache-und-nginx,3449465