16.3. Utilizzo

16.3.1. Verifica del supporto

Caricare il modulo, se così compilato

# modprobe ip6_tables 
   

Verifica della capacità

# [ ! -f /proc/net/ip6_tables_names ] && echo "Current kernel doesn't support
¬ 'ip6tables' firewalling (IPv6)!" 
   

16.3.2. Imparare ad usare ip6tables

16.3.2.1. Elencare di tutte le voci netfilter IPv6

  • Elenco ridotto

# ip6tables -L 
    

  • Elenco esteso

# ip6tables -n -v --line-numbers -L 
    

16.3.2.2. Elencare un filtro specifico

# ip6tables -n -v --line-numbers -L INPUT 
    

16.3.2.3. Inserire una regola di log con opzioni sul filtro di ingresso (input)

# ip6tables --table filter --append INPUT  -j LOG --log-prefix "INPUT:"
¬ --log-level 7 
    

16.3.2.4. Inserire una regola drop sul filtro di ingresso (input)

# ip6tables --table filter --append INPUT  -j DROP 
    

16.3.2.5. Cancellare una regola tramite il suo numero

# ip6tables --table filter --delete INPUT 1 
    

16.3.2.6. Permettere il traffico ICMPv6

Utilizzando vecchi kernel (kernel 2.4.5 non patchati e iptables-1.2.2) nessun tipo può essere specificato

  • Accettare i pacchetti ICMPv6 entranti attraverso i tunnel

# ip6tables -A INPUT -i sit+ -p icmpv6 -j ACCEPT 
    

  • Permettere l'uscita dei pacchetti ICMPv6 attraverso i tunnel

# ip6tables -A OUTPUT -o sit+ -p icmpv6 -j ACCEPT 
    

I kernel più recenti permettono di specificare i tipi dei pacchetti ICMPv6:

# ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
    

16.3.2.7. Limitare la frequenza di ricezione dei pacchetti

Poiché può accadere (come l'autore ha già avuto modo di vedere) che possano verificarsi tempeste di pacchetti ICMPv6, si dovrebbe sfruttare la possibilità di limitare la frequenza di ricezione (rate) almeno per i pacchetti ICMPv6. In aggiunta anche la frequenza del logging dovrebbe essere limitata per prevenire attacchi DoS verso il syslog e la partizione di memorizzazione del file di log. Un esempio di limitazione del rate ICMPv6 è:

# ip6tables -A INPUT --protocol icmpv6 --icmpv6-type echo-request -j ACCEPT --match limit --limit 30/minute
    

16.3.2.8. Permettere SSH in ingresso

Qui viene mostrato un esempio per un insieme di regole che permette connessioni SSH in ingresso, da uno specifico indirizzo IPv6

  • Permettere SSH entrante da 3ffe:ffff:100::1/128

# ip6tables -A INPUT -i sit+ -p tcp -s 3ffe:ffff:100::1/128 --sport 512:65535
¬ --dport 22 -j ACCEPT 
    

  • Permettere pacchetti di risposta (al momento il tracking della connessione in IPv6 non fa parte dell'implementazione principale di netfilter6)

# ip6tables -A OUTPUT -o sit+ -p tcp -d 3ffe:ffff:100::1/128 --dport 512:65535
¬ --sport 22 ! --syn j ACCEPT 
    

16.3.2.9. Abilitare il traffico tunnel IPv6-in-IPv4

Per accettare pacchetti tunnel IPv6-in-IPv4, si devono inserire delle regole relative a questi pacchetti nel proprio firewall IPv4, per esempio

  • Accettare il traffico entrante IPv6-in-IPv4 sull'interfaccia ppp0

# iptables -A INPUT -i ppp0 -p ipv6 -j ACCEPT 
    

  • Permettere l'uscita del traffico IPv6-in-IPv4 sull'interfaccia ppp0

# iptables -A OUTPUT -o ppp0 -p ipv6 -j ACCEPT 
    

Se si ha solo un tunnel statico, si può specificare anche l'indirizzo IPv4

  • Accettare il traffico entrante IPv6-in-IPv4 sull'interfaccia ppp0 che arriva dall'estremo del tunnel 1.2.3.4

# iptables -A INPUT -i ppp0 -p ipv6 -s 1.2.3.4 -j ACCEPT 
    

  • Permettere l'uscita del traffico IPv6-in-IPv4 sull'interfaccia ppp0 verso l'estremo del tunnel 1.2.3.4

# iptables -A OUTPUT -o ppp0 -p ipv6 -d 1.2.3.4 -j ACCEPT 
    

16.3.2.10. Protezione dalle richieste di connessione TCP entranti

MOLTO RACCOMANDATO! Per ragioni di sicurezza si dovrebbe assolutamente inserire una regola che blocchi le richieste di connessione TCP entranti. Si adatti l'opzione "-i" se sono in uso altri nomi di interfaccia!

  • Bloccare le richieste di connessione TCP entranti a questo host

# ip6tables -I INPUT -i sit+ -p tcp --syn -j DROP 
    

  • Bloccare le richieste di connessione TCP entranti agli host dietro a questo router

# ip6tables -I FORWARD -i sit+ -p tcp --syn -j DROP 
    

Può darsi che queste regole vadano posizionate successivamente ad altre, ma è comunque una cosa alla quale bisogna pensare. Il miglior sistema è creare uno script ed eseguire le regole secondo un ordine stabilito.

16.3.2.11. Protezione dalle richieste UDP entranti

ANCHE QUESTO RACCOMANDATO! Come menzionato nelle informazioni sul firewall, è possibile controllare le porte sulle sessioni UDP/TCP uscenti. In questo modo, se tutti i propri sistemi locali IPv6 usano porte locali, cioè da 32768 a 60999, c'è anche la possibilità di filtrare le connessioni UDP (finché il tracking non sarà funzionante) con:

  • Bloccare i pacchetti UDP entranti che non sono risposte a richieste inviate da questo host

# ip6tables -I INPUT -i sit+ -p udp ! --dport 32768:60999 -j DROP 
    

  • Bloccare i pacchetti UDP entranti che non sono risposte a richieste inoltrate dagli host dietro a questo router

# ip6tables -I FORWARD -i sit+ -p udp ! --dport 32768:60999 -j DROP 
    

16.3.3. Esempio dimostrativo

Le seguenti righe mostrano una configurazione più sofisticata come esempio. Buona creazione di regole netfilter6....

# ip6tables -n -v -L 
Chain INPUT (policy DROP 0 packets, 0 bytes) 
 pkts bytes target     prot opt in     out     source               destination
    0     0 extIN      all      sit+   *       ::/0                 ::/0 
    4   384 intIN      all      eth0   *       ::/0                 ::/0 
    0     0 ACCEPT     all      *      *       ::1/128              ::1/128 
    0     0 ACCEPT     all      lo     *       ::/0                 ::/0 
    0     0 LOG        all      *      *       ::/0                 ::/0       
¬        LOG flags 0 level 7 prefix `INPUT-default:' 
    0     0 DROP       all      *      *       ::/0                 ::/0 
 
Chain FORWARD (policy DROP 0 packets, 0 bytes) 
 pkts bytes target     prot opt in     out     source               destination
¬ 
    0     0 int2ext    all      eth0   sit+    ::/0                 ::/0 
    0     0 ext2int    all      sit+   eth0    ::/0                 ::/0 
    0     0 LOG        all      *      *       ::/0                 ::/0       
¬        LOG flags 0 level 7 prefix `FORWARD-default:' 
    0     0 DROP       all      *      *       ::/0                 ::/0 
 
Chain OUTPUT (policy DROP 0 packets, 0 bytes) 
 pkts bytes target     prot opt in     out     source               destination
¬ 
    0     0 extOUT     all      *      sit+    ::/0                 ::/0 
    4   384 intOUT     all      *      eth0    ::/0                 ::/0 
    0     0 ACCEPT     all      *      *       ::1/128              ::1/128 
    0     0 ACCEPT     all      *      lo      ::/0                 ::/0 
    0     0 LOG        all      *      *       ::/0                 ::/0       
¬        LOG flags 0 level 7 prefix `OUTPUT-default:' 
    0     0 DROP       all      *      *       ::/0                 ::/0 
 
Chain ext2int (1 references) 
 pkts bytes target     prot opt in     out     source               destination
¬ 
    0     0 ACCEPT     icmpv6    *      *       ::/0                 ::/0 
    0     0 ACCEPT     tcp      *      *       ::/0                 ::/0       
¬        tcp spts:1:65535 dpts:1024:65535 flags:!0x16/0x02 
    0     0 LOG        all      *      *       ::/0                 ::/0       
¬        LOG flags 0 level 7 prefix `ext2int-default:' 
    0     0 DROP       tcp      *      *       ::/0                 ::/0 
    0     0 DROP       udp      *      *       ::/0                 ::/0 
    0     0 DROP       all      *      *       ::/0                 ::/0 
 
Chain extIN (1 references) 
 pkts bytes target     prot opt in     out     source               destination
¬ 
    0     0 ACCEPT     tcp      *      *       3ffe:400:100::1/128  ::/0       
¬        tcp spts:512:65535 dpt:22 
    0     0 ACCEPT     tcp      *      *       3ffe:400:100::2/128  ::/0       
¬        tcp spts:512:65535 dpt:22 
    0     0 ACCEPT     icmpv6    *      *       ::/0                 ::/0 
    0     0 ACCEPT     tcp      *      *       ::/0                 ::/0       
¬        tcp spts:1:65535 dpts:1024:65535 flags:!0x16/0x02 
    0     0 ACCEPT     udp      *      *       ::/0                 ::/0       
¬        udp spts:1:65535 dpts:1024:65535 
    0     0 LOG        all      *      *       ::/0                 ::/0       
¬        limit: avg 5/min burst 5 LOG flags 0 level 7 prefix `extIN-default:' 
    0     0 DROP       all      *      *       ::/0                 ::/0 
 
Chain extOUT (1 references) 
 pkts bytes target     prot opt in     out     source               destination
¬ 
    0     0 ACCEPT     tcp      *      *       ::/0                
¬ 3ffe:ffff:100::1/128tcp spt:22 dpts:512:65535 flags:!0x16/0x02 
    0     0 ACCEPT     tcp      *      *       ::/0                
¬ 3ffe:ffff:100::2/128tcp spt:22 dpts:512:65535 flags:!0x16/0x02 
    0     0 ACCEPT     icmpv6    *      *       ::/0                 ::/0 
    0     0 ACCEPT     tcp      *      *       ::/0                 ::/0       
¬        tcp spts:1024:65535 dpts:1:65535 
    0     0 ACCEPT     udp      *      *       ::/0                 ::/0       
¬        udp spts:1024:65535 dpts:1:65535 
    0     0 LOG        all      *      *       ::/0                 ::/0       
¬        LOG flags 0 level 7 prefix `extOUT-default:' 
    0     0 DROP       all      *      *       ::/0                 ::/0 
 
Chain int2ext (1 references) 
 pkts bytes target     prot opt in     out     source               destination
¬ 
    0     0 ACCEPT     icmpv6    *      *       ::/0                 ::/0 
    0     0 ACCEPT     tcp      *      *       ::/0                 ::/0       
¬        tcp spts:1024:65535 dpts:1:65535 
    0     0 LOG        all      *      *       ::/0                 ::/0       
¬        LOG flags 0 level 7 prefix `int2ext:' 
    0     0 DROP       all      *      *       ::/0                 ::/0 
    0     0 LOG        all      *      *       ::/0                 ::/0       
¬        LOG flags 0 level 7 prefix `int2ext-default:' 
    0     0 DROP       tcp      *      *       ::/0                 ::/0 
    0     0 DROP       udp      *      *       ::/0                 ::/0 
    0     0 DROP       all      *      *       ::/0                 ::/0 
 
Chain intIN (1 references) 
 pkts bytes target     prot opt in     out     source               destination
¬ 
    0     0 ACCEPT     all      *      *       ::/0                
¬ fe80::/ffc0:: 
    4   384 ACCEPT     all      *      *       ::/0                 ff02::/16 
 
Chain intOUT (1 references) 
 pkts bytes target     prot opt in     out     source               destination
¬ 
    0     0 ACCEPT     all      *      *       ::/0                
¬ fe80::/ffc0:: 
    4   384 ACCEPT     all      *      *       ::/0                 ff02::/16 
    0     0 LOG        all      *      *       ::/0                 ::/0       
¬        LOG flags 0 level 7 prefix `intOUT-default:' 
    0     0 DROP       all      *      *       ::/0                 ::/0