É possível que um host tenha diferentes portas abertas para pilha IPv4 e IPv6? Por exemplo, é viável ter a porta 22 aberta apenas para IPv6 e não para IPv4 e vice-versa? Além disso, quando tentei bloquear uma porta apenas para IPv6, não teve efeito:
ip6tables -A INPUT -p tcp --dport 22 -j REJECT
Sim definitivamente. Na verdade, existe até uma diferença entre uma porta no TCP e a mesma porta no UDP no mesmo endereço IPv6, e é por isso que você especifica
-p tcp
também.O IPv4 é um mecanismo diferente do IPv6 e eles têm interfaces separadas, com endereços IP separados com portas separadas. Na verdade, você não pode usar o IPv6 para se conectar a um endereço IPv4, a menos que tenha algum tipo de intermediário que faça isso por você. Mas esse intermediário simplesmente aceitaria o IPv4 e então ligaria essa conexão a um novo IPv6.
Também seria o mesmo caso se você tivesse 2 placas de rede, ambas com um endereço IP diferente. Você também teria que especificar o endereço IP correto.
Mas basicamente tudo se resume a isso: você tem um programa que hospeda um servidor, veja em sua configuração quais portas ele abre e bloqueie de acordo com seu ipv4, ipv6 e uso de porta em um ou ambos tcp ou udp.
Sim, eles são totalmente separados. No POSIX, você cria sockets usando a chamada de sistema socket(2) e passa AF_INET ou AF_INET6 para ele escolher entre IPv4 e IPv6, respectivamente. Esses soquetes podem usar os mesmos números de porta sem qualquer interferência.
No entanto, o Linux tem o recurso em que um soquete IPv6 escutando em uma determinada porta também obterá tráfego IPv4 com o endereço de origem mapeado no endereço IPv6 . Isso pode ser desligado configurando IPV6_V6ONLY .
Resumidamente
Sim
Observe que o aplicativo não precisa se vincular ao IPv4 e ao IPv6, portanto, você pode fazer isso mesmo sem tabelas de IP.
Veja a diretiva ListenAddress em sua configuração sshd ou outro aplicativo.
Não que você queira fazer isso, mas é perfeitamente possível ter um servidor ssh escutando na porta TCP/IP6 22 enquanto um servidor web escuta na porta TCP/IP4 22.
iptables
eip6tables
são configurados separadamente.Observe como apontado nos comentários, o próprio IP não possui portas, mas alguns dos protocolos de transporte mais usados com ele, TCP e UDP, possuem portas. É por isso que
iptables
requer algo como-p tcp
antes que você possa filtrar por porta, caso contrário, nãoport
faz sentido.Eu gostaria de responder de uma perspectiva técnica.
O conceito de portas está na "camada de transporte", enquanto os protocolos IP estão na "camada de internet". Como os endereços IP são separados (para a maioria das partes, veja abaixo), as portas também são naturalmente separadas.
No entanto, deve-se notar que, para facilitar a migração de IPv4 para IPv6, alguns endereços no espaço de endereços IPv6 são mapeados para IPv4. Isso significa que quando alguns soquetes IPv4 são usados, suas contrapartes IPv6 também podem ficar indisponíveis. Os detalhes dependem de implementações específicas do sistema operacional.
Primeiro, IPv4 e IPv6 não têm "portas".
As portas são um conceito adicionado pelos protocolos de transporte TCP e UDP.
Em segundo lugar, os endereços TCP/UDP são separados para IPv4 e IPv6, pois o endereço é a combinação ip_address:port. 127.0.0.1:8000 é um endereço diferente de ::1:8000. Dois programas diferentes podem se comunicar nesses dois endereços diferentes.
Terceiro, você precisa usar
ip6tables
para afetar o tráfego IPv6.