Raspberry Pi im Internet – Absichern eures Mini-Rechners

In meinen Tutorials und Projekten weise ich immer wieder auf die Gefahren und etwaige Sicherheitsrisiken beim Betrieb eines Raspberry Pi am Internet hin, da in letzter Zeit populäre Open Source Software durch mangelhafte Dokumentation und Sicherheits-Konfiguration aufgefallen ist möchte ich heute den Fokus auf den sicheren Betrieb des Raspberry Pi legen.

Inhaltsverzeichnis

Vorwort

Es gibt keinen 100% sicheren Raspberry Pi, die Vorstellung ein System einmalig abzusichern und dann für alle Zeiten sorglos betreiben zu können genau so falsch wie die Aussag „never change a running system“. Sicherheit eines Systems ist meines Erachtens immer ein Prozess und somit eine wiederkehrende Aufgabe die unter anderem auch das anpassen eines Systems nach der ersten Einrichtung erfordert. Mein Credo im privaten Bereich, also dort wo wir den RasPi hauptsächlich zum Einsatz bringen, ist: „Sicherheit durch Wissensvorsprung„.

In diesem Tutorial möchte ich euch eine Einführung zur grundsätzlichen Absicherung eures Raspberry Pi geben, abhängig davon wie euer System später genau aussieht bzw. welche Software darauf läuft müsst ihr natürlich speziell darauf zugeschnittene Vorkehrungen treffen. Anmerkungen und Vorschläge dürft ihr gerne in den Kommentaren hinterlassen.

schloss-security

Bedrohungen

Um einen sicheren Raspberry Pi betreiben zu können ist es von Vorteil eine Vorstellung der möglichen Bedrohungen zu haben. Was konkret wollen denn die „bösen Buben“ von meinem Raspberry Pi?

Meines Erachtens sind die wahrscheinlichsten Szenarien:

  • Den Raspberry Pi als Spam schleuder zu missbrauchen
  • Den Raspberry Pi als Maleware (Viren & Trojaner) schleuder zu missbrauchen
  • Den Raspberry Pi als Sprungbrett für weitere illegale Aktionen missbrauchen (Identitätsdiebstahl via Proxy)
  • Illegale Inhalte über euer System bzw. eure Internetleitung zu verbreiten

Themen wie Kredit Karten Betrug, Online Banking Betrug oder Phising sowie das ausspähen von Zugangs oder Identitätsdaten sind, da der Raspberry Pi meist nicht als PC-Arbeitsplatz oder Surf-Rechner verwendet wird, ehr unwahrscheinlich.

Den Raspberry Pi absichern

Da für viele unter euch der Einsatz eines speziellen „minimal Systems“, welches sich grundsätzlich am Besten zur Absicherung eignet, vermutlich nicht in Frage kommt gehe ich hier auf die grundsätzliche Absicherung eine Raspberry Pi mit Raspbian ein.

Ich gehe davon aus das ihr euer System, wie im allgemeinen üblich, wie in den Einsteiger-Tutorials beschrieben eingerichtet habt. Natürlich solltet ihr immer das aktuellste Raspbian Image verwenden.

Das Passwort des Benutzers Pi ändern

In vielen Tutorials und Anleitungen wird immer wieder die wichtigste und nächstliegendste  Aktion vergessen, das Passwort des Benutzers Pi zu ändern. Führt hierzu folgenden Befehl aus

Ändert das Passwort des Benutzers Pi in ein sicheres Passwort das Mindestens aus 8 Zeichen bestehen sollte. Achtet darauf auch Groß- und Kleinbuchstaben sowie Zahlen und/oder Sonderzeichen zu verwenden. Alternativ lässt sich das Passwort auch in der grafischen RasPi Konfiguration über „sudo raspi-config“ ändern.

Dort wo keine kritischen Daten gespeichert werden verfremde ich immer mir bekannte Wörter zu einem Passwort, zum Beispiel mein Lieblingsgetränk „Kaffee“ zu „Schw4rzMit2Zuck3r!“. Mir ist hier wichtig das ich anhand einer einfachen Verknüpfung meines Lieblingsgetränks mit dem Passwort nicht die Gefahr eingehe das Kennwort zu vergessen und es auch nicht irgendwo aufschreiben muss. Beweißt hier doch einfach selbst etwas Kreativität!

Raspbian aktualisieren und automatisch aktuell halten

Direkt nach der Änderung des Standard-Passworts müssen wir dafür sorgen das unser System mit aktuellen Patches und Updates versorgt wird um nicht unnötig evtl. vorhandene bereits bekannte Sicherheitslücken mit uns herumzuschleppen. Wir aktualisieren erst unsere Paket Liste via update holen uns dann die aktuellen Versionen via upgrade und aktualisieren dann noch die Firmware und den Kernel via rpi-update. Der Parameter dist-upgrade kümmert sich im Gegensatz zum einfachen upgrade auch um Abhängigkeiten und neue Pakete.

Wer regelmäßig automatisch Aktualisierungen installieren möchte kann diese via Cron-Job automatisch installieren. Wer wichtige Dienste und Daten auf seinem RasPi hat sollte regelmäßig eine Datensicherung erstellen! Hierzu verwende ich im liebsten das Tool unattended-upgrades um automatisch Sicherheitsupdates zu installieren.

Um die Standardkonfiguration unter /etc/apt/apt.conf.d/20auto-upgrades zu erstellen führen wir die Konfiguration aus, bestätigt die Frage mit YES

In der Datei /etc/apt/apt.conf.d/10periodic legen wir fest das täglich auf Updates geprüft wird, diese heruntergeladen und installiert werden. Alle 7 Tage werden nicht mehr benötigte Pakete entfernt. Wir editieren diese wieder mit Nano.

Der Inhalt muss wie folgt festgelegt werden.

Gespeichert wird wie immer mit STRG+X, Y und Enter.

In der Datei /etc/apt/apt.conf.d/50unattended-upgrades könnt ihr noch weitere Einstellungen zum automatischen Update konfigurieren, zum Beispiel die Steuerung von Neustarts oder Ausnahmen für Pakete die nicht automatisch aktualisiert werden sollen.

Neuen Benutzer anlegen und Pi entfernen

Da natürlich einem potenziellen Angreifer bekannt ist das es im Raspbian Betriebssystem immer einen Benutzer mit dem Namen Pi gibt hat dieser schon eine wichtige Information um ein System unter seine Kontrolle bringen zu können. Das wollen wir natürlich verhindern und erstellen uns daher einen neuen Benutzer und deaktivieren den vorhandenen Pi User.

Als erstellen wir uns als erstes einen neuen Benutzer, in diesem Beispiel heißt mein Benutzer raspberry.tips, dieser wird direkt zur „sudo“ Gruppe hinzugefügt um später Prozesse auch als root starten zu können.

Jetzt setzen wir noch ein sicheres Passwort für den neuen Benutzer, siehe Hinweiße zur Passwort-Stärke oben.

Dieser Benutzer hat nun die selben Rechte wie der Benutzer Pi, wir können nun also den Standardbenutzer deaktivieren. Bevor ihr den Benutzer Pi löscht meldet euch mit eurem neuen Benutzer via SSH und führt dann folgenden Befehl zum löschen von Pi und dessen Home aus.

Falls ihr zukünftig bei wichtigen Systemaktionen via sudo nicht immer eure Passwort eingeben möchtet könnt ihr die sudoer Konfiguration entsprechend anpassen.

SSH Zugang absichern

Der SSH-Server ist im Standard auf dem Raspberry Pi installiert, die Konfiguration ist allerdings nicht optimal weshalb wir diese anpassen sollten. Hierzu editieren wir die Konfiguration mit nano

Da wir uns nicht mit dem Benutzer root einloggen (wir kennen das Passwort ja nicht und können uns Root Rechte via sudo verschaffen) deaktivieren wir die Anmeldung. Ändert hierzu PermitRootLogin …. in

Da wir einem möglichen Angreifer nicht gleich auf den ersten Blick zeigen wollen das auf unserem RasPi ein SSH-Server läuft ändern wir noch den TCP Port auf welchem der SSH Dienst lauscht auf einen Port größer 1023. Wer es hier wieder einfach mag und zum erinnern eine Eselsbrücke braucht verwendet einfach seine Postleitzahl oder einen Teil einer Telefon-Nummer, z.B. für Berlin-Mitte 10115.

Hierzu ändern wir die Zeile Port 22 in

Speichert die Konfiguration mit STRG+X, Y und Enter

Zusätzlich können wir mit dem Paket fail2ban automatisch IP-Adressen sperren wenn sie eine voreingestellte Anzahl von erfolglosen Anmeldeversuchen erreicht haben. Damit schützen wir unser System noch gegen Brute Force Angriffe.

Im Standard werden nun IP-Adressen nach 6 fehlerhaften Anmeldungen für 10 Minuten gesperrt. Falls ihr diese Werte ändern möchtet könnt ihr das in der Konfigurationsdatei /etc/fail2ban/jail.conf  tun.

Firewall Iptables unter Raspbian einrichten

Im Standard ist die Firewall iptables bereits auf dem Raspberry Pi installiert, es sind aber keine Regeln eingerichtet sodass jegliche Netzwerkverbindung vom Raspberry Pi angenommen wird. Natürlich wollen wir kontrollieren welche Netzwerkverbindungen für welchen Dienst angenommen werden und falls möglich von welchen Systemen dieser kommen darf.

Folgende Firewall Regeln verwende ich um nur SSH und Daten auf dem lokalen Loopback Interface zu erlauben. Alle anderen Datenpakete werden verworfen. Ihr könnt diese via Copy & Paste in eure SSH Sitzung einfach übernehmen.

Wir müssen nun die aktuellen Regeln noch speichern (ihr könnt euch die aktuell aktiven regeln immer via sudo iptables -L anzeigen) oder in der Datei

Um die Regeln automatisch nach jedem Neustart zu laden müssen wir nun leider noch in die Tick-Kiste greifen und ein Pre-Up Skript erstellen. Der erste Befehl legt die Datei an, der zweite macht das Skript ausführbar und der dritte öffnet uns den Editor Nano zum Editieren der Datei.

Wir fügen folgende Zeilen in die Datei ein, diese bewirken das iptables nach jedem Neustart die Regeln aus der Datei /etc/network/iptables einließt und aktiviert.

Speichert das Script mit STRG+X, Y und ENTER nach einem Reboot könnt ihr die aktiven Regeln über sudo iptables -L kontrollieren.

Weitere Regeln, um zum Beispiel den Betrieb eines Webservers zu ermöglichen, können nach Bedarf hinzugefügt werden. Hier die gängigsten, kopiert euch einfach die passende Regeln in eure SSH Sitzung, vergesst nicht das erneute Speichern nach /etc/network/iptables via sudo sh -c „iptables-save > /etc/network/iptables“

Wichtig!

Die Regel „-A INPUT -j REJECT –reject-with icmp-host-prohibited“ muss immer am Ende der Datei /etc/network/iptables stehen! Beim nachträglichen hinzufügen müsst ihr daher die Datei mit Nano bearbeiten und den Eintrag ans Ende der Datei verschieben. Alternativ kann die Regel anstelle mit -A auch mit -D entfernt und dann wieder mit -A hinzugefügt werden.

Wer den Zugriff auf eine bestimmte Netzwerkkarte begrenzen will kann den Parameter -i eth0 für den Ethernet Port oder -i wlan0 für den WLAN Adapter direkt hinter INPUT verwenden.

Besonders hilfreich und sicher ist es wenn bestimmte Dienste wie, zum Beispiel SSH, nur aus dem lokalen Netz und nicht z.b. aus dem Internet erreichbar sind. Da ich eine FritzBox verwende, welche im Standard intern Netzwerkadressen aus dem Netz 192.168.178.0/24 verteilt, kann ich mit dem Parameter -s 192.168.178.0/24 den Zugriff via SSH auf mein internes Netz beschränken. Ein guter Startpunkt und weiterführende Informationen zur iptables Firewall findet ihr im Ubuntu Wiki.

Tipp: Wer lieber auf dem X-Desktop arbeitet kann Firewall Regeln auch mit dem Tool fwbuilder erstellen. Installiert wird das Tool via sudo apt-get install fwbuilder und ist dann im Startmenu zu finden.

iptables Reset auf Standard

Für einen Reset der Firewall auf Standard führt ihr folgendes durch

 

Weitere Tutorials und Projekte für Einsteiger: