Linux-Firewall verstehen IPTables für die Paketfilterung nutzen

Autor / Redakteur: Thomas Joos / Peter Schmitz

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

Mit iptables-Regeln für Netfilter lassen sich unter Linux komplexe Firewall-Umgebungen erstellen.
Mit iptables-Regeln für Netfilter lassen sich unter Linux komplexe Firewall-Umgebungen erstellen.
(Bild: Ronstik - stock.adobe.com)

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.

Bildergalerie
Bildergalerie mit 5 Bildern

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.

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 ACCEPTiptables --policy OUTPUT ACCEPTiptables --policy FORWARD ACCEPT

Sollen alle Verbindungen automatisch blockiert werden, sind folgende Befehle dafür zuständig:

iptables --policy INPUT DROPiptables --policy OUTPUT DROPiptables --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).

Bildergalerie
Bildergalerie mit 5 Bildern

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.v4RHEL/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 ACCEPTiptables -A OUTPUT -p tcp --sport 22 -d 192.168.178.1 -m state --state ESTABLISHED -j ACCEPT

(ID:46248371)