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.