Next Previous Contents

6. Neue IPv6 Netfilter Matches

In dieser Sektion werden wir versuchen die Benutzung der neuen Netfilter Matches für IPv6 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 Matches, dass du die Hilfe für ein bestimmtes Modul wie folgt abfragen kannst:

# iptables -m match_den_du_willst --help

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

6.1 agr Patch

Dieser Patch von Andras Kis-Szabo <kisza@sch.bme.hu> fügt einen neuen Match hinzu:

Aktueller Status: In der Schwebe (2.4.19)

Dies Patch kann für Leute die das EUI-64 IPv6 Adressierungschema verwenden sinvoll sein, wenn sie die Pakete auf Basis der Auslieferungsadresse im LAN filtern wollen.

Als Beispiel wollen wir Pakete mit eine korrekten EUI-64 Adresse umleiten:

# ip6tables -N ipv6ok
# ip6tables -A INPUT -m eui64 -j ipv6ok
# ip6tables -A INPUT -s ! 3FFE:2F00:A0::/64 -j ipv6ok
# ip6tables -A INPUT -j LOG
# ip6tables -A ipv6ok -j ACCEPT

# ip6tables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ipv6ok     all      anywhere             anywhere           eui64 
ipv6ok     all     !3ffe:2f00:a0::/64    anywhere           
LOG        all      anywhere             anywhere           LOG level warning 

Chain ipv6ok (2 references)
target     prot opt source               destination         
ACCEPT     all      anywhere             anywhere           

Dieser Match hat keine Optionen.

6.2 ahesp6 Patch

Dieser Patch von Andras Kis-Szabo <kisza@sch.bme.hu> fügt einen Match hinzu, der es dir erlaubt Pakete auf Basis des Inhalts der ah und esp Header zu filtern. Der Name des Matches:

Aktueller Status: Basic, funktioniert bei Fabrice MARIE (Author der original Version dieses Dokumentes)

Als Beispiel wollen wir alle AH Pakete verwerfen, die einen SPI Wert gleich 500 haben wobei der reservierte Bereich des Headers geprüft wird:

# ip6tables -A INPUT -m ah --ahspi 500 --ahres -j DROP

# ip6tables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all      anywhere             anywhere           ah spi:500 reserved

Unterstützte Optionen für den ah Match sind:

--ahspi [!] spi[:spi]

-> matcht spi (Bereich).

--ahlen [!] length

-> matcht Länge des Headers.

--ahres

-> prüft reservierten Bereich des Headers.

Der esp Match arbeitet genauso wie bei IPv4:

# ip6tables -A INPUT -m esp --espspi 500 -j DROP

# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all      anywhere             anywhere           esp spi:500 

Unterstützte Optionen für den esp Match sind:

--espspi [!] spi[:spi]

-> matcht spi (Bereich).

Bei IPv6 können diese Matche zusammen benutzt werden:

# ip6tables -A INPUT -m ah --ahspi 500 --ahres --ahlen ! 40 -m esp --espspi 500 -j DROP

# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all      anywhere             anywhere           ah spi:500 length:!40 reserved esp spi:500

6.3 frag6 Patch

Dieser Patch von Andras Kis-Szabo <kisza@sch.bme.hu> fügt einen Match hinzu, der es gestattet Pakete auf Basis des Inhaltes der Fragmentheader zu filtern.

Name des Matches:

Aktueller Status: Basic, funktioniert bei Fabrice MARIE (Author der orginal Version dieses Dokumentes)

Als Beispiel wollen wir alle Pakete verwerfen, die eine ID zwischen 100 and 200 haben und das erste Fragent sind:

# ip6tables -A INPUT -m frag --fragid 100:200 --fragfirst -j DROP

# ip6tables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all      anywhere             anywhere           frag ids:100:200 first

Unterstützte Optionen für den frag Match sind:

--fragid [!] id[:id]

-> matcht die id (Bereich) der Fragmentation.

--fraglen [!] length

-> matcht totale Länge des Headers.

--fragres

-> prüft den Inhalt des resavierten Bereiches.

--fragfirst

-> trifft für das erste Fragment zu.

--fragmore

-> trifft zu wenn keine weiteren Fragmente vorhanden sind.

--fraglast

-> trifft auf das letzte Fragment zu.

6.4 ipv6header Patch

Dieser Patch von Andras Kis-Szabo <kisza@sch.bme.hu> fügt einen Match hinzu der es dir gestattet Pakete auf Basis der erweiterten Header zu filtern.

Name des Match:

Aktueller Status: Basic, funktioniert bei Fabrice MARIE (Author der orginal Version dieses Dokumentes)

Als Beispiel wollen wir alle Pakete verwerfen die hop-by-hop, ipv6-route Header und einen Protokoll Zusatzt haben:

# ip6tables -A INPUT -m ipv6header --header hop-by-hop,ipv6-route,protocol -j DROP

# ip6tables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all      anywhere             anywhere           ipv6header flags:hop-by-hop,ipv6-route,protocol

Und nun laß uns Pakete verwerfen, die einen ipv6-route Erweiterungsheader haben:

# ip6tables -A INPUT -m ipv6header --header ipv6-route --soft -j DROP

# ip6ptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all      anywhere             anywhere           ipv6header flags:ipv6-route soft

Unterstützte Optionen für den ipv6header Match sind:

[!] --header headers

-> Du kanns die für dich interessanten Header mit dieser Option spezifizieren. Akzeptierte Formate:

--soft

-> Du kannst den soft-Modus spezifizieren: In diesem Modus prüft der Match nur auf die Existens der Header, nicht den vollständigen Match!

6.5 ipv6-ports Patch

Dieser Patch von Jan Rekorajski <baggins@pld.org.pl> fügt vier neue Matches hinzu:

Aktueller Status: im Kernel

Diese Matche sind Portierung der IPv4 Versionen. Für eine genauere Beschreibung siehe dir die Dokument dort an.

6.6 length Patch

Dieser Patch von Imran Patel <ipatel@crosswinds.net> erlaubt es Pakete auf ihrer Länge zu prüfen (Dieser Patch ist eine schamlose Adaption des IPv4 Match der von James Morris <jmorris@intercode.com.au> geschrieben wurde).

Als Beispiel wollen wir alle Ping's verbieten, die eine Paketlänge von mehr als 85 Bytes aufweisen:

# iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 86:65535 -j DROP

# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       icmp --  anywhere             anywhere           icmp echo-request length 86:65535

Unterstützte Optionen für den length Match sind:

[!] --length length[:length]

-> prüft auf entsprechende Länge(n). Die Werte bei einem Bereich sind inclusiv.

Wird bei einem Bereich ein Wert nicht angegeben, werden die implizierten Wert 0 (Minimum) und 65535 (Maximum) verwendet.

6.7 route6 Patch

Dieser Patch von Andras Kis-Szabo <kisza@sch.bme.hu> fügt einen Patch hinzu, der es gestattet Pakete auf Basis des Inhalts ihres Routingheaders zu filtern.

Name des Matches:

Aktueller Status: Basic, funktioniert bei Fabrice MARIE (Author der orginal Version dieses Dokumentes)

Als Beispiel wollen wir alle Pakete verwerfen die den Routing Typ 0 haben und nahe am letzten Hop sind (max. 2 Hops entfernt), der Routing Pfad enthält ::1 und ::2 (aber nicht exakt):

# ip6tables -A INPUT -m rt --rt-type 0 --rt-segsleft :2 --rt-0-addrs ::1,::2 --rt-0-not-strict -j DROP

# ip6tables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all      anywhere             anywhere           rt type:0 segslefts:0:2 0-addrs ::1,::2 0-not-strict

Unterstützte Optionen für den rt Match sind:

--rt-type [!] type

-> trifft auf den Typ zu.

--rt-segsleft [!] num[:num]

-> prüft das Segments Left Feld (Bereich).

--rt-len [!] length

-> totale Länge des Headers.

--rt-0-res

-> prüft den Inhalt des reservierten Feldes.

--rt-0-addrs ADDR[,ADDR...]

-> Type=0 Adressen (Lise, max: 16).

--rt-0-not-strict

-> Liste von Type=0 Adressen, keine strikte Liste.


Next Previous Contents