Marcio Cunha

Como bloquear varreduras de portas na borda com nftables

Descubra como criar regras eficientes no nftables para detectar e mitigar varreduras de portas antes que alcancem seus serviços internos de rede.

Marcio Cunha•5 min
Também disponível em:EnglishEspañol
Resumo
  • Varreduras de portas mapeiam vulnerabilidades ao sondar serviços ativos na rede antes de ataques direcionados.
  • O nftables substitui o iptables com uma sintaxe unificada e melhora a performance de filtragem no kernel do Linux.
  • Conjuntos dinâmicos armazenam IPs suspeitos em tempo de execução sem inflar o arquivo de configuração.
  • A contagem de conexões simultâneas identifica robôs automatizados ao monitorar o comportamento de varredura.
  • Regras de limite de taxa descartam pacotes excessivos e protegem recursos computacionais contra esgotamento.

O perigo invisível das varreduras de portas na internet

Imagine que sua casa tem centenas de portas e janelas viradas para a rua, e alguém passa testando cada uma delas para ver quais estão destrancadas. Na arquitetura de redes, essa sondagem automatizada é chamada de varredura de portas, um processo em que softwares maliciosos enviam pacotes de dados para dezenas de milhares de endereços numéricos em busca de serviços vulneráveis. Na prática, isso significa que qualquer servidor conectado à internet sofre tentativas de invasão silenciosas dezenas de vezes por dia, muito antes de um ataque real acontecer.

Para blindar sua infraestrutura contra esse mapeamento prévio, a primeira linha de defesa precisa ser o roteador ou o firewall na borda da rede. Quando combinamos essa barreira com práticas avançadas de como bloquear tráfego malicioso na borda com eBPF e XDP, reduzimos drasticamente o risco de comprometimento de servidores internos. O objetivo é impedir que o invasor descubra quais portas estão abertas, tornando seu sistema invisível para robôs de varredura.

Por que o nftables substitui o legado iptables com vantagens

Durante muitos anos, o utilitário iptables foi o rei absoluto da filtragem de pacotes no sistema operacional Linux. No entanto, sua estrutura sofria com duplicação de código para IPv4 e IPv6, além de quedas severas de desempenho quando regras complexas eram adicionadas em sequência. O nftables surgiu para unificar toda essa lógica em uma arquitetura moderna que interage diretamente com o subsistema de rede do kernel, processando regras de forma muito mais rápida e elegante.

Na prática, isso significa que podemos escrever conjuntos de regras mais limpos, fáceis de ler e que consomem menos memória do processador ao inspecionar o tráfego de rede. Essa eficiência é vital quando precisamos lidar com milhares de pacotes por segundo vindos de endereços IP suspeitos tentando sondar portas aleatórias. Se você já utilizou ferramentas mais simples como como liberar portas no firewall do Linux com o UFW para gerenciar regras básicas, vai perceber que o nftables oferece um controle cirúrgico e de baixíssimo nível sobre cada pacote que cruza a placa de rede.

Configurando a tabela base e as correntes no nftables

Antes de criarmos bloqueios sofisticados, precisamos estruturar o esqueleto do nosso firewall utilizando a ferramenta de linha de comando do nftables. O ecossistema do nftables trabalha com tabelas que contêm correntes, e essas correntes organizam o momento exato em que os pacotes de rede serão inspecionados, seja logo na entrada da placa ou antes de atingirem as aplicações.

Para iniciar a configuração do nosso mecanismo de defesa na borda, execute a sequência de comandos abaixo no terminal do seu servidor Linux com privilégios administrativos:

  1. Criar a tabela principal do tipo inet para abranger tanto tráfego IPv4 quanto IPv6:
    nft add table inet firewall
  2. Adicionar a corrente de entrada para interceptar pacotes que chegam de fora:
    nft add chain inet firewall input { type filter hook input priority filter \; policy accept \; }
  3. Definir uma corrente dedicada para registrar e tratar pacotes suspeitos de varredura:
    nft add chain inet firewall varredura

Detectando o comportamento de varredura com conjuntos dinâmicos

Uma varredura de portas clássica se trai pela pressa: o invasor tenta abrir conexões em dezenas de portas diferentes em questão de segundos. Para pegar esse comportamento em flagrante, o nftables permite criar conjuntos dinâmicos que armazenam temporariamente os endereços IP que excedem um limite razoável de tentativas de conexão.

Na prática, dizemos ao firewall para monitorar requisições em portas fechadas e, caso um IP atinja mais de cinco tentativas em dez segundos, adicioná-lo automaticamente a uma lista negra temporária. Essa abordagem se assemelha a estratégias robustas aplicadas em como bloquear ataques de força bruta no SSH com Fail2Ban, mas operando diretamente no espaço do kernel para máxima velocidade de resposta e menor consumo de recursos.

Escrevendo as regras práticas de mitigação no nftables

Com os conceitos e a estrutura base definidos, chegou o momento de aplicar as regras que farão o trabalho pesado de filtragem e bloqueio. Vamos configurar o nftables para identificar padrões repetitivos de sondagem e descartar os pacotes correspondentes antes que eles consumam processamento dos nossos serviços internos.

Para aplicar essas regras de proteção de forma permanente e funcional, utilize os comandos abaixo no seu ambiente de produção:

  1. Criar um conjunto dinâmico chamado 'port_scanners' que expira após um minuto de bloqueio:
    nft add set inet firewall port_scanners { type ipv4_addr\; flags dynamic, timeout\; timeout 1m\; size 65535\; }
  2. Adicionar a regra que insere IPs infratores no conjunto dinâmico ao exceder o limite de varredura:
    nft add rule inet firewall input tcp flags \& (syn\|ack) == syn add @port_scanners { ip saddr ct count over 5 } drop
  3. Garantir que qualquer pacote vindo de um IP já presente na lista negra seja sumariamente ignorado:
    nft add rule inet firewall input ip saddr @port_scanners drop

Validando e monitorando a eficácia do firewall

Implementar regras de segurança sem testá-las é como colocar um cadeado na porta sem conferir se a chave realmente gira. Após configurar o nftables, é fundamental realizar auditorias simulando varreduras a partir de uma máquina externa para garantir que o firewall está respondendo exatamente conforme o esperado.

Você pode utilizar ferramentas legítimas de auditoria de rede para disparar pacotes de teste contra o seu IP público e, em seguida, inspecionar o comportamento do conjunto dinâmico com o comando de listagem do nftables. Caso perceba que tráfego legítimo está sendo afetado por falsos positivos, basta ajustar o limite numérico de tentativas ou o tempo de expiração do conjunto no script de configuração.

Considerações Finais

Bloquear varreduras de portas na borda da rede usando o nftables transforma um servidor exposto em uma fortaleza silenciosa, capaz de repelir sondagens automatizadas antes que elas comprometam a estabilidade dos serviços. Ao unir conjuntos dinâmicos, contagem inteligente de pacotes e a performance nativa do kernel Linux, construímos uma barreira impenetrável contra os mapeamentos diários da internet.

Manter essa defesa ativa exige monitoramento contínuo e ajustes finos nos limiares de bloqueio para equilibrar segurança rígida e acessibilidade legítima. Com uma arquitetura de firewall bem planejada, você protege seus recursos computacionais e ganha a tranquilidade operacional necessária para focar no crescimento dos seus projetos tecnológicos.