Encaminhamento de portas

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá sobre encaminhamento de portas.

Imagine que você mora em um endereço onde recebe correspondências. Porém, você se muda para um novo quarto e quer que toda correspondência enviada ao número antigo do seu quarto (Quarto 80) seja entregue automaticamente no novo número (Quarto 8080). Você não quer pedir que todos atualizem suas agendas de endereços; quer apenas que o responsável pelo prédio cuide do redirecionamento.

O encaminhamento de portas faz parte do NAT (Network Address Translation, ou tradução de endereços de rede). Ele reescreve o tráfego de entrada para que as solicitações que chegam a uma porta sejam redirecionadas para outro destino.

Isso significa que o firewall faz mais do que simplesmente permitir ou bloquear o tráfego. Ele transforma ativamente as informações de destino dos pacotes, permitindo que um ponto de entrada de serviço visível externamente direcione as solicitações para outro destino interno.

O cenário:

Você tem um servidor web em execução na Porta 8080. No entanto, os navegadores web padrão procuram sites na Porta 80. Em vez de alterar o servidor web, você informará ao firewall: “Se alguém bater na Porta 80, envie essa pessoa diretamente para a Porta 8080”.

Neste laboratório, você vai:

  1. Preparar o firewall para lidar com o tráfego (Masquerading).
  2. Criar uma regra para encaminhar a Porta 80 para a Porta 8080.
  3. Testar e entender o comportamento do redirecionamento de portas.

Ativar o Masquerading

Nesta etapa, antes que o firewalld possa encaminhar portas, ele precisa de permissão para modificar os pacotes de rede. Esse recurso é chamado de Masquerading.

O Masquerading é uma forma de tradução de endereços. Em muitas implementações reais, ele permite que um firewall ou gateway atue como intermediário e faça o tráfego parecer originar-se de um contexto de endereço diferente daquele em que começou.

Pense no Masquerading como uma permissão para o firewall agir como intermediário, reescrevendo as informações de endereço dos pacotes para que eles cheguem ao local correto.

Observação: neste ambiente de laboratório, estamos usando a zona trusted como a zona ativa para garantir que o terminal web continue conectado.

Primeiro, verifique qual zona está ativa no momento.

sudo firewall-cmd --get-active-zones

Provavelmente, você verá trusted junto com sua interface de rede (por exemplo, eth0).

Agora, ative o masquerading nessa zona trusted.

sudo firewall-cmd --zone=trusted --add-masquerade

Verifique se ele foi ativado.

sudo firewall-cmd --zone=trusted --query-masquerade

Se a saída for yes, você estará pronto para continuar.

Criar uma regra de encaminhamento

Nesta etapa, vem a parte principal. Você criará a regra de encaminhamento.

As regras de encaminhamento são úteis quando você quer manter um comportamento externo estável sem alterar a aplicação. O firewall se torna uma camada de tradução entre o que os clientes esperam e o local em que o serviço realmente está escutando.

Queremos dizer o seguinte: “Para a zona trusted, encaminhe todo tráfego TCP destinado à porta 80 para a porta 8080”.

Execute este comando:

sudo firewall-cmd --zone=trusted --add-forward-port=port=80:proto=tcp:toport=8080

Veja o significado de cada opção:

  • port=80: o destino original (o quarto antigo).
  • proto=tcp: o protocolo usado (o tráfego web utiliza TCP).
  • toport=8080: o novo destino (o quarto novo).

Verifique se a regra foi adicionada corretamente.

sudo firewall-cmd --zone=trusted --list-forward-ports

A regra deverá aparecer na saída.

Testar o encaminhamento

Nesta etapa, confirme se o servidor web simples iniciado na porta 8080 durante a configuração está funcionando, acessando-o diretamente.

curl http://127.0.0.1:8080

Você deverá ver: "Hello from Port 8080! Port Forwarding is working."

Agora, teste o encaminhamento de portas acessando o seu próprio endereço IP na Porta 80.

Encontre o seu endereço IP:

MY_IP=$(hostname -I | awk '{print $1}')
echo "My IP is: $MY_IP"

Tente conectar-se à Porta 80 usando esse endereço IP.

curl http://$MY_IP:80

Observação sobre o teste: em muitos ambientes Linux, incluindo este laboratório, você poderá ver um erro Connection refused. Essa é uma limitação conhecida chamada NAT Loopback. O kernel geralmente impede que uma máquina se conecte ao próprio IP externo para regras de NAT.

É importante lembrar dessa limitação porque ela diferencia a correção da configuração do comportamento de um teste local. Às vezes, a regra é válida mesmo quando o autoteste realizado na mesma máquina fornece um resultado enganoso.

Em um cenário real, um visitante usando um computador diferente seria redirecionado com sucesso. O fato de o comando list-forward-ports da etapa anterior ter mostrado a regra é a verdadeira confirmação de que tudo funcionou!

Remover a regra

Nesta etapa, é uma boa prática limpar os recursos usados. Remova a regra de encaminhamento para que o tráfego volte a se comportar normalmente.

A limpeza é importante na administração de firewalls, pois regras antigas podem alterar silenciosamente a exposição de uma aplicação muito tempo depois de o teste original ser esquecido.

Para remover uma regra, use --remove-forward-port com exatamente os mesmos detalhes usados para adicioná-la.

sudo firewall-cmd --zone=trusted --remove-forward-port=port=80:proto=tcp:toport=8080

Verifique se a regra foi removida.

sudo firewall-cmd --zone=trusted --list-forward-ports

A saída deverá estar vazia.

Resumo

Neste laboratório, você aprendeu a redirecionar o tráfego de rede usando o encaminhamento de portas. Você:

  1. Ativou o Masquerading para permitir que o firewall reescrevesse os pacotes.
  2. Criou uma regra para encaminhar o tráfego da Porta 80 para a Porta 8080.
  3. Aprendeu sobre o NAT Loopback e por que os testes locais podem ser difíceis em algumas situações.
  4. Removeu a regra para restaurar o estado original.

Essa é uma técnica poderosa, frequentemente usada para expor serviços internos, como bancos de dados ou aplicações personalizadas, em portas públicas padrão.