Raspberry mit CUL-Stick

Raspberry Pi: Firewall richtig konfigurieren (iptables)

Kurz vor weg: Ich bin kein Linux-Experte. Daher kann ich keine Garantie auf die Vollständigkeit dieses Artikels geben. Die Änderungen an der Firewall des Betriebssystem sollten somit nur mit genauer Vorsicht unternommen werden.

Als ich vor einigen Wochen die no-ip-Konfiguration auf meinem Raspberry Pi durchgeführt habe, kam ich per Port Forwarding über meine Domain zwar super auf mein MacBook Pro (MAMP), aber ich hatte irgendwie keine Möglichkeit auf mein Raspberry Pi zuzugreifen. Schuld war die Firewall (iptables), welche vorkonfiguriert ausgeliefert werden:

sudo /sbin/iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.2.0/24      anywhere            
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Um zu testen, ob der Zugriff mit abgeschalteten Regeln funktioniert, kann man alle Regeln mit folgendem Befehl temporär (bis zum nächsten Neustart) deaktivieren:

sudo /sbin/iptables --flush

Nun funktioniert zwar der Zugriff, aber auch alles andere ist weit geöffnet. Über einen Port-Scanner kann der aktuelle Status abgefragt werden. Da ich aber nur bereitstellen möchte, was ich auch wirklich nutze, stört es mich etwas, dass beispielsweise auch mySQL und SMTP geöffnet sind. Eine Liste der offenen Ports bekommt man mit:

sudo nmap -sS -O 192.168.2.113
Not shown: 992 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
111/tcp  open  rpcbind
3306/tcp open  mysql
8080/tcp open  http-proxy
8083/tcp open  us-srv
8084/tcp open  unknown
8085/tcp open  unknown

Auf Port 8080 läuft beispielsweise das XBMC Media Center – das muss wirklich nicht übers Netz zugänglich sein. Ich gehe also zur Sicherheit nach dem Ausschlussverfahren durch: Alles was nicht explizit erlaubt ist, wird verboten. So muss ich mir über die Firewall keine Gedanken machen, wenn ich in Zukunft weitere Dienste installieren sollte. Sicher ist sicher.

Als erstes ist also SSH dran. Da die Regeln von oben nach unten abgearbeitet werden, füge ich vor dem DROP aller Verbindungen, einfach die Ausnahmen hinzu, die von überall erreichbar sein sollen. Angefangen wird mit SSH:

sudo iptables -I INPUT 3 -p tcp --dport ssh -j ACCEPT

Dieser Befehl fügt die Regel an die dritte Stelle in der INPUT-Sektion ein.

Damit die Regeln bei jedem Boot angelegt werden, fügen wir sie in die folgende Datei ein:

sudo vi /etc/rc.local

Ich weise hiermit ausdrücklich darauf hin, dass nicht die schönste Art und Weise ist, die Regeln zu hinterlegen. Wie es besser geht, kann man in diesem Beitrag nachlesen. Die sauberere Variante, wäre sicher eine Definition in der Datei /etc/network/if-up.d/secure-rmc

Viel Erfolg! Ich bin jedenfalls endlich online.


Beitrag veröffentlicht

in

, , ,

von

Schlagwörter: