Voltar ao blog

Redirecionamento de Portas com Iptables no Linux: Um Guia Prático

Redirecionamento de Portas com Iptables no Linux: Um Guia Prático

Redirecionamento de portas, também conhecido como mapeamento de portas, é um método para permitir que dispositivos remotos se conectem a um serviço específico dentro da sua rede local privada (LAN). Como o nome sugere, o processo envolve o redirecionamento de solicitações de uma porta específica para outra porta ou rede. Ele modifica o destino do pacote em trânsito e é considerado um tipo de operação de tradução de endereço de rede (NAT).

Ativar o redirecionamento de portas permite que os dispositivos ou hosts não conectados à rede interna acessem uns aos outros, o que de outra forma seria restrito quando desativado. Você pode aproveitar os benefícios do redirecionamento de portas para bloquear sites de destino, melhorar a segurança e contornar o firewall NAT conforme sua conveniência.

Neste tutorial, vamos orientá-lo pelas etapas de redirecionamento de portas com o iptables no Linux.

Pré-requisitos

Para acompanhar este tutorial, você precisará de:

Detalhes do Host

Primeiro, precisamos saber os detalhes das interfaces e endereços dos servidores em funcionamento. Vamos verificar as interfaces de rede do nosso sistema:

Você verá a saída:

Aqui, a saída destacada mostra duas interfaces, a primeira eth0 atribuída ao endereço 192.51.100.45, e a segunda eth1 atribuída ao endereço 192.168.1.5. Dessas duas interfaces, uma é pública e a outra é privada. Executaremos um comando para distinguir entre as duas e descobrir a interface pública, aquela conectada ao seu gateway padrão. Para distinguir, digite:

Você verá a saída:

Dados Fictícios para o Tutorial

Usaremos endereços e atribuições de interface fictícios ao longo deste tutorial. Você é livre para usar esses dados ou substituí-los, conforme sua conveniência.

Detalhes de rede do servidor web:

  • Endereço IP Público: 203.0.113.2

  • Endereço IP Privado: 192.0.2.2

  • Interface Pública: eth0

  • Interface Privada: eth1

Detalhes de rede do firewall:

  • Endereço IP Público: 203.0.113.15

  • Endereço IP Privado: 192.0.2.15

  • Interface Pública: eth0

  • Interface Privada: eth1

Configuração do Servidor Web

Vamos começar com o nosso host do servidor web. Primeiro, faça login com seu sudo usuário.

Instalar o Nginx

Primeiro, vamos instalar o Nginx em nosso host de servidor web e bloqueá-lo para que ele escute apenas em sua interface privada. Isso permitirá que nosso servidor web esteja disponível apenas se tivermos configurado o redirecionamento de portas de maneira correta.

Em seguida, atualize o cache de pacotes local e use o apt para baixar e instalar o Nginx:

Adicionar Restrições

Depois de instalar o Nginx em nosso host de servidor web, vamos bloqueá-lo para garantir que ele aceite entradas de interfaces privadas e de nenhum outro lugar. Além disso, isso garantirá que nossos servidores web fiquem ativos apenas se a configuração de redirecionamento de portas estiver correta.

Para adicionar restrições, abra o arquivo de configuração padrão do bloco do servidor /etc/nginx/sites-enabled/default em qualquer editor de texto de sua escolha (aqui estamos usando o editor de texto nano) e digite:

Na saída, você verá a diretiva listen aparecendo duas vezes:

Port Forwarding Nginx Default File

Neste tutorial, estamos usando a primeira diretiva para demonstrar o encaminhamento IPv4. A segunda, que está configurada para IPv6, pode ser removida. Adicione o endereço IP privado do seu servidor web com dois pontos logo antes do 80 para informar ao Nginx para aceitar entradas apenas da interface privada. Em seguida, edite a diretiva:

Port Forwarding Nginx Edited Default File

Depois de concluído, salve e feche o arquivo. Antes de prosseguir, certifique-se de que não há erros de sintaxe. Vamos testar o arquivo:

Nginx T

Se nenhum erro for exibido, você pode reiniciar o Nginx e habilitar a nova configuração:

Verificação da Restrição de Rede

Vamos verificar o nível de acesso que temos ao nosso servidor web. Tente acessar o servidor web usando a interface privada usando o curl comando:

Você verá a saída:

Port Forwarding Nginx Output1

Se tentarmos usar a interface pública, não conseguiremos nos conectar:

Isso é exatamente o que esperávamos.

Configurar o Firewall para Encaminhar a Porta 80

Vamos progredir com o nosso trabalho implementando o encaminhamento de portas em nossa máquina de firewall.

Habilitar o Encaminhamento no Kernel

Por padrão, a maioria dos sistemas tem o encaminhamento de portas DESATIVADO. Faremos alterações para ATIVAR o encaminhamento de portas fazendo algumas edições. Além disso, há uma opção para ATIVAR o encaminhamento de portas permanentemente usando os privilégios sudo conforme mostrado nas próximas etapas.

Para ATIVAR o encaminhamento de tráfego no nível do kernel, digite:

Para ATIVAR o encaminhamento de portas permanentemente, edite o arquivo /etc/sysctl.conf . Abra o arquivo com privilégios sudo e digite:

Dentro dele, encontre e desmarque a linha que se parece com esta:

Depois de concluído, salve e feche o arquivo. Em seguida, use os comandos sysctl para aplicar as alterações nas configurações para torná-las efetivas:

Configuração Básica do Firewall

Primeiro, consulte o guia sobre como configurar um firewall básico em sua máquina. Após a conclusão, você terá:

  • Instalado o iptables-persistent
  • Salvo o conjunto de regras padrão em /etc/iptables/rules.v4
  • Conhecimento abrangente sobre como adicionar e modificar regras usando o iptables comando

Além disso, você pode conferir como listar e excluir regras do Firewall iptables.

Adicionando as Regras de Encaminhamento

Configuraremos nosso firewall para garantir que o tráfego que entra em nossa interface pública ( eth0 ) na porta 80 seja encaminhado para nossa interface privada ( eth1). Por padrão, nosso firewall básico tem uma cadeia FORWARD definida para DROP tráfego. A adição de regras de firewall permitirá conexões de encaminhamento para o nosso servidor web. Para adicionar segurança, bloquearemos as regras do firewall para permitir solicitações de encaminhamento.

Na cadeia FORWARD, aceitaremos novas conexões destinadas à porta 80 vindas de nossa interface pública e direcionadas para nossa interface privada. Identificaremos as novas conexões com a ajuda da extensão conntrack e as representaremos por um pacote TCP SYN :

Você precisa permitir qualquer tráfego subsequente em ambas as direções resultante da conexão de entrada. Digite os comandos abaixo para permitir o tráfego ESTABLISHED e RELATED entre nossas interfaces pública e privada:

Vamos verificar se a nossa política na FORWARD chain está definida para DROP:

Até agora, adicionamos algumas regras que permitem que o tráfego entre as nossas interfaces pública e privada passe pelo nosso firewall. No entanto, iptables ainda não está informado para direcionar o tráfego porque a configuração das regras do firewall ainda não foi feita. Nos próximos passos, adicionaremos as regras de NAT e ajustaremos o conjunto de regras permanentes para direcionar o tráfego.

Adicionando as Regras de NAT para Direcionar Pacotes

Realizaremos duas operações distintas para que o iptables altere corretamente os pacotes e simplifique a comunicação com os clientes e o servidor web.

DNAT é a primeira operação que inicia a PREROUTING chain da tabela nat A operação altera o endereço de destino do pacote e permite que ele seja roteado corretamente ao passar entre as redes. No entanto, os clientes na rede pública se conectarão ao nosso servidor de firewall e não terão informações sobre a topologia da nossa rede privada. Para passar informações com a rede privada, altere o endereço de destino de cada pacote para permitir que ele chegue corretamente ao nosso servidor web de destino.

É crucial notar que estamos focando na configuração do redirecionamento de portas. Realizar NAT em cada pacote que atinge o firewall não faz parte do nosso tutorial. Faremos a correspondência de pacotes na porta 80 para o endereço IP privado do nosso servidor web:

O pacote será roteado corretamente para o nosso servidor web contendo o endereço original do cliente como endereço de origem. Apesar das tentativas feitas pelo servidor para enviar a resposta diretamente para esse endereço, não haverá possibilidade de estabelecer uma conexão TCP legítima.

Para configurar o roteamento adequado, modificaremos o endereço de origem do pacote. Vamos editar o endereço de origem para o endereço IP privado do nosso servidor de firewall. Após a modificação, a resposta será enviada de volta para o firewall, que a encaminhará de volta para o cliente.

Para habilitar essa funcionalidade, adicione uma regra à POSTROUTING chain da tabela nat avaliada logo antes dos pacotes serem enviados para a rede. Em seguida, faça a correspondência dos pacotes destinados ao nosso servidor web por endereço IP e porta:

Assim que esta regra estiver em vigor, o nosso servidor web deverá estar acessível apontando o nosso navegador web para o endereço público da nossa máquina de firewall:

Você verá a saída:

Nginx Output2

A nossa configuração de redirecionamento de portas está concluída.

Ajustar o Conjunto de Regras Permanentes

Depois de concluir a configuração do redirecionamento de portas, salvaremos isso no nosso conjunto de regras permanentes. Se você quiser manter os comentários no conjunto de regras atual, use o serviço iptables-persistent para salvar suas regras:

Você também pode abri-lo e editá-lo manualmente para manter os comentários no seu arquivo:

Em seguida, configure a tabela filter e a tabela nat para adicionar as regras da chain FORWARD e as regras de ROUTING respectivamente. Ajustar a tabela nat nos permitirá adicionar as regras PREROUTING e POSTROUTING conforme mostrado no exemplo abaixo:

Após adicionar os valores acima, salve e feche o arquivo. Em seguida, digite o comando abaixo para testar a sintaxe das suas regras:

Se você não vir erros, carregue o conjunto de regras:

Vamos verificar se o nosso servidor web ainda está acessível através do endereço IP público do seu firewall:

Conclusão

Ao final deste tutorial, você deve estar confortável com o encaminhamento de portas em um servidor Linux com iptables. Você pode aproveitar os recursos de encaminhamento de portas para disfarçar a topologia da sua rede privada, ao mesmo tempo em que otimiza o tráfego de serviços para fluir livremente através da sua máquina de firewall de gateway.

Como o processo depende explicitamente da segurança da sua rede e das portas utilizadas, ele é seguro. Pode haver uma possibilidade de risco envolvida se você não tiver um firewall de segurança ou segurança VPN em sua rede. Portanto, é aconselhável configurar o firewall conforme discutido neste tutorial. Esperamos que este guia ajude você a se manter seguro na internet ao usar sua rede privada.

Para explorar ainda mais soluções de firewall que você pode implementar em seu sistema, confira estes recursos do nosso blog:

Boa computação!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev é um designer criativo na CloudSigma, focado na construção de uma identidade empresarial consistente por meio de canais de marketing tradicionais e inovadores. Ele é hábil em combinar a visão artística com o marketing estratégico para criar narrativas de marca impactantes.

Comentários

Nenhum comentário ainda. Seja o primeiro.