VorInhalt

5. iptables-Parameter

Anm.: weitere Details zu den nun folgenden Beschreibungen findet man in der Manual-Page von iptables (man iptables).

Im Kapitel 4 habe ich ihnen die Befehle von iptables erläutert. Dabei haben Sie schon verschiedene Parameter kennengelernt. Unter iptables werden diese Parameter auch Matches genannt. Diese werden benutzt um eine Regel zu spezifizieren. Meist sind sie Optional. Wenn sie weggelassen werden, dann gilt die Regel für alles. Z.B. kann eine Regel mit dem Parameter --in-interface auf einen Netzwerkadapter spezifiziert werden. Dann gilt sie nur für eben diesen Adapter. Lässt man den Parameter weg, gilt sie für alle.

5.1 Parameterliste

In iptables gibt es sehr viele Parameter. Ich werde Ihnen hier zunächst nur die geläufigsten erklären. Weitere folgen in den späteren Kapiteln. Alle werde ich nicht erklären. Zu den Parametern muss immer noch ein Argument mit übergeben werden. Hier nun eine Liste mit häufig benutzten Parametern:

Parameter
Kürzel
Beschreibung
Syntax/ Beispiel
--table
-t
Hiermit wird die Tabelle angegeben auf die sich die Regel bezieht. Die Tabelle filter ist die Standardtabelle.
-t nat
-t mangle
--protocol
-p
Das Protokoll auf das die Regel achten soll. Oft benutzte Argumente sind u.a. tcp, udp, icmp oder all. Es können auch die numerischen Protokollwerte für IP benutzt werden. Man findet sie in der Datei /etc/protocols. Ein ! (Gesprochen: NICHT) vor dem Argument negiert den Wert.
-p tcp
-p tcp,!udp
-p 6
--source
-s, --src
Die Quelladresse des Paketes. Benutzt werden kann ein Hostname, IP-Nummer oder Netzwerkadresse. Von der Benutzung eines Hostnamens ist aber aus Geschwindigkeitsgründen abzuraten, da dieser ja erst aufgelöst werden muss. Auch hier gilt: ein ! negiert den Wert. Wenn keine Quelladresse angegeben wurde, wird -s 0/0 benutzt (=alle Adressen)
-s 192.168.0.1
-s 192.168.0.0/24
-s localhost

--destination
-d, --dst
Die Zieladresse des Paketes. Ansonsten siehe --source
-d 192.168.0.1
-d 192.168.0.0/24
-d localhost
--in-interface
-i
Die Netzwerkschnittstelle, die das Paket empfängt. Als Argument gilt der Name der Schnittstelle (siehe ifconfig). Nur die Ketten INPUT, FORWARD und PREROUTING haben eine Input- Schnittstelle!Ein ! vor dem Argument negiert den Wert. Ein + nach dem Namen ist ein Platzhalter (eth+ gilt für eth0, eth1 usw.)
-i eth0
-i eth+
--out-interface
-o
Die Netzwerkschnittstelle über die das Paket gesendet wird. Nur die Ketten OUTPUT, FORWARD und POSTROUTING haben eine Output- Schnittstelle! Ansonsten siehe --in-interface -o ppp0
-o ! ppp0

--fragment
-f
Wenn Pakete zu groß sind um sie 'an einem Stück' zu versenden, werden sie in mehrere Teile (Fragmente) zerlegt. Der erste enthält weiterhin die komplette Header- Felder und wird wie ein 'normales' Paket behandelt. Die nachfolgenden enthalten nur noch Teilinformationen. Mit diesem Parameter können Regeln auf eben diese Teilstücke erstellt werden.
-f
! -f
--jump
-j
Das Ziel der Regel. Hier wird festgelegt was mit einem Paket geschieht wenn eine Regel zutrifft. Als Argumente werden meist die bereits genannten Methoden verwendet.
-j ACCEPT
-j DROP

5.2 Parameter anwenden

Ich werde Ihnen nun anhand verschiedener Beispiele den Einsatz der Parameter näher bringen. Ich denke mir aber, dass sie meist schon selbsterklärend sind.
# Ping aus dem lokalen Netz erlauben
iptables -A INPUT -p icmp --src 192.168.0.0/24 -j ACCEPT
Ich füge eine neue Regel an die Kette INPUT an (-A INPUT). Da ich keine Tabelle (KEIN -t...) angegeben habe wird die Tabelle filter benutzt. Die Regel lässt Pakete die das Protokoll icmp und aus dem lokalen Netz kommen (--src 192.168.0.0/24) zu (-j ACCEPT).

# Ping auf localhost verbieten

iptables -I INPUT 1 -p icmp --dst 127.0.0.1 -j DROP
Eine Regel wird an Position 1 der Kette INPUT eingefügt (-I INPUT 1). Diese Regel verwirft (-J DROP) Pakete die das Protokoll icmp (-p icmp) benutzen und als Ziel die Localhost-IP haben (--dst 127.0.0.1).

# Ping der über den externe Netzweradapter reinkommt verbieten

iptables -A INPUT -p icmp -i ppp0 -j DROP
Diese Regel verwirft Pakete (-j DROP) die aus dem Internet kommen (-i ppp0) und das Protokoll icmp benutzen.

# Fragmente im Logbuch vermerken
iptables -A INPUT -p icmp --fragment -j LOG
Diese Regel loggt Fragmente (-j LOG) die das Protokoll icmp benutzen. Anm.: das erste Paket dieser Fragmente wurde vermutlich schon von einer anderen Regel behandelt, das dieses den Paket-Header enthält.

# Masquerade: 'maskiert' alle Pakete die über ppp0 gesendet werden

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Pakete die als Ziel das Internet haben (-o ppp0) werden, nachdem geroutet wurde (-A POSTROUTING) mit einer anderen Adresse versehen ('Maskiert' -j MASQUERADE). Dies ist nur in der Tabelle nat möglich (-t nat)

# leitet alle Port 80 Anfragen auf Adapter eth0 an Port 3128 ('transparenter Proxy')

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport http -j REDIRECT --to-port 3128
Wenn jemand eine Anfrage auf eine Seite im Internet stellt (-p tcp --dport http) und diese Anfrage von dem internen Netzwerkadapter kommt (-i eth0) wird diese Anfrage vor dem Routing (-t nat -A PREROUTING) auf den Port 3128 umgeleitet (-j REDIRECT --to-port 3128). Dies wird häufig in Firmen benutzt um Anfragen auf einen lokalen Proxyserver (Port 3128) umzuleiten ohne dass dieser in den Eigenschaften des Browsers eingetragen wird. Details zu --dport finden Sie hier.

Diese Beispiele sollten sie alle so lesen können, wie ich es in der Beschreibung geschrieben habe. Wenn Sie noch Probleme haben, sollten Sie die Kapitel 3-5 wiederholen. Testen Sie auch selbst die einzelnen Befehle - am besten mit der Ping-Regel (Ablehnen, Regel ersetzen, Regeln einfügen, von einem speziellen Adapter usw. usw.)
Anm.:
wenn man noch nie mit iptables oder Paketfiltern zu tun hatte, ist der Einstieg schwierig. Nochmal als Tipp: drucken Sie sich das Bild unter 3.5 aus. Dadurch können Sie die Abläufe besser nachvollziehen.


VorInhalt