Dans cette section, on essayera d'expliquer l'utilisation de ces nouveaux match IPv6 de netfilter. Les patches IPv6 seront abordés par ordre alphabétique. Aussi, nous n'expliquerons pas les patches qui cassent les autres patches. Mais ça pourra venir ensuite.
De manière générale, pour les matches IPv6, vous pouvez voir le petit synopsis de chacun d'eux en tapant :
# ip6tables -m le_match_que_vous_voulez --help
Ça va afficher le texte d'aide normal d'ip6tables, et le petit synopsis spécifique à ``le_match_que_vous_voulez'' à la fin.
Ce patch par Andras Kis-Szabo <kisza@sch.bme.hu> ajoute un nouveau match :
Ce patch peut être très utile pour ceux qui utilisent le schéma d'adressage EUI-64 et qui veulent vérifier les adresses basées sur les adresses délivrées sur le LAN.
Par exemple, si vous voulez rediriger les paquets qui ont une adresse EUI-64 correcte, faites comme suit :
# 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
Ce patch ne prend aucune option.
Ce patch par Andras Kis-Szabo <kisza@sch.bme.hu> ajoute un nouveau module qui vous permet de matcher le contenu des en-têtes ah ou esp. Les matches sont :
Par exemple, on va DROPper tous les paquets AH qui ont un SPI égal a 500, et vérifier le contenu des champs réservés dans l'en-tête :
# 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
Les options supportées par le match ah sont :
-> Match le SPI indiqué (interval).
-> Taille de ce header.
-> Vérifie les contenu des champs réservés dans l'en-tête.
Le match esp marche exactement de la même manière qu'en 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
Les options supportées pour le match esp sont :
-> match spi (range)
En IPv6 ces matches peuvent être concaténés :
# 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
Ce patch by Andras Kis-Szabo <kisza@sch.bme.hu> ajoute un nouveau module 'frag' qui vous permet de matcher un paquet basé sur le contenu de son en-tête de fragmentation.
Par exemple, on va DROPper tous les paquets qui ont un ID entre 100 et 200, et qui sont le premier fragment d'un flot :
# 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
Les options supportées pour le match frag sont :
-> Match l'ID (interval) de la fragmentation.
-> Match la longueur totale de l'en-tête.
-> Vérifie le contenu des champs réservés.
-> C'est le premier fragment.
-> Il y a plus de fragments qui arrivent.
-> C'est le dernier fragment.
Ce patch par Andras Kis-Szabo <kisza@sch.bme.hu> ajoute un nouveau module qui permet de matcher un paquet par rapport à son extension d'en-tête.
Par exemple, nous allons DROPper les paquets qui ont une en-tête `hop-by-hop', `ipv6-route' et `protocol' :
# 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
Et maintenant, nous allons DROPper les paquets qui ont une en-tête `ipv6-route':
# 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
Les options supportées pour le match ipv6header sont :
-> Sépcifiez l'en-tête à matcher parmi :
-> soft-mode : le match véfiriera seulement l'existance de l'en-tête.
Ce patch par Jan Rekorajski <baggins@pld.org.pl> ajoute 4 nouveaux matches :
Ces matches sont un portage de leur équivalent IPv4. Voyez la documentation plus haut ou la page du manuel pour plus de détails!
Ce patch par Imran Patel <ipatel@crosswinds.net> ajoute un nouveau match qui vous permet de matcher un paquet basé sur sa taille (ce patch est une adaptation sans aucune honte du match length IPv4 écrit par James Morris <jmorris@intercode.com.au>)
Par exemple, si vous voulez DROPper tous les pings qui ont une taille de paquet plus grande que 85 octets :
# ip6tables -A INPUT -p ipv6-icmp --icmpv6-type echo-request -m length --length 85:0xffff -j DROP
# ip6tables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP ipv6-icmp -- anywhere anywhere ipv6-icmp echo-request length 85:65535
Les options supportées par le match length sont :
-> Match la taille du paquet
Tout comme son équivalent IPv4, les valeurs non présentes seront arbitrairement mises à leur valeur par défaut.
Ce patch par Andras Kis-Szabo <kisza@sch.bme.hu> ajoute un nouveau match `rt' qui vous permet de matches un paquet basé sur le contenu de son en-tête de routage.
Par exemple, nous allons DROPper tous les paquets qui ont un type de routage 0, qui sont proches du dernier hop (max 2 hops de distance), le chemin de routage contient ::1 et ::2 (mais pas strictement) :
# 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
Les options supportées par le match rt sont :
-> matche le type de routage.
-> Match le champs Segments Left (segments restants, interval).
-> longueur totale de l'en-tête.
-> Vérifie le contenu des champs réservés.
-> adresses Type=0 (liste, max: 16)
-> Liste d'adresses Type=0, une liste pas stricte.