terça-feira, 17 de outubro de 2017

Um firewall para IPv6

Com a elevada necessidade de implementar o procolo IPv6 com urgência em diversos sistemas autônomos, há o receio do fato, por parte de muitos administradores de rede e de infra-estrutura, pois o IPv6 além de ser um protocolo totalmente diferente do seu antecessor o mesmo não mais utilizará o NAT para o compartilhamento da internet. Muitas perguntas surgem sobre a implantação, uma delas é em relação a segurança, quais as melhores práticas de regras de firewall exigidos por este novo protocolo para manter o mesmo nível de segurança já conhecido no IPv4?
Diante do contexto de implementação do IPv6 e da chegada da última fase do esgotamento do IPv4 é interessante para a comunidade científica a necessidade de estudos que tenham como objetivo analisar essa implantação na prática como um modelo viável e assim, portanto, estimular a outras instituições que por ventura também estejam em fase de implantação ou que ainda pretendem, sem prazo definido, implementar o IPv6, mas não o fazem em face das dúvidas e receios que acaso possam estar relacionados a respeito da segurança. Que este artigo possa dirimir suas dúvidas em realizá-lo.
As regras que se seguirão fazem parte de um ambiente que requer regras bastantes restritivas em conjunto com as boas práticas requiridas pelo protocolo:
  • Firewall restritivo: todas as conexões entrantes, saintes e passantes são bloqueadas e só é permitido o que é definitivamente liberado;
  • Bloqueio total do trânsito de pacotes que possuam os prefixos reservados;
  • Permitir a entrada de pacotes que possuam os prefixos reservados aos endereços multicast e com o protocolo ICMPv6, pois eles não podem ser bloqueados. 
  • Permitir somente um único servidor DNS local sirva as consultas externas pelo protocolo;
  • Permitir a passagem de pacotes à internet com destino aos serviços web que só tenha como origem o bloco IPv6 alocado à instituição;
Outro tipo de configuração seria abordar o uso do firewall statefull, pois permite somente a entrada de pacotes oriundos das respostas de conexões originadas na rede interna, isto é, uma configuração que interrompe a conexão fim-a-fim semelhantemente ao NAT. Este post foi baseado em um artigo científico que desenvolvi para apresentar em um curso de pós-graduação em redes de computadores.

Nesta próxima imagem é a representação gráfica de um cenário hipotético:

Ambiente topológico para testes

O seguinte script de firewall foi implementado no gateway usando o iptables como firewall, estas configurações seguiram as recomendações presentes no livro de laboratório de IPv6 da equipe do NIC.br.

Nestas primeiras linhas há a definição dos endereços IPs que fazem parte respectivamente da interface de rede do servidor, IPs públicos globalmente troteável, bloco atribuído a rede interna, prefixos atribuídos pela IANA as outras linhas limpam as configurações personalizadas para garantir que as regras seguintes serão únicas, também estabelece que toda a comunicação é bloqueada por padrão:


As linhas seguintes ativam o roteamento para que comunicação entre as redes funcionem e bloqueia todos os prefixos com endereços reservados para outras finalidades:


As linhas seguintes liberam toda a comunicação originada e destinada pelo endereços multicast que utilizam o protocolo ICMPv6, pois esta configuração é extremamente importante para algumas funcionalidades básicas do IPv6, como por exemplo, o NDP - protocolo de descoberta de vizinhança que inclui a descoberta de roteadores e prefixos, ou seja, sem essas configuração a comunicação via IPv6 é interrompida.


Finalização do script e a liberação exclusiva do servidor DNS se comunique com a internet usando a porta 53


Testes e avaliação dos resultados

Os testes terão o objetivo de avaliar se as configurações de firewall de fato estão em conformidade aos requisitos.
  • Firewall restritivo: todas as conexões entrantes, saintes e passantes são bloqueadas e só é permitido o que é definitivamente liberado;
Para realizar este requisito basta bloquear por padrão toda a comunicação com os comandos: ip6tables -P INPUT DROP, ip6tables -P OUTPUT DROP e ip6tables -P FORWARD DROP. Para que haja conectividade à internet somente o mínimo necessário é liberado.
  • Bloqueio total do trânsito de pacotes que possuam os prefixos reservados;
É o bloqueio total de pacotes entrantes, saintes e passantes com os prefixos fc00::/7, 3ffe::/16, 2001:2::/48, 2001:10::/28 e 2001:db8::/32. Para realizar os testes que demonstra o funcionamento efetivo desta configuração foram feitos alguns testes práticos a partir do computador com Windows instalado. No terminal de prompt de comando deste computador foi dado o comando para traçar a rota até o destino fictício 2001:db8::1, porém este endereço possui um prefixo reservado aos endereços de documentação. Na figura 2 representa as telas dos resultados do mesmo comando antes e depois da aplicação do bloqueio.

Figura 2: teste de execução com o comando tracert
  • Permitir a entrada de pacotes que possuam os prefixos reservados aos endereços multicast e com o protocolo ICMPv6, pois eles não podem ser bloqueados. 
O bloqueio do ICMPv6 não permite que o protocolo de descoberta de vizinhança desempenhe a sua função, em consequência o funcionamento da rede é inviabilizado. Por isto foi incluído no script este requisito, assim os seus comandos foram baseados nas recomendações da RFC 4890 na qual deu origem a estas regras que se encontram no livro Laboratório de IPv6 da equipe do nic.br.
  • Permitir somente um único servidor DNS local sirva as consultas externas pelo protocolo;
Para cumpri este requisito foi suficiente colocar uma regra no firewall que permite consultas externas somente a partir do servidor DNS. A regra permite a passagem de pacotes com o protocolo UDP e TCP usando a porta 53 originados do servidor DNS para a internet.  Para testar a efetividade desta regra foi realizada uma consulta ao servidor DNS do google (2001:4860:4860::8888) a partir do servidor DNS do laboratório.

Figura 3: Teste de consulta no servidor DNS e o teste de consulta DNS no cliente Windows
Como pode ser visto na figura 3 a consulta a um servidor externo à rede obtive êxito ao retornar corretamente o endereço do servidor web do google. Contudo, como se pode verificar a mesma consulta realizada a partir da máquina cliente com Windows não obteve resultado algum, pois a comunicação foi bloqueada pelo firewall. Com exceção a consulta realizada ao servidor DNS do próprio laboratório que retornou positivamente como esperado. Desta forma prova que a regra de firewall é efetiva em cumprir o requisito.
  • Permitir a passagem de pacotes à internet com destino aos serviços web que só tenha como origem o bloco IPv6 alocado à instituição;
Este requisito é o mais importante, pois permite o acesso a quase todos os serviços web da internet; bastando permitir a passagem do protocolo tcp com as portas 80 e 443 correspondentes aos servidores operados pelos protocolos http e https respectivamente. Como se pode verificar na figura 5, o teste realizado pelo site www.test-ipv6.com que no qual obteve total compatibilidade com o IPv6 demonstrando a efetividade das regras de firewall.

Figura 4 - Teste de conectividade de IPv6
Este post foi apenas um resumo do artigo a qual mencionei para maiores detalhes faça o download do arquivo em pdf: Projeto de implementação do IPv6 no campus da Universidade Federal do Vale do São Francisco em Paulo Afonso - BA.pdf

Nenhum comentário:

Postar um comentário