Next Previous Contents

4. Neue Netfilter Targets (Ziele)

In diesem Abschnit werden wir versuchen die Benutzung der neuen Netfilter Targets zu erklären. Die Patche werden in alphabetischer Reihenfolge besprochen. Wir werden hier nicht auf Patche eingehen, die andere Patche negativ beeinflussen; das kommt später mal.

Generell gilt für Targets, dass du die Hilfe für ein bestimmtes Modul wie folgt abfragen kannst:

# iptables -j TARGET_DAS_DU_WILLST --help

Dies wird dir die normale Hilf von iptables ausgeben zuzüglich der speziellen Hilfe zu ``TARGET_DAS_DU_WILLST'' am Ende.

4.1 ftos Patch

Dieser Patch von Matthew G. Marsh <mgm@paktronix.com> fügt ein neues Target hinzu, welches dir gestattet den TOS eines Paketes auf einen beliebigen Wert zu setzen.

Wenn du zum Beispiel möchtest dass der TOS für alle ausgehenden Pakete den Wert 15 hat, benutzt du folgende Regel:

# iptables -t mangle -A OUTPUT -j FTOS --set-ftos 15

# iptables -t mangle --list
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
FTOS       all  --  anywhere             anywhere           TOS set 0x0f 

Unterstützte Optionen für das FTOS Target sind:

--set-ftos value

-> Setzt das TOS Feld im Paketheader auf den gegebenen Wert. Der Wert kann dezimal (z.B. 32) oder hexadezimal (z.B. 0x20) angegeben werden.

4.2 IPV4OPTSSTRIP Patch

Dieser Patch von Fabrice MARIE <fabrice@netfilter.org> fügt ein neues Target hinzu, welches dir gestattet alle IP Optionen von einem IPv4 Paket zu entfernen.

Es wird einfache auf die folgende Art aktiviert:

# iptables -t mangle -A PREROUTING -j IPV4OPTSSTRIP

# iptables -t mangle --list
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
IPV4OPTSSTRIP  all  --  anywhere             anywhere

Dieses Target hat keine Optionen.

4.3 NETLINK Patch

Dieser Patch von Gianni Tedesco <gianni@ecsc.co.uk> fügt ein neues Target hinzu, welches dir gestattet verworfene Pakete an den Userspace über den Netlink Socket zu senden.

Wenn du zum Beispiel alle Pings verwerfen und sie and den Userspace Netlik Socket weiterleiten möchtest, kannst du das wie folgt erreichen:

# iptables -A INPUT -p icmp --icmp-type echo-request -j NETLINK --nldrop

# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
NETLINK    icmp --  anywhere             anywhere           icmp echo-request nldrop 

Unterstützte Optionen für das NETLINK Target sind:

--nldrop

-> Weiterreichen und verwerfen.

--nlmark <number>

-> Mark setzen.

--nlsize <bytes>

-> Paketgröße limitieren.

Für weitere Informationen über Netlink Sockets, kannst du dir die Netlink Sockets Tour ansehen.

4.4 NETMAP Patch

Dieser Patch von Svenning Soerensen <svenning@post5.tele.dk> fügt ein neues Target hinzu, welches dir gestattet ein statisches 1:1 Mapping für Netzwerk Adressen vorzunehmen, wobei die Host Adressen erhalten bleiben.

Wenn du zum Beispiel möchtest das alle einkommenden Pakete von 1.2.3.0/24 nach 5.6.7.0/24 gemappt werden, kannst du das wie folgt erreichen:

# iptables -t nat -A PREROUTING -d 1.2.3.0/24 -j NETMAP --to 5.6.7.0/24

# iptables -t nat --list
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
NETMAP     all  --  anywhere             1.2.3.0/24         5.6.7.0/24

Unterstützte Optionen für das NETMAP Target sind:

--to address[/mask]

-> Netwerk Address auf die gemappt werden soll.

4.5 SAME Patch

Dieser Patch von Martin Josefsson <gandalf@wlug.westbo.se> fügt ein neues Target hinzu, welches ähnlich dem SNAT ist, jedoch dem Client für jede Verbindung die gleiche Adresse zuweist.

Wenn du zum Beispiel Quelladressen auf den Bereich 1.2.3.4-1.2.3.7 abbilden willst, kannst du folgende Regel verwenden:

# iptables -t nat -A POSTROUTING -j SAME --to 1.2.3.4-1.2.3.7

# iptables -t nat --list
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SAME       all  --  anywhere             anywhere           same:1.2.3.4-1.2.3.7 

Optionen die vom SAME Target unterstützt werden sind:

--to <ipaddr>-<ipaddr>

-> Adressen auf die die Quelladressen gemappt werden. Kann auch mehrfach für mehrere Ranges spifiziert werden.

--nodst

-> Die Ziel IP nicht für die Quellauswahl verwenden.

4.6 tcp-MSS Patch

Dieser Patch von Marc Boucher <marc+nf@mbsi.ca> fügt ein neues Target hinzu, welches dir gestattet den MSS Wert von TCP SYN Paketen zu untersuchen und zu ändern um die maximale Paketgröße für die Verbindung festzulegen.

Wie Marc selbs sagt: DIES IST EIN HACK, der benutzt wird um shon kiminell gehirntote ISPs oder Server die ICMP Fragmentation blocken zu überwinden.

Die typische Anwendung ist wie folgt:

# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# iptables --list
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
TCPMSS     tcp  --  anywhere             anywhere           tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU 

Optionen die vom tcp-MSS Target unterstützt werden (schließen sich gegenseitig aus):

--set-mss value

explizites setzen der MSS Option auf ``value''.

--clamp-mss-to-pmtu

automatisches Anpassen des MSS Wertes (Pfad_MTU - 40).

4.7 TTL Patch

Dieser Patch von Harald Welte <laforge@gnumonks.org> fügt ein Target hinzu, mit dem der Benutzer die TTL eines Paketes setzen oder erhöhen/vermindern kann.

Wenn du zum Beispiel möchtest das alle ausgehenden Verbindungen eine TTL von 126 erhalten, kannst du wie folgt vorgehen:

# iptables -t mangle -A OUTPUT -j TTL --ttl-set 126

# iptables -t mangle --list
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
TTL        all  --  anywhere             anywhere           TTL set to 126 

Unterstützte Optionen für das TTL Target sind:

--ttl-set value

-> Setze TTL auf <value>.

--ttl-dec value

-> Vermindert die TTL um <value>.

--ttl-inc value

-> Erhöhe die TTL um <value>.

4.8 ulog Patch

Dieser Patch von Harald Welte <laforge@gnumonks.org> fügt ein neues Target hinzu, welches einen erweiterten Loggingmechanismus als das standard LOG Target zur Verfügung stellt. Das `libipulog/' Verzeichnis enthält eine Library um ULOG Meldungen zu empfangen.

Harald betreibt eine Website auf der die Dokumentation von ULOG bereit stellt. Es besteht also keinen Grund hier weiter darauf einzugehen..

4.9 ROUTE Patch

Dieser Patch von Cédric de Launois <delaunois@info.ucl.ac.be> für ein Target hinzu, das es dir gestattet Pakete direkt and ein bestimmtes Interface weiterzuleitet auch und gerade dann, wenn die IP Adresse des Paketes eine IP Adresse des Router selbst ist. Da der Kernel solche Pakete lokal ausliefern würde, können solche Pakete nicht mit dem stadard Routing zu anderen Computern weitergeleitet werden. Manchmal ist es sinnvoll genau dies zu tun ohne die Pakete zu verändern.

Optionen die vom ROUTE Target unterstützt werden sind:

--iface name

Sende das Paket direkt zu dem über den Namen dem spezifizerten Interface.

--ifindex index

Sende das Paket direkt zu dem über den Index spezifizierten Interface. Das ist sinnvoll, wenn du eine Regel entfernen möchtest die an ein Interface gebunden ist, welches nicht mehr existiert (z.B. ein Tunnel der abgebaut wurde).

Als Beispiel lass uns annehmen du möchtest einen Service auf einem Server in deinem internen Netz installieren; sagen wir ssh. Du möchtest aber auch, das der Service nach aussen so aussieht als wenn er auf denem Router laufen würde, was natürlich einschließt, dass keine Pakete verändert werden. Diese Situation verbietet das Verwenden des standard Mechnismus der Portweiterleitung.

Die Lösung besteht dank dieses ROUTE Targets und einem IPIP Tunnep einfach darin, die Pakete mit Zielport 22 neu an den Rechner zu routen, der die gleiche IP Adresse hat wie dein Router und den ssh Servive betreibt.

Zeit für ein ASCII Bild:

              eth0  +------+ 192.168.0.1        192.168.0.2 +----+
    ----------------|router|--------------------------------|host|
    IP: 150.150.0.1 +------+                                +----+
                       | | tunl1              IP: 150.150.0.1 | |
                       | +------------------------------------+ |
                       +----------------------------------------+
                                      IPIP tunnel

Es ist nicht möglich solche Pakete mit dem standard Routing umzuleiten, einfach weil der Kernel davon ausgeht, dass diese Pakete lokal ausgeliefert werden müssen (sie haben die gleiche IP Address wie der Router selbst).

Das ROUTE Target stellt einen Weg zur Verfügung um das zu machen. Für das obige Beispiel würden wir folgende Regeln verwenden:

# iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 22 -j ROUTE --iface tunl1
# iptables -A PREROUTING -t nat -i tunl1 --j ROUTE --iface eth0

# iptables -L PREROUTING -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
ROUTE      tcp  --  anywhere             anywhere           tcp dpt:ssh ROUTE iface tunl1(7) 
ROUTE      all  --  anywhere             anywhere           ROUTE iface eth0(3) 

Die erste Regel routet Pakete aus dem Internet um und die zweite routet alle Pakete vom Host um. Die Werte in den Klammern hinter den Interfacenamen sind die Interfaceindexe. Es wird die nat Tabelle benutzt, da diese den PREROUTING Hook zur Verfügung stellt. Das heißt aber nicht, dass hier Pakete verändert werden.


Next Previous Contents