SelfLinux Sicherheit IP-Tables Abschnitt 6 | SelfLinux-0.13.0

| IP-Tables | Autor Formatierung GFDL

#### 8 Ziele der Regeln bestimmen

#### 8.1 Grundlegendes zu Zielen (Targets)

Wie bereits erwähnt, beinhaltet jede Kette (INPUT, OUTPUT, FORWARD) eine Checkliste von Regeln, die folgendermaßen aussehen:

WENN (Filteroption) DANN Aktion (Löschen, Akzeptieren, ... des Paketes)

root@linux # iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP

Neben den einfachen, eingebauten Zielen DROP (Paket Verwerfen) und ACCEPT (Paket annehmen) gibt es spezielle Ziele (RETURN, QUEUE) und Erweiterungen, die entsprechende Kernelmodule erfordern. Weiterhin hat man die Möglichkeit, zu benutzerdefinierten Ketten zu verzweigen.

#### 8.2 Benutzerdefinierte Ketten

Ein relativ sicherer Paketfilter kann nur durch ein sehr komplexes Regelwerk realisiert werden. Um dieses Regelwerk zu strukturieren, gibt es die Möglichkeit, neben den eingebauten Ketten (INPUT, OUTPUT und FORWARD) zusätzliche benutzerdefinierte Ketten zu erstellen.

Diese Ketten sollten mit Kleinbuchstaben benannt werden, um sie besser von den eingebauten unterscheiden zu können.

Wenn ein Paket auf eine Regel (beispielsweise der INPUT Kette) mit dem Ziel einer benutzerdefinierten Kette zutrifft, wird das Filtern des Paketes in dieser Kette fortgeführt. Sollte tatsächlich keine Regel in dieser benutzerdefinierten Kette zutreffen, wird die Suche in der vorherigen Kette fortgesetzt. Benutzerdefinierte Ketten können zu anderen benutzerdefinierten Ketten verzweigen. Wenn die Pakete in einer Schleife gefangen sind, werden sie einfach verworfen (gelöscht).

Ein Beispiel befindet sich im Abschnitt Schnelle Lösung ohne viele Worte

#### 8.3 Erweiterungen der Ziele

Eine Zielerweiterung besteht aus einem Kernelmodul und einer optionalen Erweiterung der Kommandozeilenoptionen von iptables.

LOG (ipt_LOG)

Dieses Ziel bietet Kernel-Logging. Damit die LOG-Files nicht überflutet werden, sollte es mit einem limit Parameter eingesetzt werden. Folgende Optionen sind möglich:

--log-level

> Gefolgt von einer Level-Nummer (Priorität) oder einem Namen (debug, info, notice, warning, err, crit, alert und emerg). Im Kapitel über syslog werden diese Level erklärt.

--log-prefix

> Gefolgt von einer Zeichenkette (max. 30 Zeichen), die zu Beginn der Logmeldung ausgeschrieben wird.

--log-tcp-sequence

> Zeichnet die TCP-Sequenznummer auf. Achtung: Mögliches Sicherheitsrisiko, wenn Benutzer Zugriff auf Log-Files hat!

--log-tcp-options

> Loggt die Optionen des TCP-Headers

--log-ip-options

> Loggt die Optionen des IP-Headers

Beispiel:

root@linux # iptables -A INPUT -p icmp -m limit --limit 10/s -j LOG --log-level debug --log-prefix "icmp-logging started"

REJECT

> Dieses Ziel verwirft das Paket und schickt dem Sender eine ICMP 'port unreachable' Fehlermeldung. Einschränkungen und weitere Informationen siehe RFC 1122.

MIRROR

> befindet sich noch in einer experimentellen Phase.

> Die erweiterten Ziele SNAT, DNAT, MASQUERADE und REDIRECT werden für Network Address Translation verwendet und sind deshalb nur in der NAT-Tabelle gültig:

SNAT

> Dieses Ziel manipuliert die Quelladresse eines Paketes (siehe Kombinieren von NAT und Paketfilter). Es ist nur in der POSTROUTING-Kette gültig.

DNAT

> Dieses Ziel manipuliert die Zieladresse eines Paketes. (siehe Kombinieren von NAT und Paketfilter).

MASQUERADE

> Dieses Ziel wird für die Maskierung von Verbindungen mit dynamisch zugewiesenen IPs benutzt (für Verbindungen mit statischen IPs sollte SNAT verwendet werden). Es ist nur in der POSTROUTING-Kette gültig.

REDIRECT

> Dieses Ziel ändert die Adresse eines Paketes, so dass es an die lokale Maschine gesendet wird. Es ist nur in den PREROUTING- und OUTPUT-Ketten gültig und wird vorzugsweise für transparente Proxies eingesetzt.

Beispiel: transparenter Proxy (squid)

root@linux # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Die folgenden beiden Ziele dienen der Paketmanipulation und sind nur in der MANGLE-Tabelle gültig:

TOS

> Mit der Option --set-tos kann das Type-of-Service-Feld geändert werden. Weitere Informationen zu diesem TOS-Feld gibt es hier.

MARK

> Mit der Option --set-mark kann der Netfilter-Markierungswert gesetzt werden. Weitere Informationen gibt es hier.

Beispiel:

root@linux # iptables -t mangle -A PREROUTING -p tcp -m multiport --dport 22,25,119,110,143 -j MARK --set-mark 1

#### 8.4 Spezielle eingebaute Ziele (RETURN und QUEUE)

RETURN

> Bei benutzerdefinierten Ketten bedeutet ein RETURN die direkte Rückkehr zur aufrufenden Kette. Die Filterung durch die benutzerdefinerte Kette wird abgebrochen.

> Bei eingebauten Ketten (INPUT, FORWARD, OUTPUT) wird die Abarbeitung beendet und es greift die Standard-Policy.

QUEUE

> Hier können Regelentscheidungen durch Anwendungsprogramme (Benutzerprozesse) getroffen werden. Dazu wird ein queue handler benötigt (für IPv4 gibt es das ip_queue Modul), der das Paket an ein Anwendungsprogramm überreicht. Wenn Sie tatsächlich ein Programm entwickeln möchten, sollten Sie die libipq API verwenden, die mit iptables mitgeliefert wird. Beispielcode (z.B. redirect.c) finden Sie in der Testsuite Tools auf dem CVS Server http://cvs.netfilter.org/netfilter/.

Beispiel:

root@linux # iptables -A OUTPUT -p icmp -j QUEUE root@linux # ping 141.24.12.2