Por que essas regras do ip6tables estão bloqueando o ssh sobre o IPv6 quando a versão do iptables permite que ele seja feito através do IPv4?

1

Tenho as seguintes regras iptables , que permitem todo o tráfego em lo , eth1 e eth2 e permitir tráfego de saída em eth0 , mas bloqueiam o tráfego de entrada em eth0 , exceto para Portas 22, 80, 443, 1194, 5222 e 5269. As regras permitem acesso ssh com sucesso através da porta 22 sobre o IPv4.

# Generated by iptables-save v1.4.12 on Sat Nov 16 13:03:07 2013
*raw
:PREROUTING ACCEPT [247:18556]
:OUTPUT ACCEPT [278:35544]
COMMIT
# Completed on Sat Nov 16 13:03:07 2013
# Generated by iptables-save v1.4.12 on Sat Nov 16 13:03:07 2013
*mangle
:PREROUTING ACCEPT [247:18556]
:INPUT ACCEPT [247:18556]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [278:35544]
:POSTROUTING ACCEPT [278:35544]
COMMIT
# Completed on Sat Nov 16 13:03:07 2013
# Generated by iptables-save v1.4.12 on Sat Nov 16 13:03:07 2013
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [1:164]
:POSTROUTING ACCEPT [1:164]
COMMIT
# Completed on Sat Nov 16 13:03:07 2013
# Generated by iptables-save v1.4.12 on Sat Nov 16 13:03:07 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state INVALID -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p icmp -m limit --limit 1/sec -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1194 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5222 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5269 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -m pkttype --pkt-type broadcast -j DROP
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
-A OUTPUT -o eth2 -j ACCEPT
-A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Sat Nov 16 13:03:07 2013

copiei-os para ip6tables e adicionei um grupo de regras ipv6-icmp para permitir a configuração dinâmica do endereço IPv6.

# Generated by ip6tables-save v1.4.12 on Sat Nov 16 13:03:12 2013
*raw
:PREROUTING ACCEPT [60:5920]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Sat Nov 16 13:03:12 2013
# Generated by ip6tables-save v1.4.12 on Sat Nov 16 13:03:12 2013
*mangle
:PREROUTING ACCEPT [60:5920]
:INPUT ACCEPT [4:320]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sat Nov 16 13:03:12 2013
# Generated by ip6tables-save v1.4.12 on Sat Nov 16 13:03:12 2013
*filter
:INPUT DROP [4:320]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1194 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5222 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5269 -m state --state NEW,ESTABLISHED -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 1 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 2 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 3 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 4 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 133 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 134 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 135 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 136 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 137 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 141 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 142 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 130 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 131 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 132 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 143 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 148 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 149 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 151 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 152 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 153 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
-A OUTPUT -o eth2 -j ACCEPT
-A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Sat Nov 16 13:03:12 2013

A linha da porta TCP 22 é a mesma. No entanto, essas regras bloqueiam o ssh no IPv6.

Por quê? O que preciso fazer de maneira diferente para permitir as mesmas portas TCP no IPv6 do que no IPv4?

pergunta antiga sugere que ainda estou perdendo alguma coisa vital doipv6-icmp, mas não está claro para mim o que, já que a resposta usa uma sintaxe diferente.

    
por hsivonen 13.08.2016 / 13:27

1 resposta

1

As regras do ipv6 w.r.t. ssh parece bem para mim. Eu suspeito que possa haver uma falha na configuração completa, possivelmente relacionada à interface da qual você tentou acessar sua máquina.

Suas regras não implementam a política que você descreveu.

[...] iptables rules, which are intended to allow all traffic on lo, eth1 and eth2

Suas regras INPUT não implementam essas permissões para as interfaces eth1 e eth2 . Qualquer porta exceto 22, 80, 443, 1194, 5222 e 5269 é não alcançável por meio de eth1 e eth2 .

[...] but block incoming traffic on eth0 except to ports 22, 80, 443, 1194, 5222 and 5269.

Tente restringir as permissões de porta em INPUT para apenas eth0 para testar se sua configuração funciona conforme o esperado. Você pode querer usar -m multiport --dports 22,80,443,1194,5222,5269 para tornar as regras mais legíveis. Em INPUT você já aceita ESTABLISHED tráfego. Portanto, ao escrever regras para portas individuais, é suficiente corresponder aos pacotes --state NEW (sem ESTABLISHED ).

[...] and to allow outgoing traffic on eth0

Isso também não está implementado no conjunto de regras. Pode funcionar acidentalmente porque a regra -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT aceita quase todos os pacotes.

Outras etapas gerais de depuração:

  • verifique se você carregou seu script IPv6 com ip6tables . Devido ao seu uso de -6 , você também pode carregá-lo com iptables , que ignora todas as regras que começam com -6
  • Não se bloqueie quando fizer alterações. No momento, você provavelmente só tem acesso acidental a ssh de eth0 devido à regra -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT .
  • Verifique iptables -L -v -n e observe os contadores de regras para ver quais regras se aplicam. Se necessário, adicione regras sem uma ação ou LOG regras para obter mais contadores / informações.
  • Tente aceitar qualquer ipv6-icmp por um momento para descobrir se o problema está relacionado ao icmp.
  • ssh tem os sinalizadores -4 e -6 para forçar o uso de IPv4 / IPv6. Verifique se a sua máquina não caiu acidentalmente na versão IP incorreta durante o teste.
  • Se você tiver refatorado suas regras e o problema IPv6 problem-ssh persistir, você poderá alterar essa questão para algo como: "As minhas regras implementam minha política pretendida?" e faça a pergunta do IPv6-ssh novamente (em um novo thread) com suas novas regras.
por 14.08.2016 / 11:32

Tags