iptables – Teil 1: Einführung

By | 24. Oktober 2016

iptables Einführung –  iptables ist ein Programm zur Konfiguration der Linux Firewall Regeln. Da dieses erweiterte Systemprivilegien benötigt, muss es als root ausgeführt werden. Unter den gängigen Linux Betriebssystemen befindet sich das Programm unter /usr/sbin/iptables.

In diesem ersten Teil soll es um eine kompakte praktische Einführung in das Thema iptables gehen. Wer sich ausführlich- auch theoretisch – mit dem Thema befassen möchte, dem kann ich das Linux-Praxisbuch: Linux-Firewall mit IP-Tables empfehlen. Ich werde auf die IPv4 Version von iptables eingehen. Die IPv6 Version nennt sich ip6tables. Normalerweise erstellt aber die IPv4 Version von iptables auch gleich die Einträge für die IPv6 Version.

1. iptables Installation

Üblicherweise ist iptables bereits in der Standardinstallation vieler Linux Betriebssysteme enthalten. Sollte dies nicht der Fall sein, dann kann das Paket einfach über den jeweiligen Paketmanager nachinstalliert werden.

Debian/Ubuntu

apt-get install iptables

RedHat/Fedora/Cent OS …

yum install iptables

2. iptables Funktionsweise

Grundlegend wird bei iptables immer hierarchisch von oben nach unten gearbeitet. Es gibt

  1. Tabellen (Tables)
  2. Ketten (Chains)
  3. Filterregeln (Filter)

Trifft eine definierte Regel in einer Tabelle und Kette zu, so wird die in der Regel hinterlegte Aktion ausgeführt. Ansonsten tritt die in der Tabelle hinterlegte Policy ein.

Hinweis

Auf der Konsole eingegebene iptables Kommandos sind nicht permanent gültig. Nach einem Neustart des Geräts müssen diese erneut eingegeben werden. Dies kann natürlich auch automatisiert erfolgen über entsprechende Skripte, Deployment-Tools usw. Hierbei ist zu bedenken, dass bei einer Aussperrung aus dem System oft ein Neustart die einzige „Rettung“ ist und ein erneuter Zugang zum System ermöglicht wird.

2.1 iptables Tabellen

TabellenBeschreibung
filterDies ist die Standardtabelle. Enthalten sind die Ketten FORWARD, INPUT und OUTPUT.
natHier geht es um die Adressumsetzung. Enthalten sind die Ketten PREROUTING, OUTPUT und POSTROUTING.
manglePakete werden manipuliert. Es sind ALLE Ketten enthalten.

2.2 iptables Ketten

KettenBeschreibung
INPUTEingehende Pakete.
OUTPUTAusgehende Pakete.
FORWARDWeitergeleitete Pakete.
PREROUTINGPakete vor dem Routing.
POSTROUTINGPakete nach dem Routing.

2.3 iptables Filterregeln

FilterBeschreibung
-LAuflistung aller Regeln.
-L --line-numbersAuflistung aller Regeln mit Angabe von Zeilennummern.
-ARegel an das Ende der Kette hinzufügen.
-IRegel an den Anfang der Kette Hinzufügen
-FAlle Regeln löschen.
-DEine bestimmte Regel löschen.
-jAktion ausführen, wenn eine Regel zutrifft.

2.4 iptables Befehle

Auflistung grundlegender iptables Befehle.

Wer eine genauere Auflistung erhalten möchte, siehe hierzu auch die Manpages.

man iptables
BefehlBeschreibung
iptables -v, --versionAnzeige der iptables Version.
iptables-saveAusgabe der iptables Regeln.
iptables-save > FilenameBackup
iptables-restore < FilenameRestore

3. iptables Grundkonfiguration

Die wichtigsten Filterregeln bei einer Firewall sind die DROP Regeln. Ohne diese würde die Firewall alle Pakete durchlassen. Ganz wichtig, die DROP Regeln müssen an das Ende der Filterregeln. Wir erinnern uns, alles wird hierarchisch abgearbeitet. Würden die DROP Regeln am Anfang stehen, so würden alle Pakete verworfen werden, bevor diese weiter verarbeitet werden können und wir hätten uns aus dem System ausgesperrt.

Verwerfe alle eingehenden Pakete.

...
iptables -A INPUT -j DROP

Verwerfe alle ausgehenden Pakete. (Je nach Anforderung kann diese Regel auch ausgelassen und ausgehende Datenpakete generell erlaubt werden.)

...
iptables -A OUTPUT -j DROP

Fast immer wird bei Linux Servern remote gearbeitet und hierzu ein SSH Zugang zu einem Server benutzt. Die zweite essentielle Regel sollte also dafür sorgen, dass wir uns über eine SSH-Verbindung mit dem Server verbinden können und in diesem Fall sollte die Regel als erstes eingefügt werden. Somit stellen wir sicher, dass auf jeden Fall ein Zugang per SSH auf den Server möglich ist.

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Sollte ausgehender Datenverkehr durch eine DROP Regel nicht erlaubt sein, so benötigen wir .u.U. eine weitere Regel für die Antwortpakete. Auch diese Regel sollte als erstes eingefügt werden.

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

Eine Sache hätte ich noch fast vergessen. Ein Teil der Interprozesskommunikation läuft über das interne Netzwerk, also das Loopback Interface (lo). Hier sollten wir eine Regel bzw. zwei Regeln erstellen, so dass es zu keinen Fehlern kommt.

iptables -A INPUT -i lo -j ACCEPT

Bei nicht erlaubter ausgehender Kommunikation kommt folgende Regel hinzu.

iptables -A OUTPUT -o lo -j ACCEPT

Durch diese Regeln haben wir unseren Server komplett abgesichert und sichergestellt, dass wir uns per SSH auf diesen verbinden können. Je nach Einsatzzweck müssen natürlich noch weitere Regeln hinzugefügt werden, damit die entsprechenden Dienste auch funktionieren und erreichbar sind.

Zusammenfassung

Auf der Konsole folgende Kommandos zur Grundkonfiguration in exakt dieser Reihenfolge eingeben, wobei ausgehender Datenverkehr generell erlaubt ist.

iptables -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

Auf der Konsole folgende Kommandos zur Grundkonfiguration in exakt dieser Reihenfolge eingeben, wobei ausgehender und eingehender Datenverkehr generell verboten ist.

iptables -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP

Das war iptables – Teil 1: Einführung.

Links

Vielen Dank für das Lesen des Beitrags! Ich würde mich freuen, wenn du den Beitrag über die sozialen Netzwerke teilen würdest und Blog About Tech folgst.

One thought on “iptables – Teil 1: Einführung

  1. Pingback: iptables – Teil 2: Fortgeschrittene - Blog About Tech

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.