Instale um WAF (Web Application Firewall) com ModSecurity e OWASP CRS no Nginx ou Apache, ajuste falsos positivos e combine com o WAF da Cloudflare.

Para que serve

Um WAF (Web Application Firewall) analisa cada requisição HTTP antes de ela chegar ao seu site e bloqueia padrões típicos de ataque: SQL injection, XSS, inclusão de arquivos, varredura de vulnerabilidades e robôs maliciosos. Ele não corrige um sistema vulnerável, mas ganha tempo até a atualização e corta boa parte do ruído automatizado. Este artigo mostra duas formas de ter WAF: no próprio servidor, com ModSecurity + OWASP Core Rule Set (CRS), e na borda, com a Cloudflare.

Pré-requisitos

  • VM ou servidor com Debian 12/13 ou Ubuntu 24.04 rodando Nginx ou Apache.
  • Acesso root e um ambiente de teste (ou janela de manutenção): o WAF pode bloquear funções legítimas do site até ser ajustado.
  • Os logs de erro do servidor web acessíveis (/var/log/nginx/ ou /var/log/apache2/).

WAF local ou WAF na Cloudflare?

ModSecurity + CRS (local)Cloudflare (borda)
CustoGratuitoRegras gerenciadas básicas no plano gratuito; conjunto completo nos planos pagos
Consumo do servidorUsa CPU da VM em cada requisiçãoNenhum
ControleTotal, com logs detalhadosPelo painel da Cloudflare
Ponto fracoExige ajuste de falsos positivosSe o IP de origem vazar, o atacante contorna a Cloudflare

As duas camadas podem ser usadas juntas. Lembre que o AntiDDoS da infraestrutura protege contra volume de tráfego; o WAF trata o conteúdo das requisições.

Passo a passo: ModSecurity com OWASP CRS no Apache

  1. Instale os pacotes:
    sudo apt update
    sudo apt install libapache2-mod-security2 modsecurity-crs
  2. Ative a configuração recomendada:
    sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
    Ela vem em SecRuleEngine DetectionOnly: registra, mas não bloqueia. Deixe assim nos primeiros dias.
  3. Reinicie e confira o módulo:
    sudo apache2ctl configtest && sudo systemctl restart apache2
    sudo apache2ctl -M | grep security2

Passo a passo: ModSecurity com OWASP CRS no Nginx

  1. Instale o módulo e as regras:
    sudo apt install libnginx-mod-http-modsecurity modsecurity-crs
  2. Copie os arquivos de exemplo do pacote (o próprio pacote do Debian documenta isso no README.Debian):
    sudo cp /usr/share/nginx/modsecurity/modsecurity.conf /etc/nginx/
    sudo cp /usr/share/nginx/modsecurity/modsecurity_includes.conf /etc/nginx/
    sudo cp /usr/share/nginx/modsecurity/unicode.mapping /etc/nginx/
  3. Carregue o CRS: em /etc/nginx/modsecurity_includes.conf, descomente a linha que inclui /usr/share/modsecurity-crs/owasp-crs.load.
  4. Ative no site, dentro do bloco server:
    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsecurity_includes.conf;
  5. Teste e recarregue:
    sudo nginx -t && sudo systemctl reload nginx

O Debian 13 traz o CRS da série 3.3 nos repositórios. Se você precisar da série 4.x, baixe-a do projeto oficial em coreruleset.org e aponte os includes para a nova pasta.

Ajuste de falsos positivos e ativação do bloqueio

  1. Observe o log de auditoria por alguns dias navegando pelo site, usando o painel administrativo, enviando formulários e fazendo uploads:
    # Apache
    sudo grep -o 'id "[0-9]*"' /var/log/apache2/modsec_audit.log | sort | uniq -c | sort -rn | head
    # Nginx
    sudo grep -o 'id "[0-9]*"' /var/log/nginx/modsec_audit.log | sort | uniq -c | sort -rn | head
  2. Crie exclusões específicas para o que for legítimo, em vez de desligar o WAF. Exemplo: desligar uma regra só na área administrativa de um sistema:
    SecRule REQUEST_URI "@beginsWith /admin/editor" \
        "id:1000,phase:1,pass,nolog,ctl:ruleRemoveById=942100"
    Coloque essas exclusões em um arquivo carregado antes das regras do CRS.
  3. Mantenha o nível de paranoia 1 (padrão). Níveis mais altos pegam mais ataques, mas geram muito mais falsos positivos.
  4. Ative o bloqueio trocando em modsecurity.conf:
    SecRuleEngine On
    e recarregue o servidor web. Se preferir uma transição mais suave, ative o bloqueio com o limite de pontuação de anomalia alto e vá baixando até o padrão (5).

Passo a passo: WAF da Cloudflare

  1. Aponte o DNS do domínio para a Cloudflare e deixe o registro do site como Proxied (nuvem laranja).
  2. Em Security → WAF, ative as regras gerenciadas disponíveis no seu plano.
  3. Crie regras personalizadas, por exemplo: desafio (Managed Challenge) para /wp-login.php ou /administrator vindo de fora do Brasil, ou bloqueio de /xmlrpc.php.
  4. Feche a origem: no firewall da VM, aceite 80 e 443 apenas das faixas publicadas em https://www.cloudflare.com/ips/. Sem isso, quem descobrir o IP do servidor ataca direto, sem passar pelo WAF.
  5. No servidor web, restaure o IP real do visitante (módulo realip no Nginx ou remoteip no Apache), para que logs e ModSecurity vejam o cliente verdadeiro.
Cuidado ao fechar a origem: se o firewall bloquear tudo que não vem da Cloudflare, certificados emitidos por desafio HTTP, monitoramentos externos e webhooks podem parar. Mantenha o SSH e o painel liberados pela VPN e, se perder acesso, use o console noVNC do Proxmox ou o IPMI/iLO para desfazer a regra.

Como saber se funcionou

Faça uma requisição de teste inofensiva que o CRS reconhece como ataque:

curl -s -o /dev/null -w "%{http_code}\n" "https://www.exemplo.com.br/?id=1%20OR%201=1"

Com SecRuleEngine On, o retorno deve ser 403, e o log de auditoria deve registrar a regra disparada. Em DetectionOnly, o retorno é 200, mas o evento aparece no log. Na Cloudflare, o evento aparece em Security → Events.

Problemas comuns

  • Painel administrativo ou editor de páginas dá 403: falso positivo. Encontre o ID da regra no log e crie a exclusão para aquela URL.
  • Upload de arquivo grande falha: ajuste SecRequestBodyLimit em modsecurity.conf para o tamanho máximo que o site aceita.
  • Site ficou lento: o CRS inspeciona cada requisição. Exclua da análise arquivos estáticos e verifique se a VM tem CPU suficiente.
  • Todos os bloqueios mostram IPs da Cloudflare: falta configurar o IP real (realip/remoteip).

Perguntas frequentes

O WAF substitui atualizar o CMS e os plugins?

Não. O WAF reduz a exposição, mas ataques novos ou específicos passam. Atualização continua sendo a defesa principal.

Posso usar WAF com cPanel ou Plesk?

Sim. Os dois têm integração com ModSecurity e permitem ativar o OWASP CRS pelo próprio painel.

O WAF protege contra DDoS?

Contra ataques de volume, não; isso é papel da proteção AntiDDoS da rede. Contra abuso em camada 7 (muitas requisições ao login, por exemplo), regras de limite de taxa no WAF ou no Nginx ajudam.

Leitura complementar

Precisa de ajuda?

Se o site ficou fora do ar após ativar o WAF ou as regras de firewall e você não consegue acessar a VM, abra um ticket ou chame o suporte 24/7.

Esta resposta lhe foi útil? 0 Usuários acharam útil (0 Votos)

Leia também