Pular para o conteúdo
Início » Segurança » Proteger WordPress com Cloudflare WAF

Proteger WordPress com Cloudflare WAF

Aprenda a Proteger WordPress com Cloudflare WAF (Web Application Firewall) e reduzir a carga do seu servidor.

O WordPress possui muitas falhas conhecidas e devido ao uso de plugins em exagero é essencial proteger a instalação com um WAF.

O Cloudflare oferece esse serviço 100% gratuito e a vantagem é que ao ser bloqueado no WAF do cloudflare o request nem chega no seu servidor, então também ajuda no desempenho.

Proteção WAF para WordPress

Essas regras são específicas para quem utiliza wordpress, com alguns adicionais como filtro de visitas do Brasil.

(not http.host contains "exemplo.com.br")
or (http.request.uri.path contains "/wp-login.php")
or (http.request.uri.path contains "/wp-admin/" and http.request.uri.path ne "/wp-admin/admin-ajax.php")
or (http.request.uri.path contains "upload/" and not http.request.uri.path contains "/wp-content/")
or (http.request.uri.path contains "upload/" and not http.request.uri.path contains "/wp-includes/")
or ((http.request.uri.path contains ".php" and not http.request.full_uri contains "/wp-admin/")
or (http.request.uri.path contains "/wp-content/" and not http.referer contains "exemplo.com.br")
or (http.request.uri.path "/wp-includes/" and not http.referer contains "exemplo.com.br")
or (http.request.uri.path contains "/wp-content/" and http.request.uri.path contains ".php")
or (http.request.method eq "OPTIONS" and not http.request.uri.path contains "/wp-content/")
or (http.request.uri.path contains "/.")
or (http.request.method eq "POST" and http.referer ne "exemplo.com.br")
or (http.request.uri.path contains "/wp-admin/admin-ajax.php" and http.request.method eq "POST" and not http.referer contains "exemplo.com.br")
or (http.request.uri.path contains "/wp-comments-post.php" and http.request.method eq "POST" and not http.referer contains "exemplo.com.br")
or (http.request.uri.path in {"/wp-admin" "/wp-admin/"} and not http.cookie contains "wordpress_logged")
or (http.request.uri contains "wp-config.")
or (http.request.uri contains "setup-config.")
or (http.request.uri.path contains "/xmlrpc.php" and http.request.method eq "POST")
or (http.request.uri.query contains "author_name=")
or (http.request.uri.query contains "author=" and not http.request.uri.path contains "/wp-admin/export.php")
or (http.request.uri contains "/wp-json/wp/v2/users/")
or (http.request.uri.path contains "wp-" and http.request.uri.path in {".zip" ".asp" ".sql" ".gz" ".bak" ".tar"})
or (http.request.uri.path contains "/wp-admin/install.php")
regras waf wordpress cloudflare

Para aplicar, utilize o código abaixo:

(not http.host contains "siterapidowp.com.br") or (http.request.uri.path contains "/wp-login.php") or (http.request.uri.path contains "/wp-admin/" and http.request.uri.path ne "/wp-admin/admin-ajax.php") or (http.request.uri.path contains "upload/" and not http.request.uri.path contains "/wp-content/") or (http.request.uri.path contains "upload/" and not http.request.uri.path contains "/wp-includes/") or (http.request.uri.path contains ".php" and not http.request.full_uri contains "/wp-admin/") or (http.request.uri.path contains "/wp-content/" and not http.referer contains "siterapidowp.com.br") or (http.request.uri.path contains "/wp-includes/" and not http.referer contains "siterapidowp.com.br") or (http.request.uri.path contains "/wp-content/" and http.request.uri.path contains ".php") or (http.request.method eq "OPTIONS" and not http.request.uri.path contains "/wp-content/") or (http.request.uri.path contains "/.") or (http.request.method eq "POST" and http.referer ne "siterapidowp.com.br") or (http.request.uri.path contains "/wp-admin/admin-ajax.php" and http.request.method eq "POST" and not http.referer contains "siterapidowp.com.br") or (http.request.uri.path contains "/wp-comments-post.php" and http.request.method eq "POST" and not http.referer contains "siterapidowp.com.br") or (http.request.uri.path in {"/wp-admin" "/wp-admin/"} and not http.cookie contains "wordpress_logged") or (http.request.uri.path in {"/readme.html" "/wlwmanifest.xml" "license.txt"}) or (http.request.uri contains "wp-config.") or (http.request.uri contains "setup-config.") or (http.request.uri.path contains "/xmlrpc.php" and http.request.method eq "POST") or (http.request.uri.query contains "author_name=") or (http.request.uri.query contains "author=" and not http.request.uri.path contains "/wp-admin/export.php") or (http.request.uri contains "/wp-json/wp/v2/users/") or (http.request.uri.path contains "wp-" and http.request.uri.path in {".zip" ".asp" ".sql" ".bak" ".tar" ".log" ".rar" ".xz"}) or (http.request.uri.path contains "/wp-admin/install.php")

Lembre de substituir o URL exemplo.com.br por seu URL, para facilitar isso eu fiz uma planilha no google docs, para utilizar ela faça uma cópia.

Proteção WAF para qualquer site

Principalmente proteção contra BOTS, requisições que não sejam GET, HEAD e POST, URL de referência sem vazio…

(http.request.method in {"PUT" "PATCH" "DELETE"})
or (not http.request.method in {"GET" "HEAD" "POST"})
or (http.request.method eq "OPTIONS" and not http.request.uri.path contains "/wp-content/")
or (http.referer ne "" and not http.referer contains "http://" and not http.referer contains "https://" and not cf.client.bot)
or (http.request.uri.path contains "phpmyadmin")
or (http.request.uri.path contains "/cpanel")
or (http.request.uri.path contains "/install.php")
or (http.request.uri.path contains "/.htaccess")
or (not http.user_agent contains "Mozilla/5.0 (")
regras waf todos sites cloudflare

Para aplicar, utilize o código abaixo:

(http.request.method in {"PUT" "DELETE" "PATCH"}) or (not http.request.method in {"GET" "HEAD" "POST"}) or (http.referer ne "" and not http.referer contains "http://" and not http.referer contains "https://" and not cf.client.bot) or (http.request.uri.path contains "phpmyadmin") or (http.request.uri.path contains "/cpanel") or (http.request.uri.path contains "/install.php") or (http.request.uri.path contains "/.htaccess") or (not http.user_agent contains "Mozilla/5.0 (")

Regras de Rate Limiting

Essas regras limitam o acesso às áreas problemáticas do wordpress, em geral APIs e a busca, ajuste conforme o uso, coloquei 6 requests por cada 10 segundos e ficou bom.

or (http.request.uri.path contains "/?s=")
or (http.request.uri.path contains "/admin-ajax.php")
or (http.request.uri.path contains "/wp-json" and not http.request.uri.path contains "/wp-json/redirection/")
or (http.request.uri.path contains "/xmlrpc.php")
or (http.request.uri.path contains "/wp-login.php")
or (http.request.uri.path contains "?rest_route=/")
or (http.request.uri.path contains "/wp-cron.php")
regras rate limiting cloudflare wordpress

Para aplicar, utilize o código abaixo:

(http.request.uri.path contains "/?s=") or (http.request.uri.path contains "/admin-ajax.php") or (http.request.uri.path contains "/wp-json" and not http.request.uri.path contains "/wp-json/redirection/") or (http.request.uri.path contains "/xmlrpc.php") or (http.request.uri.path contains "/?rest_route=/") or (http.request.uri.path contains "/wp-login.php") or (http.request.uri.path contains "/wp-cron.php")

Atualizado para permitir que o plugin redirection funcione corretamente alterando a regra:

or (http.request.uri.path contains “/wp-json”)
para
or (http.request.uri.path contains “/wp-json” and not http.request.uri.path contains “/wp-json/redirection/”)

Regras de BOTS conhecidos

(cf.client.bot) or (http.request.uri.path in {"/robots.txt" "/ads.txt" "/sitemap.xml" "/sitemap_index.xml" "/post-sitemap.xml"})
regras bots conhecidos cloudflare

Ordens das regras

A ordem das regras é importante, pois as primeiras regras são processadas antes e pode ser que nem chegue a regra que permite se outra regras já bloqueio ela anteriormente.

Por isso a primeira regra é aceitar os bots conhecidos:

ordem regras cloudflare waf

Vou atualizar esse post sempre que aparecer uma nova vulnerabilidade que pode ser mitigada através de regras do WAF.

É importante lembrar que pode ser que algum plugin específico pode ficar bloqueado em uma dessas regras e impedir o funcionamento correto, nesse caso olhe a área de log do Cloudflare.

Marcações:

4 comentários em “Proteger WordPress com Cloudflare WAF”

  1. Olá, tudo bem?

    Antes de mais nada, parabéns pelo post e muito obrigado pela sua contribuição, pois me ajudou demais! Estava tendo problemas com ataques de bots e as configurações resolveram o problema.

    Gostaria apenas de tirar uma dúvida: na configuração para todos os sites, a ação recomendada é a mesma para WordPress, ou seja, Desafio Gerenciado?

    Mais uma vez agradeço e ficarei na expectativa.

    Forte abraço

Comentários

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *