In questo capitolo si cercherà di spiegare come utilizzare i nuovi match realizzati per netfilter. Le patch appariranno secondo l'ordine alfabetico, avverto inoltre che non saranno spiegate quelle patch che corrompono le altre patch, ciò probabilmente sarà aggiunto successivamente.
In genere, per quanto riguarda i match, si possono ottenere delle informazioni utili su un particolare modulo utilizzando:
# ip6tables -m match_che_vuoi_usare --help
Questo comando dovrebbe visualizzare il messaggio classico di aiuto di ip6tables e in aggiunta il messaggio di aiuto specifico per il match ``match_che_vuoi_usare''.
Questa patch sviluppata da Andras Kis-Szabo <kisza@sch.bme.hu> aggiunge 1 nuovo match:
Stato attuale: pendente (2.4.19)
Questa patch può risultare di grande aiuto per le persone che utilizzano una schema di indirizzamento EUI-64 IPv6 per controllare i pacchetti in una LAN in base all'indirizzo di consegna.
Ad esempio, per redirigere i pacchetti che hanno un indirizzo EUI-64 corretto si utilizzi:
# 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
Questo match non presenta opzioni.
Questa patch realizzata da Andras Kis-Szabo <kisza@sch.bme.hu> aggiunge un nuovo match che consente di selezionare un pacchetto in base al contenuto delle intestazioni ah ed esp. Nomi dei match:
Stato attuale: base, a me funziona
Ad esempio, in questo caso scarteremo tutti i pacchetti AH aventi SPI uguale a 500 e controlleremo il contenuto dei campi riservati dell'intestazione:
# 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
Le opzioni supportate dal match ah sono le seguenti:
-> spi utilizzato per la selezione (intervallo)
-> dimensione di questa intestazione
-> controlla il contenuto del campo reserved
Il match esp funziona esattamente come in 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
Le opzioni supportate dal match esp sono:
-> spi (intervallo)
In IPv6 questi match possono essere concatenati:
# 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
Questa patch di Andras Kis-Szabo <kisza@sch.bme.hu> aggiunge un nuovo match che consente di selezionare un pacchetto in base al contenuto dell'intestazione fragmentation. Nome del match:
Stato attuale: base, a me funziona
Ad esempio, scartiamo tutti i pacchetti aventi un ID compreso tra 100 e 200 e tali che siano il primo frammento:
# 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
Le opzioni supportate dal match frag sono:
-> seleziona in base all'id (o all'intervallo) della frammentazione.
-> seleziona in base alla dimensione totale dell'intestazione
-> verifica il contenuto del campo reserved
-> seleziona in base al primo frammento
-> più frammenti
-> ultimo frammento
Questa patch realizzata da Andras Kis-Szabo <kisza@sch.bme.hu> aggiunge un nuovo match che consente di selezionare un pacchetto in base alle intestazioni di estensione. Nome del match:
Stato attuale: iniziale, molto sperimentale
Ad esempio, per scartare i pacchetti che hanno intestazioni hop-by-hop, ipv6-route e un protocollo si utilizzi:
# 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
Per scartare i pacchetti aventi invece un'intestazione di estensione ipv6-route si utilizzi:
# 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
Le opzioni supportate dal match ipv6header sono le seguenti:
-> Con questa opzione si possono indicare le intestazioni a cui si è interessati. I formati accettati sono:
-> Utile per specificare la modalità soft: il match eseguirà solo il controllo dell'esistenza dell'intestazione.
Questa patch sviluppata da Jan Rekorajski <baggins@pld.org.pl> aggiunge 4 nuovi match:
Stato attuale: incluso nel kernel
Questi nuovi match sono un porting delle versioni realizzate per IPv4, si veda la documentazione principale per i dettagli.
Questa patch realizzata da Imran Patel <ipatel@crosswinds.net> aggiunge un nuovo match che consente di effettuare una selezione di un pacchetto in base alla sua dimensione (questa patch è uno spudorato adattamento del match realizzato per IPv4 da James Morris <jmorris@intercode.com.au>).
Ad esempio, per scartare tutti i ping aventi una dimensione maggiore di 85 byte si utilizzi:
# ip6tables -A INPUT -p ipv6-icmp --icmpv6-type echo-request -m length --length 85:0xffff -j DROP
# ip6ptables --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP ipv6-icmp -- anywhere anywhere ipv6-icmp echo-request length 85:65535
Le opzioni disponibili per questo match sono le seguenti:
-> Seleziona un pacchetto in base alla dimensione effettiva o all'intervallo di valori specificati (estremi inclusi).
I valori dell'intervallo non specificati sono sottointesi. Il valore minimo sottointeso è 0 mentre il valore massimo è 65535.
Questa patch realizzata da Andras Kis-Szabo <kisza@sch.bme.hu> aggiunge un nuovo match che consente di selezionare un pacchetto in base al contenuto della sua intestazione di routing.
Nome del match:
Stato attuale: base, a me funziona
Segue un esempio per scartare tutti i pacchetti con le seguenti caratteristiche: routing type 0, vicini all'ultimo hop (distante massimo 2 hop), routing path contenente ::1 e ::2 (ma non strettamente).
# 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
Le opzioni supportate dal match rt sono:
-> seleziona in base al tipo specificato
-> seleziona in base al campo Segments Left (intervallo)
-> dimensione totale di questa intestazione
-> controlla il contenuto del campo reserved.
-> indirizzi type=0 (lista, max: 16)
-> Lista indirizzi Type=0, lista non stretta.