Page suivante Page précédente Table des matières

6. Les nouveaux match IPv6 pour netfilter

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.

6.1 Le patch agr

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.

6.2 Le patch ahesp6

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 :

--ahspi [!] spi[:spi]

-> Match le SPI indiqué (interval).

--ahlen [!] length

-> Taille de ce header.

--ahres

-> 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 :

--espspi [!] spi[:spi]

-> 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

6.3 Le patch frag6

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 :

--fragid [!] id[:id]

-> Match l'ID (interval) de la fragmentation.

--fraglen [!] length

-> Match la longueur totale de l'en-tête.

--fragres

-> Vérifie le contenu des champs réservés.

--fragfirst

-> C'est le premier fragment.

--fragmore

-> Il y a plus de fragments qui arrivent.

--fraglast

-> C'est le dernier fragment.

6.4 Le patch ipv6header

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 :

[!] --header headers

-> Sépcifiez l'en-tête à matcher parmi :

--soft

-> soft-mode : le match véfiriera seulement l'existance de l'en-tête.

6.5 Le patch ipv6-ports

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!

6.6 Le patch length

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 :

[!] --length length[:length]

-> Match la taille du paquet

Tout comme son équivalent IPv4, les valeurs non présentes seront arbitrairement mises à leur valeur par défaut.

6.7 Le patch route6

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 :

--rt-type [!] type

-> matche le type de routage.

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

-> Match le champs Segments Left (segments restants, interval).

--rt-len [!] length

-> longueur totale de l'en-tête.

--rt-0-res

-> Vérifie le contenu des champs réservés.

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

-> adresses Type=0 (liste, max: 16)

--rt-0-not-strict

-> Liste d'adresses Type=0, une liste pas stricte.


Page suivante Page précédente Table des matières