Good to Know Database

Raspbian Wheezy: iptables konfigurieren


Wenn Sie auf Ihrem Raspberry Pi das momentan aktuelle Raspbian Image vom 09.02.2013 (2013-02-09-wheezy-raspbian.zip) einsetzen, dann ist die Linux-Firewall iptables bereits installiert. In der Grundkonfiguration von Raspbian erlaubt iptables jedoch den Zugriff auf jeden Port für jede beliebige IP-Adresse. Dies ist oft nicht erwünscht weil Dienste nur für bestimmte Netzwerkbereiche verfügbar sein sollen oder generell alle Zugriffe auf das Linux-System und dessen Dienste durch eine Firewall gefiltert werden sollen.

Die folgende Anleitung soll zeigen, wie Sie iptables unter Raspbian konfigurieren und den SSH-Zugriff erlauben. Es soll anhand des SSH-Ports auch gezeigt werden, wie Sie diesen nur für das lokale Netzwerk freigeben können.

Standardmäßig gibt es im aktuellen Raspbian Image noch keine Konfigurationsdatei für die Firewall-Regeln. Daher erstellen Sie einfach die Datei /etc/network/iptables mit einem Editor.

pi@raspberrypi ~ $ sudo vi /etc/network/iptables

Fügen Sie hier zum Beispiel die folgende Konfiguration ein. Die einzelnen Regeln werden im Anschluss erklärt.

*filter
:INPUT DROP [159:12505]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [140:13492]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

Die folgende Regel erlaubt alle Zugriffe welche über die Loopback-Schnittstelle lo ankommen. Dies können nur Zugriffe vom eigenen Linux-System sein.

-A INPUT -i lo -j ACCEPT

Über die nächste Firewall-Regel werden ICMP-Anfragen wie zum Beispiel der ICMP Echo Request, auch bekannt als Ping, erlaubt.

-A INPUT -p icmp -j ACCEPT

Damit bereits aufgebaute eingehende Verbindungen generell erlaubt werden sorgt die folgende Regel.

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

Die nächste Firewall-Regel erlaubt den Zugriff auf den TCP-Port 22 welcher normalerweise vom SSH-Daemon genutzt wird. Hierbei erfolgt keine Unterscheidung ob die Verbindungsanfrage vom internen Netzwerk oder von einem anderen Netzwerk wie zum Beispiel dem Internet kommt.

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

Wenn Sie den Zugriff auf den SSH-Daemon nur aus dem internen Netzwerk erlauben wollen, können Sie die Regel wie folgt erweitern. Es wird hier angenommen, dass Sie sich im Netzwerk 192.168.10.0/24 befinden.

-A INPUT -s 192.168.10.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

Wenn Sie zwei Netzerkschnittstellen verwenden, wie zum Beispiel LAN und WLAN, können Sie den SSH-Port auch nur auf einem Interface freigeben. Die folgende Regel erlaubt nur den Zugriff über die LAN-Schnittstelle eth0.

-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

Die letzte Firewall-Regel in der hier gezeigten Beispielkonfiguration weist alle eingehenden Pakete ab, welche nicht durch eine der vorhergehenden Firewall-Regeln explizit erlaubt wurde. Aus diesem Grund muss diese Regel auch immer die letzte Regel in der sogenannten Firewall-Chain sein.

-A INPUT -j REJECT --reject-with icmp-host-prohibited

Wenn Sie die Konfigurationsdatei /etc/network/iptables erstellt haben, sollten Sie diese jetzt mit dem folgenden Befehl laden.

pi@raspberrypi ~ $ sudo iptables-restore /etc/network/iptables

Ob die Firewall-Regeln geladen wurden können Sie wie folgt überprüfen.

pi@raspberrypi ~ $ sudo iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Bevor Sie mit dem nächsten Schritt fortfahren, sollten Sie sicherstellen, dass der Zugriff über SSH und gegebenenfalls auf weitere freigegebene Ports funktioniert.

Damit die Firewall-Regeln bei einem Neustart des Systems oder des Netzwerkdienstes automatisch geladen werden, müssen Sie noch ein Pre-Up Skript erstellen.

pi@raspberrypi ~ $ sudo vi /etc/network/if-pre-up.d/iptables

Fügen Sie in die Datei /etc/network/if-pre-up.d/iptables die folgenden Zeilen ein.

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

Damit das Skript ausgeführt werden kann müssen Sie die Zugriffsrechte entsprechend anpassen.

pi@raspberrypi ~ $ sudo chmod +x /etc/network/if-pre-up.d/iptables

Wenn Sie testen wollen ob die Firewall-Regeln auch nach dem Neustart geladen werden, können Sie jetzt einen Neustart des Systems durchführen.

pi@raspberrypi ~ $ sudo shutdown -r now

Nach dem Neustart können Sie die Firewall-Regeln wieder mit dem folgenden Befehl auslesen.

pi@raspberrypi ~ $ sudo iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Weiterführende Anleitungen

Raspbian Wheezy: iptables Firewall-Regeln für diverse Dienste
Raspbian Wheezy: SSH-Server vor Brute-Force-Angriffen schützen


Dieser Eintrag wurde am 31.03.2013 erstellt und zuletzt am 25.09.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_36_2167.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2017 by Georg Kainzbauer