|
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.
|
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
|
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
|
|
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
|
|
|
|