Vamos ver o que suas regras estão tentando fazer primeiro, para ver por que elas podem não estar funcionando:
-A INPUT -i lo -j ACCEPT
Todo o tráfego que chega na interface de loopback será processado, incluindo o tráfego ICMPv6.
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
Bastante normal.
-A INPUT -p icmpv6 -m icmpv6 --icmpv6-type echo-request -j ACCEPT
Esta regra, conforme escrita, só permitirá solicitações de ping (para qualquer interface): quaisquer outros pacotes ICMPv6 serão negados pelo REJECT explícito no final.
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT --reject-with icmp6-port-unreachable
Bastante normal.
-A OUTPUT -p icmpv6 --icmpv6-type echo-request -d ::1/128 -j REJECT --reject-with icmp6-port-unreachable
-A OUTPUT -p icmpv6 --icmpv6-type echo-request -d fe80::/64 -j REJECT --reject-with icmp6-port-unreachable
Essas regras só impedirão que o seu host envie pings para os endereços de rede localhost e link-local (também, o intervalo de endereços de ligação local é de / 10 .
-A OUTPUT -j ACCEPT
Bastante normal.
No entanto, você disse: "Meus requisitos são para não permitir as solicitações de eco de entrada para o dispositivo de loopback e endereços IP locais (neste caso, link-local)". Suas regras, conforme escritas, são quase o oposto do que você queria para esse requisito. Além disso, normalmente é melhor colocar filtros de entrada no lado da entrada, já que é onde a maioria das pessoas procura itens como esse, e isso será eficaz para todo o tráfego, não apenas para o tráfego que seu computador está enviando.
Eu recomendaria escrever suas cadeias de regras da seguinte forma:
-A INPUT -i lo -p icmpv6 -m icmpv6 --icmpv6-type echo-request -j REJECT --reject-with icmp6-port-unreachable
-A INPUT -d fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type echo-request -j REJECT --reject-with icmp6-port-unreachable
-A INPUT -p icmpv6 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT --reject-with icmp6-port-unreachable
Algumas observações sobre as regras reescritas:
- Prefiro colocar as regras REJECT na frente das regras ACCEPT e filtros mais estreitos na frente de filtros mais amplos, para que eu não permita nada acidentalmente porque foi permitido por um filtro mais amplo. Não é uma regra dura e rápida, mas ajuda-me a visualizar o que está acontecendo um pouco mais fácil.
- A cadeia OUTPUT não é mais necessária porque as regras são tratadas na cadeia INPUT.
- Embora você tenha isso como um requisito, não sei por que deseja proibir pings para a interface de loopback, pois somente o computador local pode enviar para essa interface. Isso é apenas uma observação: se você tem uma necessidade particular de fazer isso, tudo bem.