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.
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.
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:
-> matcht spi (Bereich).
-> matcht Länge des Headers.
-> 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:
-> 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
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:
-> matcht die id (Bereich) der Fragmentation.
-> matcht totale Länge des Headers.
-> prüft den Inhalt des resavierten Bereiches.
-> trifft für das erste Fragment zu.
-> trifft zu wenn keine weiteren Fragmente vorhanden sind.
-> trifft auf das letzte Fragment zu.
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:
-> Du kanns die für dich interessanten Header mit dieser Option spezifizieren. Akzeptierte Formate:
-> Du kannst den soft-Modus spezifizieren: In diesem Modus prüft der Match nur auf die Existens der Header, nicht den vollständigen Match!
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.
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:
-> 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.
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:
-> trifft auf den Typ zu.
-> prüft das Segments Left Feld (Bereich).
-> totale Länge des Headers.
-> prüft den Inhalt des reservierten Feldes.
-> Type=0 Adressen (Lise, max: 16).
-> Liste von Type=0 Adressen, keine strikte Liste.