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.

passwd

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.

sudo useradd –m neuerBenutzer –G sudo

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.

sudo passwd neuerBenutzer

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.

sudo deluser –remove-home pi

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.

sudo nano /etc/ssh/sshd_config

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

PermitRootLogin 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:

Port 1045

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.

sudo apt-get install fail2ban

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

sudo nano /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:

sudo iptables -A INPUT -i lo -j ACCEPT

nicht eindeutige Pakete verwerfen:

sudo iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
sudo iptables -A INPUT -f -j DROP
sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

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

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

SSH erlauben (Port entsprechend anpassen)

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

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

sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8083 -j ACCEPT
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8084 -j ACCEPT
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8085 -j ACCEPT

Zum Schluss sollten dann alle anderen Verbindungen blockiert werden:

sudo iptables -A INPUT -j REJECT

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

Nun müssen die Regeln noch abgespeichert werden:

sudo sh -c "iptables-save > /etc/network/iptables"

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

sudo iptables –L

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:

sudo touch /etc/network/if-pre-up.d/iptables

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

sudo chmod +x /etc/network/if-pre-up.d/iptables

Die auszuführende Datei wird nun bearbeitet

sudo nano /etc/network/if-pre-up.d/iptables

damit die Regeln nach einem Neustart aktiviert werden:

#!/bin/sh
/sbin/iptables-restore /etc/network/iptables

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.

# FTP-Zugriff aktivieren
sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
# Samba Server erlauben
sudo iptables -A INPUT -p udp -m state --state NEW -m udp --dport 137 -j ACCEPT
sudo iptables -A INPUT -p udp -m state --state NEW -m udp --dport 138 -j ACCEPT
sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 139 -j ACCEPT
sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 445 -j ACCEPT
# HTTP & HTTPS – Webzugriff erlauben
sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
# TightVNC Server erlauben
sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT
# XRDP Server erlauben
sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 3389 -j ACCEPT

Anschließend wieder abspeichern:

sudo sh -c "iptables-save > /etc/network/iptables"

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:

sudo nano /etc/network/iptables

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)

Hinterlasse einen Kommentar

8 Kommentare auf "Raspberry im Internet absichern"

Benachrichtige mich zu:
avatar
Fotos und Bilder
 
 
 
sonstiges Dateiformat
 
 
 
Sortiert nach:   neuste | älteste | beste Bewertung
Jörg
Gast
Jörg

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?

Larimow
Gast
Larimow
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.… weiterlesen »
Larimow
Gast
Larimow
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… weiterlesen »
tom
Gast
tom

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 …. 😉

 

tom
Gast
tom

Hallo Daniel,

ja, du hast sehr viel Licht ins Dunkle gebracht 😉

Herzlichen Dank und einen schönen vierten Advent, Tom

wpDiscuz