Home > Einsteiger > Raspberry Pi im Internet – Absichern eures Mini-Rechners

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.

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:

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (3 votes, durchschnittlich: 5,00 von 5)
Loading...

Über raspberry.tips

14 Kommentare

  1. Hallo erstmal

    Sehr schönes und umfangreiches “Tutorial” zur Absicherung !
    Als Hinweis, für “User” die einfach alles so übernehmen, solltest du vieleicht bei dem Script für die Firewallregeln:
    echo "SSH erlauben"
    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

    den Tip geben, das dort der in der sshd_config geänderte Port eingetragen werden muss.

    mfg Hightower

  2. Moin Moin,

    vielen Dank für das super Tutorial. Leider läuft nun mein installiertes Owncloud mit Sqlite db & nginx webserver nicht mehr. Hast Du eine Idee, woran das liegen kann?

    Die benötigten Ports (80, 443) habe ich natürlich bei den Netzwerkeinstellungen mit eingetragen.

    Da ich mich wenig auskenne, würde ich mich über ein wenig Hilfe sehr freuen.

    Viele Grüße,
    Felix

  3. Nachtrag: Auch RDP geht nicht mehr: Connection refused. Port 3389 habe ich eigentlich erlaubt, wie du geschrieben hast.

    iptables eintrag:
    ACCEPT tcp — anywhere anywhere state NEW tcp dpt:3389

    Viele Grüße,
    Felix

  4. Hallo,
    zuerst einmal : Tolle Website, besonders für Anfänger ! Schön das es so etwas gibt, und auch pflegt. Alle Achtung !

    Will nicht den Oberlehrer geben, aber könntest Du bitte mal die Hinweiße ändern ? Hinweis ist das Stichwort.
    Wenn man überall nur noch “den” statt “denn” etc. liest (Wird auch gern ließt geschrieben), dann lernen unsere Kids nie wie man es richtig macht.
    Soll wirklich nur Konstruktive Kritik sein, nicht falsch verstehen bitte.

    Alles Gute weiterhin
    Gruß Dirk

    • Ich finde es immer ganz toll, wenn Oberlehrer (auch wenn Du es nicht sein willst) dann selber kein Deutsch können.

      Stichwörter: Schön das ( sollte wohl eher dass sein), Konstruktive (wie ist die? also schreibt man das klein)
      Und das (hier mit einem s;-) ist übrigens auch kein richtiger Satz:
      Schön das es so etwas gibt, und auch pflegt.

  5. Bzgl. der User…
    Du solltest auf jeden Fall darauf hinweisen, wenn der User “pi” entfernt wird funktioniert raspi-config nicht mehr korrekt. Man kann nicht mehr “in den Desktop booten” setzen bzw. muß dies zu Fuß konfigurieren. Ideal wäre dann, den Lightdm so zu konfigurieren, das er den Login-Screen präsentiert. ;)

    Zusätzlich sollte man einem neuen User sämtliche groups zuweisen die auch pi hat (groups bei pi; usermod -aG group1,group2, … newuser). Ansonsten funktioniert lxde nicht sauber.

    Ansonsten schöner Einstieg in den Raspi.

  6. Beim Hinzufügen von Firewall-Regeln sollte man noch beachten, dass diese in der Datei “/etc/network/iptables” vor der Zeile
    “-A INPUT -j REJECT –reject-with icmp-host-prohibited”
    stehen, da diese ansonsten abgewiesen werden.

  7. Hallo, nachdem ich die iptable Regel sudo iptables -A INPUT -j REJECT aus der Anleitung übernommen habe, ist fhem bei mir nicht mehr per Browser erreichbar. Was muss ich da anpassen?

  8. Michael Rohloff

    Ich suche eine Anleitung für den PI 3 wie ich das WLAn installieren kann. Ich weis nicht welcher WLAN on Board ist. Also welchen Treiber ich laden muss. Vielen DAnk

  9. Michael Rohloff

    Ich suche eine Anleitung für den PI 3 wie ich das WLAn installieren kann. Ich weis nicht welcher WLAN on Board ist. Also welchen Treiber ich laden muss. Vielen DAn

  10. Einen SSH Port auf “user” ports zu ändern ist in Bezug auf Sicherheit eine SEHR SCHLECHTE Idee!!

    An der Stelle sollte besser “portknocking” verwendet werden.

    Hierzu folgenden Beitrag beachten:
    https://www.adayinthelifeof.nl/2012/03/12/why-putting-ssh-on-another-port-than-22-is-bad-idea/

    oder:
    https://www.digitalocean.com/community/tutorials/how-to-use-port-knocking-to-hide-your-ssh-daemon-from-attackers-on-ubuntu

  11. Hi,

    zwei Fragen hierzu:
    1. beim Löschen des Users pi bekomme ich einen Fehler
    userdel: user pi is currently used by process 1242
    /usr/sbin/deluser: »/usr/sbin/userdel pi« gab den Fehlercode 8 zurück. Programmende.
    Process 1242 ist:
    1242 ? Ss 0:00 /lib/systemd/systemd –user

    Was mache ich jetzt?
    2. @linuxer: Hab jetzt verstanden, dass es anscheinend nicht gut ist den ssh-port zu ändern. Wäre es ausreichend den ssh Port über den Router von 1234 auf 22 umzuleiten?

  12. Wenn man die Ports im Router nicht freigibt kann da keiner von aussen rein

  13. sehr gute Doku…

    der Tipp mit der PLZ war fatal, wenn man “stumpf” seine süddeutsche 7xxxxxer PLZ als Port einträgt…
    Dank KODI autostart.bug (blackscreen beim KODI beenden) auf dem raspberry musste dann mal wieder die LiveCD herhalten um das zu korrigieren.

    trotzdem danke ;-)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.