Raspbian absichern

29. Februar 2020

von Kevin Mandura

Inhaltsverzeichnis


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.

1. Voraussetzungen

2. System aktualisieren

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.

2.1. Automatische Aktualisierung einrichten

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.

Wichtig:
Damit werden Aktualisierungen zwar automatisch installiert, jedoch wird der Rechner nicht automatisch neu gestartet, falls dies notwendig wäre.

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.

3. Standard-Passwort ändern

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.

Hinweis:
Während der Eingabe des Passworts werden aus gutem Sicherheitsgrund gar keine Zeichen dargestellt. Man muss es, zumindest den Standard-Einstellungen nach, "blind" eingeben.

Nachdem der Befehl dann erfolgreich ausgeführt wurde, ist das neue Passwort auch schon wirksam.

4. Passwortabfrage für sudo aktivieren

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

5. Firewall installieren

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.

6. Fail2Ban installieren

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.

Datei "jail.local" anzeigen

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.

7. SSH-Server absichern

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

7.1. Authentifizierung per Keyfile

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!


Hat dir dieser Artikel gefallen?

Dieser Artikel wurde von Kevin Mandura verfasst.

Für Rückmeldungen hat der Autor Kontaktdaten angegeben.

E-Mail Kontakt
kontakt@kantinen-lieferservice.de

PayPal
Der Autor dieses Artikels nimmt Spenden via PayPal entgegen.
https://paypal.me/ktlsde

Monero
Der Autor dieses Artikels nimmt Spenden über die Kryptowährung Monero (XMR) entgegen.
Gebe als Empfänger-Adresse folgende an:
kantinen-lieferservice.de