Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:iptables

iptables

Seit dem Kernel 2.4 wird über die sogenannte Netfilter-Infrastruktur im Linux-Kernel das manipulieren des Netzwerkverkehrs ermöglicht (Firewall). Die Konfiguration des Netfilters im Kernel 2.4/2.6 wird über des Tool iptables (/sbin/iptables) durchgeführt.

Grundlagen

Das Regelwerk dem die Netfilter-Infrastruktur folgt, ist in sogenannte „Tabellen“ (Tables) aufgebaut, die wiederum „Ketten“ (Chains) enthalten, die wiederum „Regeln“ (Rules) enthalten.

Tabellen

Die Art der Verarbeitung ist in verschiedene „Tabellen“ (Tables) unterteilt. iptables besitzt standardmäßig drei Tabellen

  1. mangle (Paketmanipulationen)
  2. nat (Network Access Translation)
  3. filter (Paketfilter)

Die Tabelle mangle (übersetzt: zerhauen) ermöglicht es dem Kernel, Daten im „Paket-Header“ zu verändern.
Die Tabelle nat ermöglicht es interne und externe IP-Adressen zu übersetzen. Regeln in dieser Tabelle ändern die IP-Adresse und/oder den Port des Ziels.
Die Tabelle filter prüft alle für die Firewall ankommenden Pakete und entscheidet, ob diese durchgelassen oder geblockt werden.

Ketten

Die „Ketten“ (Chains) sind innerhalb der Tabellen und können aus fünf verschiedenen Typen bestehen

  1. PREROUTING - alle Pakete kommen hier durch, bevor eine Routing-Entscheidung getroffen wird.
  2. FORWARD - für alle Pakete, die nur weitergeleitet werden, also keine Pakete, die an einen lokalen Dienst gerichtet sind.
  3. INPUT - für alle Pakete, die an einen lokale Dienst gerichtete sind.
  4. OUTPUT - für alle Pakete, die von einem lokalen Dienst kommen.
  5. POSTROUTING - alle Pakete kommen am Ende der Verarbeitung hier durch.

Regeln

Die „Regeln“ (Rules) entscheiden darüber, was mit einem Paket passieren soll. Jede „Regel“ besitzt bestimmte „Parameter“, mit denen sie ermittelt, wie mit dem Paket verfahren werden soll. Für die „Regeln“ gibt es sechs „Ziele“ oder „Methoden“ für alle „Ketten“ und drei zusätzliche für die „Tabelle“ nat, die angewandt werden.

  1. ACCEPT - das Paket kann passieren.
  2. DROP - das Paket wird verworfen und keine Antwort gesendet.
  3. LOG - schreibt einen Eintrag in das syslog
  4. QUEUE - Das Paket wird in eine „Queue“ im Userspace gesendet, so das es von einem „Programm“ genutztz werden kann
  5. REJECT - das Paket wird abgewiesen und ein Fehlerpaket wird gesendet.
  6. RETURN - Verlassen einer „benutzerdefinierten Kette“ und fortsetzen der Abarbeitung in der vorhergehenden „Kette“.

Zusätzliche „Ziele“ und „Methoden“ der „Tabelle“ nat.

  1. DNAT und SNAT - Ersetzen von Ziel-Adresse und Quell-Adresse.
  2. MASQUERADE - (nur POSTROUTING) die Quell-Adresse des Pakets wird durch die IP-Adresse des lokalen Rechners ersetzt, auf dem es den Rechner verlässt.
  3. REDIRECT - (nur PREROUTING und OUTPUT) die Ziel-Adresse des Pakets wird so verändert, dass es zum lokalen Rechner gesendet wird.

Zusammenhänge Tabellen, Ketten und Regeln

Die Tabellen enthalten immer folgende Ketten

  • mangle enthält alle Ketten.
  • nat enthält die Ketten PREROUTING, OUTPUT und POSTROUTING.
  • filter enthält die Ketten FORWARD, INPUT und OUTPUT.

Die folgenden Ketten

  • INPUT
  • FORWARD
  • OUTPUT

besitzen immer eine „Standard-Regel“.

Ablaufreihenfolge

Nun stellt sich die Frage, in welcher Reihenfolge ein Paket die „Tabellen“ (Tables), „Ketten“ (Chains) und „Regeln“ (Rules) durchläuft? Die Antwort sieht so aus:

 Paket                
   |                 
   |      
   |         +—————————→Routing              +—————————→lokaler Prozess
   |         ↑             ↓                 ↑                 |         +————————→+
   |         |     +———————+———————+         |                 |         ↑         |
   ↓         |     ↓               ↓         |                 ↓         |         ↓
 mangle      |     mangle          mangle    |                 mangle    |         mangle
 PREROUTING  |     FORWARD         INPUT     |                 OUTPUT    |         POSTROUTING
   |         |     |               |         |                 |         |         |
   |         |     |               |         |                 |         |         |
   ↓         |     |               |         |                 ↓         |         ↓
 nat         |     |               |         |                 nat       |         nat
 PREROUTING  |     |               |         |                 OUTPUT    |         POSTROUTING
   |         |     |               |         |                 |         |         |
   ↓         |     |               |         |                 |         |         |
   +————————→+     ↓               ↓         |                 ↓         |         |
                   filter          filter    |                 filter    |         |
                   FORWARD         INPUT     |                 OUTPUT    |         |
                   |               |         |                 |         |         |
                   |               |         |                 |         |         |
                   |               +————————→+                 ↓         |         |
                   +——————————————————————————————————————————→+————————→+         |
                                                                                   |
                                                                                   ↓
                                                                                   Paket

Befehle

Mit iptables ist es nun möglich „Regeln“ (Rules) innerhalb der Ketten (Chains), welche in den Tabellen (Tables) sind, zu erstellen, zu ändern und zu löschen.

Parameter

Befehl Kürzel Beschreibung
–append -A Hängt eine neue Regel an
–delete -D Löscht eine bestehende Regel
-D pos Löscht eine bestehende Regel an der Position pos
–insert -I Fügt eine neue Regel hinzu
-I pos Fügt eine neue Regel an der Position pos hinzu
–replace -R pos Ändert eine bestehende Regel an der Position pos
–list -L Listet alle Regeln auf
-L chain Listet alle Regeln der Kette chain auf
–flush -F Löscht alle Regeln
-F chain Löscht alle Regeln der Kette chain
–zero -Z Löscht den Aufrufzähler der Regeln
-Z chain Löscht den Aufrufzähler der Regeln in der Kette chain
–new -N chain Erstellt eine benutzerdefinierte Kette chain
–delete-chain -X Löscht eine benutzerdefinierte Kette
-X chain Löscht eine benutzerdefinierte Kette chain
–policy -P chain target Setzt in einer Kette chain die Methode target
–rename-chain -E old new Umbenennen einer Kette old nach new inkl. Ref.
–version -V Version von iptables.

Optionen

Option Kürzel Beschreibung
–proto -p proto Das Protokoll auf das die Regel angewendet werden soll.
Oft werden hier für proto z.B. tcp, udp, icmp, oder all benutzt. Es können auch die numerischen Werte für IP benutzt werden.

Eine Aufstellung finden Sie meist in der Datei /etc/protocols vor.
–source -s address[/mask] Die Quelladresse des Pakets. Benutzt werden kann für adress/[mask] ein Hostnamen, IP-Adresse oder Netzwerkadresse. Falls kein Wert angegeben wird, wird -s 0/0 benutzt (= alle Adressen).

:!: Von der Verwendung eines Hostnamens ist aus Gründen der Performance abzuraten, da dieser erst aufgelöst werden müsste!
–destination -d address[/mask] Die Zieladresse des Pakets. Ansonsten siehe –source
–in-interface -i input-name[+] Die Netzwerkschnittstelle, die das Paket empfängt. Als Argument für input-name[+] gilt der Name der Schnittstelle z.B. eth0.Ein + nach dem Namen gilt als Platzhalter (eth+ gilt für eth0, eth1, usw.)

:!: Nur die Ketten PREROUTING, FORWARD und INPUT haben eine Input-Schnittstelle!
–jump -j target Hier wird festgelegt, was mit dem Paket geschieht, wenn die Regel zutrifft. Als Argument target werden meist die bekannten Methoden der „Regeln“ verwendet. z.B. -j ACCEPT
–goto -g chain Sprung aus einer aktuellen „Kette“ in die angegeben „Kette“ chain ohne Rücksprung in die Usprungskette.
–match -m match Angabe einer match Erweiterung, siehe auch –proto
–numeric -n Ausgabe von IP-Adressen und Ports in numerischer Darstellung z.B. 0.0.0.0/0
–out-interface -o output-name[+] Die Netzwerkschnittstelle, über die das Paket gesendet wird. Als Argument für input-name[+] gilt der Name der Schnittstelle z.B. eth0.Ein + nach dem Namen gilt als Platzhalter (eth+ gilt für eth0, eth1, usw.)

:!: Nur die Ketten FORWARD, OUTPUT und POSTROUTING haben eine Output-Schnittstelle!
–table -t table Hier wird die „Tabelle“ angegeben, auf die sich die „Regel“ bezieht. Die „Tabelle“ filter ist die „Standard-Tabelle“.
–line-numbers Ausgabe von Zeilennummern, bei einer Ausgabe z.B. -L
–exact -x Ausgabe von exakten Zahlenangaben z.B. nicht 437K sondern 437456
–fragment -f Wenn ein Paket zu groß ist um es an einem Stück zu versenden, dann wird dies in mehrere Teile (Fragmente) aufgeteilt. Der erste Teil enthält die kompletten Header-Informationen und wird wie ein vollständiges Paket behandelt. Die nachfolgenden Teile, enthalten nur noch Teilinformationen. Mit diesem Parameter können Regeln auf die nachfolgenden Teilstücke erstellt werden.

:!: Durch voranstellen des Zeichens ! können bei fast allen Befehlen (nur da wo es natürlich Sinn macht) die „Regeln“ negiert werden!

Weiterführende Informationen

Eine ausführliche und weiterführende Dokumentation kann unter folgendem Link nachgeschlagen werden:

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
tachtler/iptables.txt · Zuletzt geändert: 2012/11/28 14:34 von klaus