Marcio Cunha

Como inspecionar regras de NAT e Firewall no Linux

Entenda os fundamentos do roteamento e tradução de endereços no Linux. Aprenda a usar iptables e nftables para diagnosticar tráfego bloqueado.

Marcio Cunha•6 min
Também disponível em:EnglishEspañol
Resumo
  • O roteamento de pacotes no Linux decide para onde vai cada dado baseado na tabela de roteamento do kernel.
  • A tradução de endereços de rede ajusta IPs de origem e destino para permitir que redes privadas acessem a internet.
  • O iptables utiliza tabelas e correntes tradicionais para filtrar pacotes e aplicar regras de segurança com eficiência.
  • O nftables substitui o ecossistema antigo unificando a filtragem em uma infraestrutura moderna e flexível.
  • O rastreamento de conexões permite que o firewall entenda se um pacote faz parte de uma sessão já estabelecida.

Como o kernel do Linux decide o destino dos pacotes de rede

Quando um servidor Linux recebe um fluxo de dados vindos da rede, ele precisa decidir imediatamente o que fazer com cada pedaço de informação recebido. Na prática, isso significa que o sistema operacional analisa os cabeçalhos dos pacotes — que funcionam como o endereço e o remetente em uma carta postal — para entender se a mensagem é para ele mesmo ou se deve ser repassada para outro equipamento. Esse processo central é chamado de roteamento de pacotes.

Para realizar esse trabalho sem travar, o kernel mantém uma tabela interna de rotas que indica qual placa de rede deve ser usada para alcançar determinados destinos. Quando um pacote chega e não encontra um caminho claro, ele é descartado silenciosamente ou gera uma mensagem de erro de volta ao remetente. Compreender esse fluxo inicial é o primeiro passo para qualquer diagnóstico de rede, especialmente quando queremos entender por que uma aplicação na nuvem não consegue conversar com o banco de dados.

O papel da tradução de endereços de rede na conectividade moderna

Muitas vezes, os computadores dentro de uma rede corporativa ou doméstica utilizam endereços IP privados que não funcionam diretamente na internet pública. Para resolver esse problema de escassez de endereços, utilizamos a tradução de endereços de rede, conhecida pela sigla NAT. Na prática, esse mecanismo altera o endereço IP de origem de um pacote que está saindo da rede interna para um IP público válido, guardando uma anotação em uma tabela interna para lembrar de quem era a mensagem original.

Quando a resposta do servidor externo chega, o roteador ou servidor Linux consulta essa anotação, desfaz a alteração e entrega o dado de volta ao computador correto na rede interna. Esse truque inteligente economiza bilhões de endereços IP no mundo inteiro, mas também adiciona uma camada de complexidade quando precisamos depurar o motivo de uma conexão externa estar falhando. Se a tabela de tradução se corromper ou estourar o limite de memória, as conexões simplesmente param de funcionar, gerando aquela sensação frustrante de que a internet caiu pela metade.

Desvendando o tráfego bloqueado com o iptables tradicional

Durante anos, o iptables foi o utilitário padrão no Linux para configurar regras de filtragem de pacotes e NAT, operando diretamente em cima de estruturas do kernel chamadas netfilter. Na prática, ele organiza as regras em tabelas como filter para segurança e nat para tradução de endereços, divididas em correntes que representam os momentos em que o pacote passa pelo sistema. Se você quer inspecionar o que está bloqueando o acesso a uma porta específica, o primeiro comando que vem à mente é listar essas regras ativas.

Para inspecionar as regras atuais de firewall com contadores de pacotes ativos, executamos o comando que mostra exatamente quantas mensagens passaram por cada regra de segurança:

sudo iptables -L -v -n --line-numbers

Esse comando exibe um relatório detalhado contendo o número da regra, a quantidade de pacotes processados e a ação correspondente, permitindo identificar rapidamente se um pacote está caindo em uma regra de bloqueio genérica. Para investigações mais profundas sobre tradução de endereços e conexões ativas, podemos combinar ferramentas de diagnóstico como o comando tcpdump para capturar pacotes de rede no Linux diretamente na interface de rede em questão, isolando o problema exato.

Migrando para o nftables e sua arquitetura unificada

Embora o iptables ainda funcione na maioria das distribuições Linux tradicionais, ele sofre com duplicação de código e lentidão quando o volume de regras cresce absurdamente em grandes data centers. Para solucionar essas limitações, a comunidade desenvolveu o nftables, que substitui o antigo arcabouço por uma sintaxe única e unificada para gerenciar tanto o firewall IPv4 quanto o IPv6. Na prática, o nftables elimina a necessidade de ferramentas separadas e oferece estruturas de dados muito mais eficientes, como tabelas de hash, que aceleram a busca por regras em servidores de alto tráfego.

Para listar todas as regras configuradas no novo sistema nftables de forma legível, utilizamos um comando direto que substitui toda a complexidade do ecossistema anterior:

sudo nft list ruleset

Essa listagem organizada por tabelas e famílias de protocolos facilita enormemente a auditoria de segurança e a identificação de regras de NAT mal configuradas. Ao contrário do iptables, onde cada tabela era gerenciada de forma isolada, o nftables permite agrupar múltiplos critérios de inspeção em uma única linha de comando, tornando o diagnóstico de problemas de rede muito mais rápido e previsível para administradores de sistemas.

Diagnosticando o rastreamento de conexões e estados de rede

Uma das inovações mais importantes dos firewalls modernos baseados em Linux é o rastreamento de conexões, conhecido como conntrack, que permite ao sistema enxergar os pacotes não como eventos isolados, mas como parte de uma conversa contínua. Na prática, isso significa que se permitirmos que um pacote saia do nosso servidor para acessar um site externo, o firewall anota que a conexão é válida e autoriza automaticamente a volta da resposta, sem que precise criar uma regra complexa liberando o tráfego de entrada.

Quando uma aplicação sofre com quedas misteriosas ou conexões travadas, inspecionar a tabela de estados do kernel ajuda a revelar se há esgotamento de recursos ou conexões zumbis presas. Podemos visualizar as conexões ativas atualmente processadas pelo subsistema de NAT e firewall executando o seguinte comando:

sudo conntrack -L

Essa listagem mostra o protocolo utilizado, o tempo de vida restante da conexão e os endereços envolvidos em ambas as pontas da comunicação. Caso a tabela esteja cheia, novos pacotes serão descartados independentemente das regras de firewall configuradas, um cenário clássico de falha sistêmica que confunde muitos profissionais iniciantes. Para complementar essa implementação em produção, vale conferir também nossas análises técnicas sobre Como testar cristal oscilador de quartzo na placa e Por que APIs com gRPC e Protocol Buffers são mais rápidas que JSON?.

Considerações finais sobre a inspeção de tráfego no Linux

Dominar a inspeção de regras de NAT e firewall no Linux transforma a maneira como encaramos problemas complexos de infraestrutura e conectividade de rede. Em vez de adivinhar o motivo pelo qual um serviço ficou inacessível, o administrador passa a contar com uma metodologia empírica baseada na leitura correta dos estados do kernel, tabelas de roteamento e contadores de pacotes. Conforme exploramos ao longo deste artigo, ferramentas como iptables, nftables e o rastreamento de conexões formam um ecossistema poderoso para garantir a segurança e o fluxo correto de dados em qualquer ambiente de servidor.

Manter a curiosidade técnica e testar esses comandos em ambientes controlados é o caminho mais seguro para ganhar confiança na operação de sistemas Linux em produção. Seja depurando regras legadas ou migrando estruturas para o nftables, a clareza sobre o caminho que cada pacote percorre dentro da máquina é a chave definitiva para manter serviços resilientes e livres de gargalos ocultos.