Introdução
Ataques DDoS (Distributed Denial of Service) podem derrubar sua aplicação em segundos. Eu já sofri com isso: um ataque coordenado consumiu memória, travou o proxy e deixou a infraestrutura indisponível. A diferença entre perder o acesso SSH ou recuperar em minutos está em 6 medidas específicas de prevenção que mostro neste artigo.
Este tutorial cobre as técnicas que provei em produção: desde configurar o Cloudflare corretamente até ajustar o kernel Linux para resistir a milhões de requisições. Você aprenderá a implementar cada uma delas com exemplos práticos, sem teoria vaga.

⚠️ Atenção: Este artigo é baseado em um incidente real de DDoS. As medidas aqui descritas são preventivas. Se você estiver sob ataque ativo, use este checklist em paralelo com suporte do seu provedor CDN (Cloudflare, Akamai, etc.).
Pré-requisitos
Para implementar as medidas deste artigo, você precisa de:
- Acesso root ou sudo na VPS/servidor
- Docker e Docker Compose instalados
- Conhecimento básico de Linux (edição de arquivos, comandos de kernel)
- Conta Cloudflare configurada como reverse proxy/CDN
- Proxy reverso em produção (Traefik, Nginx, HAProxy)
- Ferramentas de monitoramento (Prometheus, Grafana, ou similar)
Se você não tem ainda um proxy reverso em produção, comece com Traefik em Docker ou Nginx.
1. Desativar Auto-Update de Proxy em Produção
Versões novas de proxy (Traefik, Nginx) podem conter bugs que se manifestam apenas sob alta carga. Eu descobri a dura maneira: uma atualização automática do Traefik para uma versão menor introduziu um memory leak que triplicou o consumo de RAM durante um ataque.
O problema: se o proxy cai sob DDoS, o atacante já venceu.
Implementação no Docker Compose
Congele a versão do seu proxy e revise atualizações manualmente antes de aplicar:
| |
Processo de Atualização Seguro
- Revise o changelog antes de atualizar
- Teste em staging com tráfego real
- Aplique em horário de baixo tráfego
- Tenha rollback pronto:
docker-compose upcom imagem anterior
| |
ℹ️ Informação: O Traefik v3.0.0 a v3.2.x teve patches de segurança. Se você está em v2.10.x, atualize apenas se testou em staging. Versões antigas têm CVEs, mas atualizações rápidas sob ataque causam falhas.
2. Ativar “Under Attack Mode” no Cloudflare
O Cloudflare oferece um modo específico para DDoS: Under Attack Mode. Ele aumenta o nível de desafio (CAPTCHAs, validação de navegador) para bloquear bots enquanto deixa usuários legítimos passarem.
Configuração Manual no Painel Cloudflare
Use este passo a passo no painel Cloudflare:
- Faça login no painel do Cloudflare
- Selecione o site que você deseja configurar
- Clique em Security no menu lateral
- Clique em DDoS Protection
- Localize a seção Managed DDoS Protection
- Clique em Configure ao lado de Under Attack Mode
A transição é imediata. Usuários legítimos recebem um desafio de 5-10 segundos; bots automatizados tendem a ser bloqueados.
Se o “Under Attack” não aparecer no seu painel
Em alguns planos/contas, o toggle pode não estar visível no local esperado. Nesse caso, aplique um desafio global temporário:
- Acesse Security → WAF → Custom Rules
- Crie uma regra com expressão
true - Defina a ação como Managed Challenge (ou JS Challenge, se preferir)
- Posicione a regra no topo e publique
Isso não é idêntico ao “Under Attack”, mas entrega mitigação rápida durante incidente, com efeito semelhante para bloquear tráfego automatizado em massa.
Automação: Ativar via API
Se você quer ativar o modo automaticamente quando detectar anomalias, use a API do Cloudflare:
| |
Integração com Monitoramento
Trigger automático quando a taxa de requisições ultrapassar 10.000/min:
| |
ℹ️ Informação: “Under Attack Mode” bloqueia ~80% dos bots automáticos, reduzindo falsos positivos de segurança. O custo é latência adicional para usuários legítimos (5-10s), aceitável em situação de crise.
3. Alterar o Endereço IP Real do Servidor
Se o atacante descobriu o IP real da sua VPS (através de registros DNS históricos, whois, ou engenharia social), ele pode contornar o Cloudflare e atacar diretamente.
Cenário: atacante faz WHOIS no domínio, encontra um IP antigo, e envia requisições diretamente para lá, ignorando o Cloudflare.
Passos para Mudar o IP
Reserve um novo IP com seu provedor de VPS
- Na Hetzner, DigitalOcean, ou Hostinger, isso é gratuito e demora 5 minutos
- Você pode ter múltiplos IPs por VPS
Configure o IP novo no servidor
| |
Exemplo de /etc/netplan/01-netcfg.yaml:
| |
Atualize DNS para apontar para o novo IP apenas em sua infraestrutura interna
- Cloudflare continua apontando para o IP anterior (ou para um que você controla)
- DNS interno aponta para o novo IP
- Alte /etc/hosts dos servidores internos se necessário
Mantenha o IP antigo “preso” no Cloudflare, apontando para um bloqueio genérico
| |
Validar Mudança de IP
| |
⚠️ Atenção: Mudar IP é disruptivo. Tenha um plano de rollback. Se usar HTTPS pinning ou certificados específicos por IP, atualize também.
4. Configurar Limites de File Descriptors no Docker e Podman
Cada conexão TCP aberta consome um file descriptor (FD). Sob DDoS, milhares de conexões ficam pendentes, esgotando a cota do sistema e travando a aplicação.
Sintoma: “Too many open files” ou timeout em SSH durante ataque.
Entender File Descriptors
| |
Configuração no Docker Compose
| |
Se você usa Nginx no lugar de Traefik, a configuração fica assim:
| |
Configuração no Podman
No Podman, você pode aplicar o mesmo limite com --ulimit:
| |
Se você usa podman-compose, mantenha a chave ulimits no YAML, igual ao Docker Compose.
Aumentar Globalmente no Host
Se múltiplos containers precisam de limites altos:
| |
Teste de Pressão
Simule conexões pendentes para validar o limite:
| |
ℹ️ Informação: Um limite de 65.000 file descriptors permite ~60.000 conexões simultâneas (contabilizando FDs para logs, sockets internos, etc.). Em prática, ajuste para 80-90% do limite hard.
5. Habilitar TCP Cookies no Kernel
TCP SYN Flood é um ataque simples: o atacante envia pacotes SYN (início de conexão TCP) sem responder ao SYN-ACK, causando o servidor alocar memória para conexões incompletas (SYN backlog).
TCP Syncookies resolve isso sem aceitar a conexão: o servidor incorpora informações no SYN-ACK de forma que a memória só é alocada APÓS a validação do cliente.
Habilitar no Linux
| |
Configurações Complementares (kernel hardening)
Enquanto estiver nessa, ative outras proteções:
| |
Validar Configuração
| |
📝 Exemplo: Em um DDoS típico com 500.000 SYN/segundo, sem syncookies o servidor aloca 5 GB de memória em segundos. Com syncookies ativado, o consumo permanece < 100 MB.
6. Implementar Monitoramento Adequado com Alertas
Monitoramento é prevenção. Se você detectar anomalias (spike de requisições, consumo anormal de memória) em 1 minuto, pode ativar defesas antes de perder SSH.
Métricas Críticas para DDoS
Monitore estas 5 métricas com alertas em tempo real:
| Métrica | Alerta | Ação |
|---|---|---|
| Taxa de requisições/min | > 10.000 | Ativar Under Attack Mode |
| Conexões TCP pendentes | > 50.000 | Aumentar tcp_max_syn_backlog |
| Consumo de memória (proxy) | > 80% | Reiniciar container, ativar Under Attack |
| Processos acumulados (zombie) | > 100 | Investigar leak, restart app |
| Latência P99 | > 5s | Indicativo de gargalo ou ataque lento |
Configuração com Prometheus + Alertmanager
| |
Script de Monitoramento Simples (sem Prometheus)
Se não tem stack de monitoring instalado, use este script bash:
| |
Execute em background:
| |
📝 Exemplo: Um cliente meu detectou um DDoS em 2 minutos graças a alertas. Ativou Under Attack Mode e aumentou file descriptors. O site permaneceu online com latência aceitável. Sem alertas, o downtime teria sido de horas.
7. Exemplo Prático: Configuração Completa para Produção
Aqui está uma configuração completa de Docker Compose com todas as medidas aplicadas:
| |
Arquivo traefik-config.yaml:
| |
Se você usa Nginx no lugar de Traefik, este é um exemplo equivalente para produção:
| |
Arquivo nginx/nginx.conf (base para alto volume de conexões):
| |
Dicas e Boas Práticas
1. Rate Limiting no Cloudflare: Configure limite de 100 requisições/IP/minuto. Isso bloqueia automaticamente bots agressivos antes de chegar ao seu servidor.
2. Manter Logs de Tráfego: Arquive os acessos em JSON para análise pós-ataque. Identifique padrões (IP origem, endpoint alvo, user-agent) para refinar regras futuras.
3. Teste Suas Defesas Regularmente: Uma vez ao mês, simule um DDoS leve (com ferramenta como
locustouab) e valide se alertas funcionam. Descobrir brechas em produção é caro.4. Redundância Geográfica: Se possível, distribua seu app em múltiplos datacenters. Um único DDoS não derruba tudo. Cloudflare oferece load balancing geográfico.
5. Comunicação com Provedor: Se contratar suporte premium (Cloudflare Pro/Business), avise sobre seu plano de mitigação. Eles podem ativar proteções extras de forma mais rápida.
Resumo Objetivo
TCP Syncookies — habilitar no kernel com
sysctl net.ipv4.tcp_syncookies=1para bloquear SYN Flood sem alocar memória de forma indiscriminada.File Descriptors no Docker — definir
ulimits.nofile.soft: 65000nodocker-compose.ymlpara aceitar até 60.000 conexões simultâneas durante ataque.Under Attack Mode (Cloudflare) — ativar manualmente em Security → Overview ou via API para forçar CAPTCHA em bots, bloqueando ~80% do tráfego malicioso.
Versão Fixa de Proxy — usar
image: traefik:v3.0.0em vez delatestpara evitar que bugs introduzidos em atualizações automáticas derrubem a aplicação sob carga.Novo Endereço IP — adicionar um IP secundário à VPS e usar exclusivamente internamente, deixando o antigo “preso” ao Cloudflare para isolar do atacante.
Monitoramento com Alertas — rastrear taxa de requisições, conexões TCP, memória e processos com Prometheus ou script bash simples; threshold crítico é > 10.000 req/min ou > 50.000 conexões TCP.
Leia Também
- Traefik em Docker: HTTPS, Segurança e Configuração — complementa este artigo com setup detalhado de proxy reverso
- Segurança em SPAs: BFF e API Gateway — proteja sua aplicação web além da infraestrutura
- Keycloak: Autenticação Grátis com Container e C# — adicione autenticação robusta para validar usuários legítimos
Referências
- Cloudflare Under Attack Mode — Documentação Oficial — guia completo sobre modo de ataque
- TCP Syncookies — Linux Kernel Documentation — RFC 4987 e implementação no kernel
- OWASP: DDoS Prevention Cheat Sheet — boas práticas de segurança
- Traefik v3 Official Documentation — referência completa de configuração
- Docker: Resource Limits and Reservations — documentação de ulimits no Docker Compose
- Linux sysctl Reference — file descriptors and TCP tuning — tuning de kernel para servidor web

Ao comentar, você concorda com nossa Política de Privacidade, Termos de Uso e Política de Exclusão de Dados.