Gente, você deve não ignorar o ICMPv6 como fez para o IP-ICMPv6 legado e particularmente o Protocolo de Descoberta do Vizinho (NDP) é vital para o funcionamento correto do IPv6. (O NDP, entre outras coisas, é um substituto para o ARP.)
Isso significa que você deve permitir pelo menos os tipos ICMPv6 133-136 do link local (por exemplo, fe80::/10
). Além disso, você deve permitir que certas mensagens de erro cheguem, pois, por exemplo, os roteadores não fragmentam mais. Você também não deseja descartar mensagens multicast locais de link.
A história completa é contada na RFC 4890.
Abaixo está um trecho de uma das minhas máquinas, um host vm que age como um roteador:
#! /bin/sh
drop () {
/sbin/ip6tables --jump DROP --append "$@";
}
accept () {
/sbin/ip6tables --jump ACCEPT --append "$@";
}
chain () {
/sbin/ip6tables --new-chain "$@"
}
ICMP_RATELIMIT="--match limit --limit 2/s"
# ...
# Validate ingoing ICMPv6 messages
#
chain ICMPv6_IN
# error messages
# allow error messages that are related to previously seen traffic
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type destination-unreachable --match conntrack --ctstate ESTABLISHED,RELATED $ICMP_RATELIMIT
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type packet-too-big --match conntrack --ctstate ESTABLISHED,RELATED $ICMP_RATELIMIT
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type ttl-exceeded --match conntrack --ctstate ESTABLISHED,RELATED $ICMP_RATELIMIT
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type parameter-problem --match conntrack --ctstate ESTABLISHED,RELATED $ICMP_RATELIMIT
# accept neighbor discovery
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type neighbor-solicitation $ICMP_RATELIMIT
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type neighbor-advertisement $ICMP_RATELIMIT
# accept router discovery
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type router-solicitation '!' --src ff00::/8 --in-interface cafe0 $ICMP_RATELIMIT
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type router-advertisement --src fe80::/10 --in-interface wlp3s0 $ICMP_RATELIMIT
# ping
# accept replies to my ping requests
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type echo-reply --match conntrack --ctstate ESTABLISHED,RELATED
# allow ping from my network(s)
accept ICMPv6_IN --src $COUNTERMODE --protocol icmpv6 --icmpv6-type echo-request $ICMP_RATELIMIT
# allow link-local unicast ping
accept ICMPv6_IN --dst fe80::/10 --protocol icmpv6 --icmpv6-type echo-request $ICMP_RATELIMIT
## allow multicast ping from local link
#accept ICMPv6_IN --dst ff00::/8 --src fe80::/10 --protocol icmpv6 --icmpv6-type echo-request $ICMP_RATELIMIT
# multicast listener discovery v1
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type 130 --in-interface cafe0
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type 131 --in-interface cafe0
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type 132 --in-interface cafe0
# multicast listener discovery v2
accept ICMPv6_IN --protocol icmpv6 --icmpv6-type 143 --in-interface cafe0
# drop everything else
drop ICMPv6_IN