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)!" |
Elenco ridotto
# ip6tables -L |
Elenco esteso
# ip6tables -n -v --line-numbers -L |
# ip6tables -n -v --line-numbers -L INPUT |
# ip6tables --table filter --append INPUT -j LOG --log-prefix "INPUT:" ¬ --log-level 7 |
# ip6tables --table filter --append INPUT -j DROP |
# ip6tables --table filter --delete INPUT 1 |
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 |
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 |
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 |
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 |
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.
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 |
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 |