Raspberry im Internet absichern

Die meisten von euch werden den Raspberry mit dem eigenen Netzwerk verbunden haben. Dies bedeutet meistens auch, dass er mit dem Internet verbunden ist. Ist dies der Fall, sollte man einige Einstellungen machen und Standartkonfigurationen ändern. In diesem Beitrag erkläre ich euch, wie ihr die Sicherheit eures Raspberrys im Internet erhöht.

Trotz diesen Änderungen ist natürlich keine 100%ige Sicherheit gewährleistet. Man ist jedoch schon einiges besser gegen Angriffen aus dem Internet abgesichert. Dennoch sollten regelmäßig Updates des Systems durchgeführt werden um immer aktuelle Sicherheitsupdates zu bekommen.

Passwort des Benutzers Pi ändern

Das Standard Passwort des Benutzers „Pi“ ist „raspberry“. Viele vergessen, das Standardpassowrt zu ändern und geben dem Hacker somit einen ersten Anhaltspunkt um auf euer System zugreifen zu können. Man sollte das Passwort also möglichst direkt nach der Ersteinrichtung ändern.

Das Passwort sollte aus mindestens 8 Zeichen, aus Groß- und Kleinbuchstaben sowie aus Sonderzeichen bestehen.

Benutzer „Pi“ löschen und durch neuen ersetzen

Um den Raspberry noch weiter abzusichern, kann man den Standardbenutzer „Pi“ löschen und durch einen neuen Benutzer ersetzen.

Erstellt den neuen Benutzer „neuerBenutzer“ und fügt ihn direkt der Gruppe „sudo“ zu. Dies ist nötig, damit der Benutzer später auch Befhle als root ausführen kann bzw. darf.

Vergibt dem Benutzer ein neues Passwort, welches natürlich nach den oben genannten Kriterien gewählt werden sollte.

Nun solltet ihr euch mit dem neu angelegten Benutzer per SSH einloggen. Der nun nicht mehr benötigte Benutzer „Pi“ kann gelöscht werden.

SSH-Zugang absichern

Die Standartkonfiguration vom SSH-Zugang ist nicht gerade vorteilhaft für einen sicheren Raspberry. Um dies zu ändern bearbeiten wir die Konfigurationsdatei.

Da wir uns nur mit unserem angelegten Benutzer einloggen werden können wir den Zugang mit dem root-Account deaktivieren. Hierzu setzen wir den Eintrag PermitRootLogin auf no

SSH root

Da Standartmäßig Port 22 für den SSH-Zugang freigegeben ist, ist dieser Port die erste Anlaufstelle für Hacker. Um den Angriff etwas schwieriger zu gestalten, sollten wir den Port ändern. Der Port sollte größer 1023 sein. Ändern kann man dies, genauso wie den root-Login, in der Konfigurationsdatei indem man die Zeile „Port 22“ ändert. Zum Beispiel:

SSH Port

Um das wilde herumprobieren von Benutzernamen und Passwörter (sogenannte Brute Force Angriffe) zu unterbinden installieren wir das Paket „fail2ban“. Dies sperrt IP-Adressen nach einer voreingestellten Anzahl von Fehlversuchen.

Bei den Standarteinstellungen werden nun Angreifer nach 3 Fehlversuchen innerhalb von 10 Minuten für 10 Minuten gesperrt. Geändert kann dies unter /etc/fail2ban/jail.conf

Regeln für die Firewall einrichten

Der Raspberry stellt Standardmäßig eine Firewall zur Verfügung. Es sind jedoch keine Regeln eingerichtet. Der Raspberry nimmt also jede Netzwerkverbindung an.

Ich persönlich verwende folgende Regeln (einfach in die SSH-Verbindung kopieren):

Erlauben von lokalen Verbindungen:

nicht eindeutige Pakete verwerfen:

Datenverbindungen erlauben die zu einer bereits bestehenden Verbindung gehören:

SSH erlauben (Port entsprechend anpassen)

Sollte auf dem Raspberry eine FHEM-Installation laufen, ist es wichtig die Ports in der Firewall einzutragen:

Zum Schluss sollten dann alle anderen Verbindungen blockiert werden:

Wichtig: Diese Regel muss zum Schluss eingetragen werden. Alle danach eingetragene Regeln werden nämlich ignoriert.

Nun müssen die Regeln noch abgespeichert werden:

Alle aktiven Regeln könnt ihr euch wie folgt anzeigen lassen:

Es gibt jedoch noch ein kleines Problem. Nach einem Neustart des Systems werden die Regeln nicht wieder automatisch aktiviert. Um dies zu umgehen erstellen wir uns ein ausführbares Skript, welches die Regeln nach einem Neustart wieder aktivieren:

Es wird eine Datei erstellt, welche mit folgendem Befehl ausführbar gemacht wird:

Die auszuführende Datei wird nun bearbeitet

damit die Regeln nach einem Neustart aktiviert werden:

Mit „Strg+X“, „Y“ und „Enter“ abspeichern. Nach einem Neustart werden nun die Regeln automatisch wieder aktiviert.

Optionale Firewall-Regeln

Je nach Anwenderfall müssen natürlich noch weitere Regeln definiert werden. Je nachdem welche benötigt werden einfach kopieren und in eure SSH-Sitzung einfügen.

Anschließend wieder abspeichern:

Sollte bereits der Eintrag für das Sperren der übrigen Verbindungen eingetragen sein, so müssen weitere Einträge manuell vor diesem eingetragen werden. Am besten geschieht dies über den nano-Editor:

Wichtig ist hier die Zeile „reject-with icmp-port-unreachable“. Diese muss als letzte stehen:

iptable Raspberry

Weitere Befehle:

Anzeigen der Regeln:   sudo iptables -L

Regeln auf Standard zurücksetzen:   sudo iptables -F

Weitere Infos hier (Ubuntu Wiki)

7 Kommentare zu “Raspberry im Internet absichern

  1. Hallo, nachdem ich der Anleitung gefolgt bin komme ich nicht mehr per SSH auf meinen Raspi. Da ich dort keinen Bildschirm und keine Tastatur angeschlossen habe, wie kann ich die Einstellungen zurücksetzen ohne das komplette System neu aufsetzen zu müssen?

    • Hallo Jörg,
      ich habe alle Schritte nochmal auf meiner Testumgebung durchgeführt. Alles hat funktioniert. Auch die SSH-Verbindung ist weiterhin möglich.
      Ich vermute deshalb, dass bei dir bei der Firewall-Konfiguration etwas schief gegangen ist. Wichtig ist, dass der korrekte Port für die SSH-Verbindung in die Firewall eingetragen ist.
      Solltest du zum Beispiel den SSH-Port geändert haben, dann muss dieser geänderte Port auch entsprechend in die Firewall eingetragen sein.

      sudo iptables -A INPUT -p tcp –dport 22 -j ACCEPT

      Dann zum Beispiel Port 1450 statt 22. Aber dieser Hinweis hilft dir ja nun leider recht wenig 😉 Ich muss dir leider sagen, dass der einfachste Weg, dass Anschließen einer Tastatur/Maus ist. Eine weiterer Weg ist natürlich der, dass man die SD-Karte vom Raspberry in einen Computer / Laptop steckt. Unter Windows wird dafür jedoch ein Programm benötigt, damit das Filesystem von Linux erkannt wird. Hier wird alles gut erklärt:

      https://www.howtoforge.com/access-linux-partitions-from-windows

      Wenn man auf das Dateisystem zugreifen kann, dann kann man ja die Firewallkonfiguration löschen bzw. ändern –> /etc/network/iptables

      Gruß Daniel

  2. Hallo Daniel,
    nachdem ich nun mit ein wenig Herumprobieren das SSL-Problem gelöst habe (anderer Kommentar), habe ich nun versucht, diese Anleitung abzuarbeiten. Leider sind mir ein paar Fehler unterlaufen, die nun Konsequenzen haben.
    1. Ich wollte den „pi“-User löschen, als ich noch als „pi“ angemeldet war. Viele Fehlermeldungen, da ein bestimmter Prozess noch lief, anscheinend aber keine direkten Konsequenzen, mal abgesehen von einem zerschossenen Useraccount.
    2. Ich habe die sshd_config-Datei angepasst und gespeichert, danach wollte ich fail2ban installieren. Diverse Fehlermeldungen bei der Installation, weil einige Ordner nicht gefunden waren (habs leider nicht geloggt), scheint aber irgendwie geklappt zu haben
    3. Neustart, versucht über SSH als root einzuloggen: ging nicht (logischerweise, habs ja abgeschaltet)
    4. mit neuem Nutzernamen angemeldet,
    sudo iptables -A INPUT -i lo -j ACCEPT
    ausgeführt, das hier erhalten:

    Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die
    Regeln erklärt hat. Normalerweise läuft es auf drei Regeln hinaus:

    #1) Resprektieren Sie die Privatsphäre anderer.
    #2) Denken Sie nach bevor Sie tippen.
    #3) Mit großer Macht kommt große Verantwortung.

    [sudo] password for root:
    _______________________________________________________________
    Ein Passwort aber ich meiner Meinung nach für root nie gesetzt (war früher login without password), alle meine Standardpasswörter (falls ich doch irgendwann mal eines gesetzt hatte) gehen nicht. Damit kann ich den Rest nicht durchführen.
    5. Den pi an einen Monitor angeschlossen, dort wollte ich die Konsole aufrufen
    –>Neuerdings eine Passwortabfrage beim Start. Mein neu erstellter User mit dem dazugehörigen Passwort geht, hat aber natürlich keine root Rechte. Die interne Konsole hat die selben Einschränkungen wie die Externe.
    6. sshd_config-Datei über den Filebrowser geöffnet
    –>alter Stand mit root–>no password
    7. Eine Menge Fragezeichen

    Ich wäre dir für deine erneute Hilfe wieder mal dankbar.

    MfG Sebastian

    • Hallo Sebastian,

      das löschen eines angemeldeten Benutzers war natürlich nicht so sinnvoll. Aber davon mal abgesehen 😉
      So wie es aussieht hat der neu angelegte Benutzer keine root Rechte, deswegen meckert er rum als du die Firewall einrichten wolltest und fragt nach einem root-Passwort. Der root-Benutzer hat jedoch normalerweise kein Passwort und muss deswegen erst gesetzt werden.
      Mit dem Befehl „sudo su“ wechselst du zum root-Benutzer und kannst dann mit „passwd“ ein root-Passwort setzen.
      Die ganzen Fehlermeldungen erscheinen vermutlich weil der neue Benutzer keine root-Rechte hat, wie du bereits erwähnt hast. Dennoch müsste er Befehle mit root-Rechte ausführen können, der neue Benutzer wurde ja der Gruppe „sudo“ hinzugefügt (sudo useradd –m neuerBenutzer –G sudo).
      Ich würde nun erstmal für den root-Benutzer ein Passwort setzen und dann überprüfen in welchen Gruppen der neu angelegte Benutzer ist, dies geht mit dem Befehl „id“. Sollte sich dieser noch nicht in der „sudo“ Gruppe befinden, dann mit dem Befehle „sudo usermod -aG sudo neuerBenutzer“.
      Danach kannst du ja dann nochmal probieren die iptables zu setzen bzw. zu bearbeiten.

      Gruß Daniel

  3. Hallo Daniel,
    danke für den Hinweis aber so weit komme ich ja gar nicht erst. Egal welchen su Befehl ich eingebe, es erscheint sofort:

    „Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die
    Regeln erklärt hat. Normalerweise läuft es auf drei Regeln hinaus:

    #1) Resprektieren Sie die Privatsphäre anderer.
    #2) Denken Sie nach bevor Sie tippen.
    #3) Mit großer Macht kommt große Verantwortung.

    [sudo] password for root:“
    ________________________________________________________________________

    Ich habe jetzt mal versucht, die SD-Karte über einen Ext-Reader einzubinden, was auch soweit klappt. Leider finde ich die verdammte cmdline.txt-Datei nicht, in der ich das Passwort zurücksetzen könnte. Ich suche schon in der versteckten root-Partition aber die Datei ist nicht zu finden. Auch andere Methoden (siehe hier http://raspberrypi.stackexchange.com/questions/37666/noobs-reset-password-debian) scheinen hoffnungslos zu sein.
    Ich werde wohl ein manuelles Backup vom fhem-Ordner ziehen müssen und den pi neu aufsetzen…

    MfG Larimow

  4. Hallo Daniel,

    wie geht es weiter, wenn ich auf die Config-Datei mit sudo nano /etc/ssh/sshd_config komme? Wo kann ich PermitRootLogin no ändern bzw. eintragen.

    Wenn ich PermitRootLogin no als neue Zeile hinzufügen soll (ist das so?), ist mir nicht klar, wie ich das dann abspeichern kann bzw. wie ich mich in dem Menü bewegen kann (Seite vor etc.).

    Mit einer Googlesuche bin ich auf eine Hilfe gekommen, die mir aber og. Fragen leider nicht beantwortet: https://www.thomas-krenn.com/de/wiki/SSH_Root_Login_unter_Debian_verbieten

    Ich weiß, dass sind Basics, Anfängerfragen …. 😉

     

    • Hallo Tom,

      so genau verstehe ich dein Problem nicht. Wenn ich mit dem Befehl:

      sudo nano /etc/ssh/sshd_config

      den Editor öffne um die Datei „sshd_config“ zu bearbeiten, dann befindet sich der Eintrag „#Authentication“ in dieser Datei. Es muss keine neue Zeile hinzugefügt werden.
      Dort kann man dann ganz einfach den Eintrag „PermitRootLogin no“ auf „PermitRootLogin yes“ ändern. Um zu dieser Zeile zu gelangen kann man sich mit den Pfeiltasten durch die Zeilen bewegen. Durch ganze Seiten kann man mit „STRG+Y“ bzw. „STRG+V“ blättern.

      Hat man den Eintrag geändert, dann kann mit „STRG+O“ die Datei speichern (Bestätig durch „Enter“) und dann mit „STRG+X“ den Editor beenden.

      Hoffe ich konnte bisschen Licht ins Dunkle bringen 😉

      Gruß Daniel

Schreibe einen Kommentar

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

*