Ajuda com regras IPv6 e ip6tables

0

Neste momento, estou tentando descobrir como configurar algumas regras do IPv6 em um servidor meu. Meus requisitos são de não permitir a entrada de solicitações de eco para o dispositivo de loopback e endereços IP locais (neste caso, link-local), bem como abrir as portas 22, 80 e 443. Tudo funciona muito bem para IPv4, mas estou tendo um problema com ip6tables após a ordem da corrente para INPUT parece. Aqui está o que eu tenho agora:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -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 -p icmpv6 -m icmpv6 --icmpv6-type echo-request -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
-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
-A OUTPUT -j ACCEPT
COMMIT

Atualmente, minha linha de culpados é -A INPUT -j REJECT . Minhas expectativas são de que fará uma negação implícita de tudo o que não está listado acima na cadeia. Este não parece ser o caso, e parece se comportar de maneira diferente do iptables simples com regras IPv4. Alguém pode me esclarecer sobre a solução aqui? Este é um servidor Ubuntu 14.04

    
por stratacast1 04.01.2018 / 23:43

1 resposta

3

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:

  1. 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.
  2. A cadeia OUTPUT não é mais necessária porque as regras são tratadas na cadeia INPUT.
  3. 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.
por 05.01.2018 / 09:59