Linux-Firewall verstehen IPTables für die Paketfilterung nutzen
Geht es um die Einrichtung von Firewalls für Linux-Server, spielt der im Kernel enthaltene Netfilter, der mit „iptables“ gesteuert wird eine wichtige Rolle. Mit Regeln lassen sich komplexe Firewall-Umgebungen erstellen. Wir geben einen Überblick.
Anbieter zum Thema

Netfilter stellt unter anderem Paketfilter, Network Address Translation und weitere für Firewalls relevante Werkzeuge für den Linux-Kernel bereit. Netfilter ist keine einfach zu bedienende Firewall für Linux. Jedem Administrator muss klar sein, dass Firewall-Regeln, die mit iptables in der Netfilter-Firewall erstellt werden, in vielen Fällen komplex sind. Einfach ausgedrückt, werden mit IPTables Tabellen erstellt, die der Netfilter-Firewall in Linux vorgeben, welche Pakete zum Server durchgelassen werden. Die Tabellen enthalten Ketten (Chains) und Regeln (Rules). Diese werden mit IPTables gesteuert.
Netfilter-Firewall mit IPTables steuern
Die Netfilter-Firewall des Linux-Kernels kann durch das Kommandozeilen-Programm „iptables“ gesteuert werden. Dieses ist meistens bereits Bestandteil der Installation. Die Hilfe wird mit „iptables --help“ aufgerufen. Ist iptables noch nicht installiert, kann die Installation mit dem folgenden Befehl erfolgen:
sudo apt-get install iptables
Zwar erfolgt normalerweise die Verwaltung der Netfilter-Firewall in Linux mit iptables über die Kommandozeile, es gibt aber auch Tools, mit denen iptables über die grafische Oberfläche genutzt werden kann. Ein Beispiel dafür ist Firestarter.
Chains - Input, Forward, Output
Der Befehl iptables steuert drei verschiedene Chains. Mit „Input“ werden eingehende Verbindungen gesteuert, die auf den lokalen Server eingehen. „Forward“ steuert Verbindungen, die nicht lokal verarbeitet werden, sondern die der Server weiterleiten muss, zum Beispiel wenn er als Router arbeitet. Um die erstellten Forward-Chains anzuzeigen, kann der folgende Befehl verwendet werden:
iptables -L -v
Hier muss gegebenenfalls aber mit „sudo“ gearbeitet werden. Die Informationen des Befehls geben Aufschluss darüber, ob das lokale System als Router genutzt wird. Mit „Output“ wird schließlich der Datenverkehr gesteuert, der vom lokalen Server in das Netzwerk geschickt wird. Damit eine Firewall-Regel funktioniert, muss darauf geachtet werden, dass eingehender Datenverkehr, oft auch in ausgehenden Datenverkehr resultiert. Wird ein Server angepingt, muss er auf die Anfrage antworten. Hier sind also eingehende und ausgehende Pakete zu steuern. Die Chains müssen also korrekt konfiguriert werden.
:quality(80)/images.vogel.de/vogelonline/bdb/1613800/1613808/original.jpg)
Video-Tipp: Kali Linux und das WSL
Kali Linux direkt in Windows 10 einbinden
Standardverhalten der Firewall steuern
Mit iptables lässt sich auch das Standard-Verhalten definieren. Dieses gibt vor, wie sich die Firewall verhalten soll, wenn es für Datenverkehr keine Regel gibt. Es lassen sich für alle drei Chains Standards definieren, also für Input, Output und Forward. Mit dem folgenden Befehl kann angezeigt werden, wie das Standard-Verhalten der Firewall ist:
iptables -L
Der Wert bei „policy“ zeigt an, wie sich der Linux-Server verhält. In den meisten Fällen ist der Wert „Accept“. Dieser zeigt an, dass der Datenverkehr für alle drei Ketten akzeptiert wird, wenn es keine Regel gibt, die den Verkehr blockiert. Der folgende Befehl filtert die Option für „Policy“ aus:
iptables -L | grep policy
Werden Verbindungen nicht automatisch akzeptiert, kann das mit den folgenden Befehlen gesteuert werden:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Sollen alle Verbindungen automatisch blockiert werden, sind folgende Befehle dafür zuständig:
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Anschließend werden Regeln erstellt, die festlegen welcher Datenverkehr erlaubt wird. Alle anderen Pakete, für die es keine Regel gibt, werden entweder durchgelassen (Accept) oder blockiert (Drop).
Ergebnisse speichern
Wichtig ist, dass Änderungen, die mit iptables vorgenommen werden auch gespeichert werden müssen. Ansonsten werden die Anpassungen gelöscht. Die Speicherung erfolgt auf Linux-Systemen auf Basis von Ubuntu mit dem folgenden Befehl:
sudo /sbin/iptables-save
Beim Einsatz von CentOS oder Red Hat erfolgt die Speicherung mit:
/sbin/service iptables save
Alternativ wird der folgende Befehl verwendet:
/etc/init.d/iptables save
Wer alle Regeln löschen will, verwendet den folgenden Befehl:
iptables -F
Damit die Regeln produktiv umgesetzt werden, müssen die IPTables mit folgendem Weg gespeichert werden:
Debian/Ubuntu: iptables-save > /etc/iptables/rules.v4
RHEL/CentOS: iptables-save > /etc/sysconfig/iptables
Ziele und IP-Adressen in Regeln implementieren
Um Regeln mit iptables zu erstellen, ist es wichtig zu definieren, wie die Netfilter-Firewall in Linux auf Anfragen von spezifischen IP-Adressen reagieren soll. Hier gibt es generell drei verschiedene Antworten:
- Accept: Erlaubt die Verbindung
- Drop: Löscht die Verbindung. Das entfernte System erkennt nicht, dass eine Verbindung überprüft wurde
- Reject: Die Verbindung wird aufgebaut, das entfernte System erhält die Meldung, dass der Verbindungsaufbau verweigert wurde.
Sollen zum Beispiel alle Verbindungen von einer IP-Adresse gelöscht werden, wird der folgende Befehl genutzt:
iptables -A INPUT -s 192.168.178.1 -j DROP
Sollen alle Verbindungen von einem Subnetz gelöscht werden, wird der folgende Befehl genutzt:
iptables -A INPUT -s 192.168.178.0/24 -j DROP
Alternativ kann auch der folgende Befehl verwendet werden:
iptables -A INPUT -s 192.168.178.0/255.255.255.0 -j DROP
Die Regeln lassen sich auch genauer spezifizieren, um zum Beispiel SSH-Verbindungen von einer Quelle zu löschen:
iptables -A INPUT -p tcp --dport ssh -s 192.168.178.1 -j DROP
Sollen generell alle Verbindungen blockiert werden, wird der folgende Befehl verwendet:
iptables -A INPUT -p tcp --dport ssh -j DROP
Damit eine Regel funktioniert, müssen bei den meisten Kommunikationsvorgängen der Eingang und der Ausgang des Paketes gesteuert werden. Um zum Beispiel eingehende Verbindungen zu steuern, und nur für das anfragende System eine Verbindung zuzulassen, werden folgende Befehle verwendet:
iptables -A INPUT -p tcp --dport ssh -s 192.168.178.1 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 192.168.178.1 -m state --state ESTABLISHED -j ACCEPT
(ID:46248371)