Protegendo seu WordPress com Cloudflare

Logo Cloudflare completo

Protegendo seu WordPress com Cloudflare, a segurança do WordPress é uma preocupação constante para donos de sites e administradores. Ataques DDoS, invasões por força bruta e bots maliciosos são ameaças comuns que podem comprometer o desempenho e a integridade do seu site. Felizmente, o Cloudflare oferece uma solução robusta para proteger e otimizar seu WordPress. Neste artigo, exploraremos como essa ferramenta pode blindar seu site e melhorar sua performance.

O que é o Cloudflare?

O Cloudflare é uma CDN (Content Delivery Network) e um serviço de segurança na nuvem que protege e acelera sites na internet. Ele atua como um intermediário entre os visitantes e o servidor de hospedagem, fornecendo camadas adicionais de segurança e otimizando o carregamento das páginas.

Benefícios do Cloudflare

  • Proteção contra ataques DDoS: Bloqueia tráfego malicioso automaticamente.
  • Firewall e regras personalizadas: Controle avançado sobre o acesso ao seu site.
  • Certificado SSL gratuito: Garante a segurança das conexões com HTTPS.
  • Proteção contra bots: Identifica e bloqueia atividades suspeitas.

Como Configurar o Cloudflare

Criar uma Conta no Cloudflare

Criar conta Cloudflare
  • Acesse Cloudflare.com e clique em Inscreva -se.
  • Insira seu email e crie uma senha segura.
  • Clique em Adicione um site no plano gratuito.

Adicionar Seu Site

  • No painel do Cloudflare, clique em Add.
  • Digite o domínio do seu WordPress (exemplo: meuwebsite.com).
  • Escolha o plano gratuito para começar.

Alterar os Nameservers no Registro do Domínio

  • O Cloudflare fornecerá novos nameservers.
  • Acesse o painel do seu provedor de domínio (ex: GoDaddy, Namecheap, Hostgator, Hostinger).
  • Substitua os nameservers antigos pelos novos fornecidos pelo Cloudflare.

Agora vamos adicionar o seu servidor no DNS da Cloudflare

  • Acesse DNS no Menu Esquerdo
  • Acesse Records
  • Crie os Registros necessários

Deixe o Proxy Status como DNS Only nesse primeiro momento! E em sua hospedagem gere um certificado Digital para seu domínio.

Após o certificado gerado! Habilite o Proxy Status para Proxied.

Quando você habilita o status “Proxied” no Cloudflare, o tráfego para o seu domínio passa a ser roteado através da infraestrutura do Cloudflare, trazendo diversas vantagens e melhorando a segurança do WordPress:

  • Proteção contra Ataques DDoS: O Cloudflare filtra o tráfego antes que ele chegue ao seu servidor, protegendo contra ataques de negação de serviço (DDoS).
  • Esconde o IP real do servidor: Em vez de expor diretamente o IP do seu servidor de hospedagem, o Cloudflare atua como intermediário, dificultando ataques diretos.
  • CDN e Cache Automático: O Cloudflare armazena e distribui conteúdos estáticos do seu site (como imagens, CSS, JavaScript) em servidores globais, melhorando o tempo de carregamento.
  • HTTPS e Certificado SSL do Cloudflare: Se ativado, o tráfego pode ser criptografado usando um SSL gerenciado pelo Cloudflare, sem a necessidade de configurar um SSL no seu servidor.
  • Firewall e Regras de Segurança: Você pode definir regras no Firewall do Cloudflare para bloquear acessos maliciosos, bots, países específicos, entre outras configurações avançadas.
  • Modo “Under Attack”: Se ativado, o Cloudflare pode exibir uma página de verificação antes de permitir o acesso ao site, útil em situações de tráfego malicioso.

Cuidados

  • Configuração DNS errada pode causar indisponibilidade: Se houver erro na configuração, pode resultar em problemas de acesso ao site.
  • Alterações no servidor podem levar tempo para propagar: Como o Cloudflare faz cache de conteúdos, mudanças no site podem demorar a aparecer sem limpar o cache manualmente.
  • Serviços que dependem do IP real podem falhar: Se você usa serviços que exigem o IP real do visitante, pode ser necessário configurar as opções de logs para recuperar esse dado.

Agora iremos Configurar a Parte de SSL/TLS e habilitar o SSL Full (Strict)
No canto esquerdo SSL/TLS

O Cloudflare oferece diferentes modos de criptografia SSL/TLS, cada um com um nível específico de segurança e requisitos no servidor de origem. Aqui está uma explicação detalhada de cada modo:

Off (Not Secure)

  • O tráfego entre o navegador do visitante e o Cloudflare NÃO é criptografado.
  • O tráfego entre o Cloudflare e o servidor de origem também NÃO é criptografado.
  • Os visitantes verão um aviso de site inseguro nos navegadores, podendo gerar desconfiança e perda de acessos.
  • Esse modo NÃO é recomendado, pois expõe o tráfego a ataques de interceptação (MITM – Man-in-the-Middle).

Flexible (Padrão em algumas contas Cloudflare)

  • O tráfego entre o navegador do visitante e o Cloudflare é criptografado com HTTPS.
  • O tráfego entre o Cloudflare e o servidor de origem NÃO é criptografado (HTTP).
  • O visitante vê um cadeado verde no navegador, mas a conexão entre Cloudflare e o servidor de origem NÃO é segura.
  • Se o site já suporta HTTPS, NÃO USE ESSE MODO!
  • Problemas: Pode gerar redirecionamentos infinitos se o servidor de origem tentar forçar HTTPS.

Full

  • O tráfego entre o navegador do visitante e o Cloudflare é criptografado (HTTPS).
  • O tráfego entre o Cloudflare e o servidor de origem também é criptografado (HTTPS).
  • O servidor pode ter qualquer certificado SSL, mesmo autoassinado.
  • O Cloudflare NÃO valida se o certificado do servidor é confiável.
  • O uso de certificados autoassinados pode permitir conexões HTTPS inseguras.

Full (Strict)

  • O tráfego entre o navegador do visitante e o Cloudflare é criptografado (HTTPS).
  • O tráfego entre o Cloudflare e o servidor de origem também é criptografado (HTTPS).
  • O Cloudflare SOMENTE aceita certificado SSL válido, como Let’s Encrypt ou um certificado de uma autoridade certificadora confiável no servidor de origem.
  • Certificados autoassinados não são aceitos!
  • Se você gerou e instalou um Cloudflare Origin CA Certificate no servidor de origem.

Strict SSL (SSL-Only Origin Pull)

  • O tráfego entre o navegador do visitante e o Cloudflare é criptografado (HTTPS).
  • O tráfego entre o Cloudflare e o servidor de origem é criptografado e obrigatório.
  • O servidor de origem só aceita conexões do Cloudflare!
  • Requer um certificado válido (público ou do Cloudflare Origin CA) instalado no servidor de origem.

Configurando Edge Certificates para Maior Segurança

Habilitar Always Use HTTPS

  • No painel do Cloudflare, vá para SSL/TLS > Edge Certificates.
  • Encontre a opção Always Use HTTPS e ative-a.
  • Isso garante que todas as conexões com seu site sejam redirecionadas automaticamente para HTTPS, melhorando a segurança e evitando ataques man-in-the-middle.

Habilitar HTTP Strict Transport Security (HSTS)

  • Ainda em SSL/TLS > Edge Certificates, localize HTTP Strict Transport Security (HSTS).
  • Clique em Enable HSTS (Atenção: certifique-se de que seu site já está funcionando corretamente com HTTPS antes de ativar).

Configure as opções:

  • Max Age: 6 meses (pode ser aumentado para 1 ano posteriormente).
  • Include Subdomains: Ativado.
  • Preload: Ativado.
  • No-Sniff Header: Ativado

Definir a Versão Mínima do TLS para 1.2 ou Superior

  • Ainda em SSL/TLS > Edge Certificates, localize Minimum TLS Version
  • Isso garante que conexões inseguras usando versões antigas do TLS não sejam aceitas.

Se o WordPress ainda não estiver instalado, este é o momento ideal para fazê-lo antes de continuar com as configurações.

Criando Regras no WAF para Proteger seu WordPress

Agora que o WordPress está instalado e com o Cloudflare configurado, podemos reforçar a segurança criando regras no WAF (Web Application Firewall). Embora nenhuma ação de segurança seja 100% eficaz, podemos aumentar significativamente a dificuldade para invasores, reduzindo as superfícies de ataque e mitigando ameaças antes que alcancem o servidor.

Criando Regras Essenciais no WAF

  • No painel do Cloudflare, acesse Security > WAF
  • Clique em Custom rules -> +Create Rule para adicionar novas regras personalizadas.

Regra BlockAdmAccess

Essa regra bloqueia acessos não autorizados a áreas sensíveis do WordPress, permitindo apenas o acesso do IP autorizado (“Seu_IP”). Se outro IP tentar acessar, será bloqueado automaticamente.

Expression

(http.request.uri.path contains "/wp-json" and ip.src ne Seu_IP) 
or (http.request.uri.path contains "/wp-login.php" and ip.src ne Seu_IP) 
or (http.request.uri.path contains "/wp-admin/" and http.request.uri.path ne "/wp-admin/admin-ajax.php" and http.request.uri.path ne "/wp-admin/theme-editor.php" and ip.src ne Seu_IP) 
or (http.request.uri.path contains "/wp-cron.php" and ip.src ne Seu_IP)

/wp-json

  • Bloqueia acessos externos à API REST do WordPress, que pode expor informações sensíveis.
  • Plugins e funcionalidades legítimas podem depender dessa API, então é importante testar antes de ativar.

/wp-login.php

  • Bloqueia a página de login para qualquer IP que não seja o permitido.
  • Reduz drasticamente ataques de força bruta contra o painel administrativo.

/wp-admin

  • Bloqueia qualquer tentativa de acesso ao diretório administrativo.
  • Exceções para /wp-admin/admin-ajax.php e /wp-admin/theme-editor.php
    • Plugins e funcionalidades que usam AJAX continuem funcionando.
    • O editor de temas permaneça acessível, caso necessário.

/wp-cron.php

  • Bloqueia acessos não autorizados ao sistema de agendamento do WordPress, evitando abuso por bots.

Personalizando a Regra

  • Substitua "Seu_IP" pelo IP que terá permissão para acessar o painel.
  • Para descobrir seu IP, acesse WhatIsMyIP e copie o endereço exibido.

Copie a expressão e cole no Edit expression

Não se esqueça de habilitar a regra

Vamos criar uma nova regra para proteger seu WordPress

Regra LockWPFiles

Essa regra tem o objetivo de proteger arquivos sensíveis do WordPress contra ataques, exploração e execução maliciosa de scripts.

Expression

(http.request.uri contains "/xmlrpc.php" and ip.src ne Seu_IP) or (http.request.uri.path contains "/wp-content/" and not http.referer contains "lluciox.space" and http.request.uri.path contains ".php") or (http.request.uri.path contains "/wp-includes/" and not http.referer contains "lluciox.space" and http.request.uri.path contains ".php") or (http.request.uri.path contains "/wp-content/uploads/" and http.request.uri.path contains ".php")

xmlrpc.php (Prevenção de Ataques Remotos)

  • Bloqueia acessos ao xmlrpc.php, que é frequentemente usado em ataques de força bruta e DDoS amplificados.
  • Apenas o IP autorizado (Seu_IP) pode acessá-lo, caso seja necessário para serviços como Jetpack ou aplicativos móveis.

/wp-content

  • Impede a execução direta de arquivos PHP dentro do diretório /wp-content/, evitando que invasores executem códigos maliciosos.
  • Permite apenas requisições feitas pelo próprio site (lluciox.space).”Coloque seu Site no lugar de lluciox.space
  • Protege contra ataques que tentam acessar arquivos PHP dentro de plugins e temas.

/wp-includes

  • Impede a execução direta de arquivos PHP dentro do diretório /wp-includes/, que contém arquivos essenciais do WordPress.
  • Evita exploração de vulnerabilidades em arquivos internos do WordPress.

/wp-content/uploads/

  • Bloqueia a execução de arquivos PHP dentro da pasta de uploads, prevenindo que um invasor faça upload de um shell malicioso e o execute no servidor.
  • Essa é uma proteção fundamental contra backdoors e web shells.
Protegendo seu WordPress - Ação de Bloqueio Cloudflare

Vamos criar uma nova regra para proteger seu WordPress

GEO & VPN BLOCK – Restrição de Acesso por Continente e País

Bloquear acessos por geolocalização (GEO BLOCK) é uma estratégia eficaz para reduzir riscos de ataques, especialmente quando sabemos que um site ou sistema não precisa ser acessado globalmente.

  • Muitas redes de bots e ataques de força bruta vêm de certas regiões conhecidas por tráfego malicioso.
  • Regiões com alto índice de ataques podem ser bloqueadas para evitar exploração de falhas em WordPress, APIs e sistemas web.
  • Alguns ataques como carding, scraping e bruteforce são frequentes em determinados países.

Expression

(ip.geoip.continent in {"AS" "AF"}) or (ip.geoip.country in {"IE" "TR"}) or (ip.geoip.asnum in {9009 20473 16509 16276 62785}) or (cf.client.bot) or (cf.threat_score gt 10)

Caso você queira, podemos dar uma melhorada na regra liberando os bot’s de indexação
Lembrando essas regras devem ser otimizadas conforme sua necessidade!

(ip.geoip.continent in {"AF" "AS" "T1"} and not ip.src.country in {"US"}) or (cf.client.bot and not http.user_agent contains "ChatGPT-User" and not http.user_agent contains "OAI-SearchBot" and not http.user_agent contains "Googlebot" and not http.user_agent contains "bingbot" and not http.user_agent contains "DuckDuckBot" and not http.user_agent contains "Yahoo! Slurp" and not http.user_agent contains "YandexBot" and not http.user_agent contains "BaiduSpider" and not http.user_agent contains "FacebookExternalHit" and not http.user_agent contains "Twitterbot" and not http.user_agent contains "LinkedInBot" and not http.user_agent contains "Slackbot" and not http.user_agent contains "TelegramBot" and not http.user_agent contains "AhrefsBot" and not http.user_agent contains "SemrushBot" and not http.user_agent contains "MJ12bot" and not http.user_agent contains "Google-PageSpeed" and not http.user_agent contains "Archive.org_bot" and not http.user_agent contains "Google Favicon" and not http.user_agent contains "UptimeRobot" and not http.user_agent contains "PingdomBot" and not http.user_agent contains "PerplexityBot" and not http.user_agent contains "Applebot" and not http.user_agent contains "meta-externalagent" and not http.user_agent contains "Chrome-Lighthouse" and not http.user_agent contains "Google-InspectionTool" and not http.user_agent contains "GPTBot" and not http.user_agent contains "GoogleOther" and not http.user_agent contains "wpbot" and not http.user_agent contains "Instagram") or (ip.src.country in {"IE" "RU"})

Bloqueios de Geolocalização

  • Bloqueia tráfego de África (AF) e Ásia (AS).
  • Impede acessos da Irlanda (IE) e Turquia (TR).
  • Bloqueia ASN conhecidos por tráfego de VPNs e serviços de anonimato.
  • Bloqueia bots conhecidos do Cloudflare.
  • Impede acessos de IPs que o Cloudflare considera potencialmente maliciosos.
ASNProvedorMotivo de Bloqueio
9009M247 LtdUsado por VPNs, proxies e ataques de bots
20473Choopa LLC (Vultr)VPS usadas para ataques DDoS
16509Amazon AWSMáquinas virtuais utilizadas para scrapers e ataques
16276OVH SASHospeda muitos serviços de VPN e ataques de brute force
62785DigitalOceanFornece servidores para scanners e pentesters

Vamos criar uma nova regra para proteger seu WordPress

User-agents Block

Essa regra bloqueia requisições HTTP com User-Agents amplamente utilizados por ferramentas de pentest, varredura, ataques e automação de requisições. Ao filtrar User-Agents conhecidos, reduzimos a superfície de ataque e dificultamos a ação de scanners automatizados. Além disso, bloqueia acessos à rota /cdn-cgi/trace, que pode ser explorada para coletar informações sobre o servidor Cloudflare.

Embora um atacante possa modificar o User-Agent para algo legítimo (ex: "Mozilla/5.0"), essa regra continua sendo útil por vários motivos:

  • Bloqueia Ferramentas Automáticas: Muitos scanners e bots maliciosos rodam com seus User-Agents padrão. Essa regra impede a execução de ataques automatizados de usuários inexperientes ou bots sem personalização.
  • Redução de Ruído nos Logs: Com essa filtragem, reduzimos o número de requisições suspeitas nos logs, facilitando a identificação de ataques mais sofisticados.
  • Dificulta Testes Rápidos: Atacantes iniciantes podem não perceber imediatamente que estão sendo bloqueados, o que os força a adotar métodos manuais, tornando o ataque mais demorado e perceptível.

Expression

(http.user_agent contains "wpscan")
or (http.user_agent contains "python") 
or (http.user_agent contains "perl") 
or (http.user_agent contains "nmap") 
or (http.user_agent contains "sqlmap") 
or (http.user_agent contains "fuzzer") 
or (http.user_agent contains "crawler") 
or (http.user_agent contains "scraper") 
or (http.user_agent contains "masscan") 
or (http.user_agent contains "nikto") 
or (http.user_agent contains "acunetix") 
or (http.user_agent contains "metasploit") 
or (http.user_agent contains "curl") 
or (http.user_agent contains "wget") 
or (http.user_agent contains "hydra") 
or (http.user_agent contains "go-http-client") 
or (http.user_agent contains "java") 
or (http.user_agent contains "ruby") 
or (http.request.uri.path contains "/cdn-cgi/trace")

Lembre-se: Nenhuma regra de segurança é infalível, mas quanto mais camadas de proteção aplicamos, mais difícil se torna para um atacante explorar vulnerabilidades e você vai proteger seu WordPress.

Gostou do conteúdo? Então compartilhe com outros profissionais e ajude a disseminar boas práticas de segurança! Tem alguma sugestão ou dúvida? Entre em contato. Vamos juntos tornar a web mais segura!

Foto Leandro Lucio | Perito Lucio

Leandro Lucio

Especialista em Cyber Security & Digital Forensics, com mais de 15 anos de experiência. Certificado CEH, Pentester, Forense Digital. Atuo em testes de intrusão, análise forense, investigação de ameaças, resposta a incidentes e gestão de vulnerabilidades, ajudando a fortalecer a segurança e mitigar riscos cibernéticos. Compartilho conhecimento no meu blog:
🔗 peritolucio.com.br 🔗 Leandro Lucio | LinkedIn