Como bloquear ataques DDoS na camada 4 com iptables e hashlimit
Aprenda a configurar regras avançadas de firewall com iptables e hashlimit para mitigar enchentes de pacotes SYN e UDP em servidores Linux expostos.
Resumo
- O hashlimit do netfilter permite impor limites estritos de taxa por IP ou porta sem derrubar conexões legítimas.
- Ataques de inundação SYN esgotam os recursos do sistema ao abrir conexões TCP incompletas de forma massiva.
- O uso correto do módulo recent complementa o iptables ao rastrear estados e bloquear repetidores de pacotes UDP.
- Ajustar corretamente a tabela raw e o conntrack evita que o kernel gaste memória preciosa com tráfego lixo.
- Testar as regras de mitigação em laboratório previne que clientes reais sejam bloqueados por engano durante um incidente.
O perigo silencioso das enchentes de pacotes na camada de transporte
Imagine que a porta de entrada da sua empresa receba de repente milhares de pessoas ao mesmo tempo, mas nenhuma delas queira entrar de verdade — elas apenas bloqueiam a passagem. É exatamente isso que acontece em um ataque de negação de serviço distribuído, conhecido como DDoS, focado na camada 4 do modelo OSI, que cuida do transporte de dados entre redes. Nessa camada, criminosos disparam enchentes de pacotes do protocolo TCP (responsável pela entrega confiável de dados) ou do protocolo UDP (focado em velocidade, sem confirmação de entrega) para sufocar o servidor até que ele pare de responder. Na prática, isso significa que seu site ou sistema sai do ar porque o sistema operacional Linux gasta toda a sua energia apenas tentando anotar cada conexão falsa que chega, sem conseguir atender quem realmente importa.
Quando o tráfego legítimo se mistura ao ruído gerado por milhares de máquinas zumbis espalhadas pelo mundo, identificar o agressor manualmente se torna uma missão impossível. É nesse cenário crítico que entra o ecossistema de redes do Linux, permitindo que a gente crie barreiras inteligentes usando ferramentas nativas. Se você já passou pela frustração de ter o servidor travado por excesso de tráfego, sabe que apenas reiniciar o serviço não resolve o problema. Para entender melhor como isolar o ambiente e proteger a infraestrutura, vale a pena conferir o guia sobre como bloquear conexões suspeitas no Linux com iptables e fail2ban, que traz uma base sólida para a segurança perimétrica.
Como funciona o módulo hashlimit para controlar o fluxo de pacotes
O iptables, que funciona como o porteiro digital do Linux encarregado de decidir quem entra e quem sai da máquina, possui vários módulos de extensão poderosos. Um dos mais úteis para conter enchentes de rede é o hashlimit, um recurso que cria tabelas dinâmicas na memória para rastrear a taxa de pacotes por segundo que vem de endereços IP específicos ou de portas de rede. Diferente do limite tradicional de taxa que trata todo mundo igual, o hashlimit lembra o comportamento de cada origem individualmente. Na prática, ele funciona como um medidor de vazão inteligente que aperta o cerco apenas de quem está enviando dados rápido demais, deixando o tráfego normal fluir sem interrupções e sem penalizar usuários legítimos.
Configurar o hashlimit exige entender alguns parâmetros fundamentais, como a taxa máxima permitida e o tamanho do balde de estouro, conhecido como burst, que tolera pequenas variações naturais de tráfego. Quando um endereço IP ultrapassa essa cota estipulada, o kernel do Linux pode descartar os pacotes excedentes ou marcá-los para outras ações. Essa abordagem cirúrgica evita que você precise derrubar o acesso de uma rede inteira só porque um único computador foi infectado e começou a disparar lixo contra o seu servidor. Para quem administra servidores expostos a varreduras constantes, combinar essa estratégia com as técnicas explicadas em como bloquear tráfego malicioso na borda com eBPF e XDP garante uma camada extra de performance antes mesmo de o tráfego chegar ao iptables.
Mitigando enchentes de pacotes SYN no protocolo TCP
O calcanhar de Aquiles clássico de qualquer servidor web exposto à internet é a chamada inundação SYN, um truque sujo onde o invasor envia milhares de pedidos de conexão TCP mas nunca conclui a última etapa do aperto de mão digital. O servidor, educadamente, reserva espaço na memória RAM e aguarda uma resposta que nunca chega, até esgotar todos os descritores disponíveis. Para travar essa brecha com o iptables, criamos uma regra que intercepta novos pedidos de conexão e aplica o filtro de hashlimit para barrar quem exagera. Na prática, isso significa que se um endereço IP começar a disparar dezenas de pedidos de abertura de sessão por segundo, o firewall bloqueia novos pacotes daquele IP específico, salvando a memória do servidor de um colapso iminente.
Para colocar essa proteção em prática de forma segura na sua máquina, siga os passos abaixo no terminal com privilégios de administrador:
- Crie uma regra nova na cadeia de entrada para identificar pacotes SYN iniciais usando o módulo state. O comando a seguir isola o início da comunicação TCP:
iptables -A INPUT -p tcp --syn -j SYN_FLOOD - Configure a regra de hashlimit dentro dessa cadeia personalizada para limitar a taxa a no máximo cinquenta pacotes por segundo por IP de origem:
iptables -A SYN_FLOOD -m hashlimit --hashlimit-above 50/sec --hashlimit-burst 100 --hashlimit-mode srcip --hashlimit-name syn_rate_limit -j DROP - Garanta que o restante do tráfego legítimo que passou pelo filtro seja aceito normalmente pela regra padrão de retorno:
iptables -A SYN_FLOOD -j RETURN
Com essa estrutura em vigor, qualquer tentativa de esgotar os recursos de conexão através de requisições falsas é freada logo na entrada. É importante lembrar que ajustar os valores de limite depende muito do tráfego real do seu site ou aplicação; portais de alto volume podem precisar de margens maiores para não prejudicar visitas simultâneas legítimas.
Contendo ataques de inundação UDP e tráfego volumétrico
Enquanto o protocolo TCP exige confirmação e mantém o controle de sessão, o protocolo UDP é totalmente anárquico: ele simplesmente joga os pacotes na rede na esperança de que cheguem ao destino, sem perguntar se o servidor está pronto para recebê-los. Essa característica faz do UDP o veículo favorito para ataques de amplificação volumétrica, onde o atacante falsifica o endereço de origem e faz milhares de servidores responderem ao mesmo tempo para a vítima. No seu servidor Linux, isso se traduz em uma avalanche de pacotes indesejados que entopem a placa de rede e consomem toda a largura de banda disponível. Na prática, a defesa contra esse tipo de inundação exige barrar pacotes UDP em portas que não rodam serviços essenciais e limitar drasticamente a taxa nas portas ativas.
Para proteger portas UDP específicas contra abusos usando o hashlimit, podemos aplicar regras direcionadas que descartam o excesso de lixo digital antes que ele consuma processamento precioso da aplicação. Veja o exemplo prático para uma aplicação rodando na porta UDP 53 ou qualquer outra porta de serviço:
iptables -A INPUT -p udp --dport 53 -m hashlimit --hashlimit-above 100/sec --hashlimit-burst 200 --hashlimit-mode srcip --hashlimit-name udp_rate_limit -j DROPEssa linha de comando diz ao firewall que qualquer IP tentando enviar mais de cem pacotes UDP por segundo para a porta escolhida terá o excesso sumariamente descartado. Essa medida simples impede que scripts automatizados derrubem sua infraestrutura com rajadas de dados inúteis. Manter o monitoramento do hardware durante esses eventos é fundamental para garantir que o servidor não sofra com superaquecimento ou gargalos físicos, algo que pode ser acompanhado de perto com as orientações de como monitorar temperatura de servidores Linux com lm-sensors.
Considerações finais e validação das regras de segurança
Implementar barreiras na camada de transporte com o iptables e o módulo hashlimit transforma um servidor vulnerável em uma fortaleza resiliente contra ataques de negação de serviço volumétricos e enchentes de pacotes SYN. No entanto, nenhum sistema de segurança deve ser colocado em produção sem testes rigorosos em ambiente controlados para garantir que usuários legítimos não sejam bloqueados por engano durante picos normais de acesso. Na prática, a engenharia de redes exige monitoramento constante dos logs do kernel e ajustes finos nos limiares de taxa conforme o comportamento da sua base de usuários evolui ao longo do tempo. Combinar essas defesas de borda com boas práticas de monitoramento e arquitetura garante a estabilidade dos seus serviços mesmo sob forte pressão na internet.