Regra aceitando entrada HTTP em ip6tables insuficientes para permitir solicitações IPv6

2

Estou enfrentando um problema de acessibilidade IPv6 com o meu servidor.

  • O servidor é compatível com IPv6 e é capaz de entrar em contato / ser contatado por terceiros no IPv6 ( ping6 e traceroute6 testado no meu Wheezy estável do Debian, atualizado)
  • A entrada do DNS IPv6 AAAA para o site já existe e está funcionando corretamente
  • O servidor da web (nginx) está escutando no link IPv6 e está pronto para manipular as solicitações da mesma forma que é para o IPv4
  • A tabela

    ip6tables INPUT está configurada para permitir solicitações HTTP como o iptables (regra padrão DROP + regra TCP 80 ACCEPT ):

    Chain INPUT (policy DROP 648 packets, 46788 bytes)
    pkts bytes target     prot opt in     out     source               destination
    6   480 ACCEPT     tcp      *      *       ::/0                 ::/0                 tcp dpt:80
    

Eu reduzi o problema ao fato de que se eu definir a política padrão como ACCEPT , a conexão HTTP funciona , caso contrário, não .

Assim, parece que alguns outros redirecionamentos de porta podem ser necessários? oO

Isso poderia estar relacionado a alguma configuração do kernel da pilha de roteamento / IPv6?

Aqui está a saída de sudo ip6tables --line-numbers -nvL :

Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     8169  784K ACCEPT     all      *      *       ::/0                 ::/0                 state RELATED,ESTABLISHED
2        0     0 ACCEPT     tcp      *      *       ::/0                 ::/0                 tcp dpt:22
3        0     0 ACCEPT     tcp      *      *       ::/0                 ::/0                 tcp dpt:80
4        0     0 ACCEPT     tcp      *      *       ::/0                 ::/0                 tcp dpt:443

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
    
por Bernard Rosset 22.07.2014 / 00:13

1 resposta

4

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
    
por 29.07.2014 / 22:53

Tags