Proteger wp-admin contra ataques brute force em WordPress

Qualquer instalação WordPress exposta publicamente recebe tentativas de login automáticas. Bots varrem a Internet à procura de wp-admin e wp-login.php, testando combinações de credenciais em massa. A maioria destas tentativas é facilmente bloqueada — mas requer configuração activa. Este guia cobre as medidas mais eficazes, da mais simples à mais robusta.

Porque wp-admin é um alvo constante

O WordPress alimenta mais de 40% da web. A localização padrão do painel de administração (/wp-admin e /wp-login.php) é conhecida por todos os atacantes. Scripts automatizados testam milhares de combinações de username e password por hora sem intervenção humana.

O objectivo não é necessariamente roubar dados — muitas vezes é instalar malware para enviar spam, injectar conteúdo para SEO black hat, ou usar o servidor como ponto de ataque para outros sistemas. Mesmo sem sucesso, ataques brute force intensos consomem recursos do servidor e podem degradar a performance do site.

Medida 1: Limitar tentativas de login (essencial)

Por defeito, o WordPress permite tentativas de login ilimitadas. Limitar a 3–5 tentativas antes de bloquear o IP por X minutos elimina a maioria dos ataques automatizados.

Plugins recomendados:

  • Limit Login Attempts Reloaded — gratuito, leve, sem dependências. Define tentativas máximas e duração do bloqueio. Para a maioria dos sites, é suficiente.
  • Wordfence Security — inclui limitação de logins com regras mais avançadas (bloqueio por país, lista branca de IPs) como parte do pacote de segurança completo.

Medida 2: Autenticação de dois fatores (muito eficaz)

O 2FA elimina praticamente os ataques brute force — mesmo que o atacante descubra a password correcta, não consegue aceder sem o segundo factor. É a medida com melhor relação eficácia/esforço de implementação.

Para detalhes de implementação em contexto de agência, ver o artigo sobre WordPress 2FA em sites de clientes.

Medida 3: Bloquear wp-login.php por IP no .htaccess

Se apenas a agência precisa de aceder ao wp-admin, bloquear o acesso a todos os IPs excepto os da equipa é uma medida muito eficaz. Adicionar ao .htaccess:

<Files wp-login.php>
    Order Deny,Allow
    Deny from all
    Allow from 203.0.113.1
    Allow from 203.0.113.2
</Files>

Substituir os IPs pelos IPs fixos da equipa. Atenção: se a equipa usa IPs dinâmicos (maioria dos acessos residenciais), este método requer gestão activa ou uma VPN com IP fixo.

Medida 4: Alterar o URL de login

Mover o login para um URL não-padrão (/acesso-equipa em vez de /wp-login.php) elimina os ataques automatizados que dependem do URL padrão. Não é uma medida de segurança robusta por si só — é security through obscurity — mas reduz o volume de tentativas e logs.

Plugin: WPS Hide Login — leve, gratuito, sem conflitos conhecidos com plugins de segurança.

Atenção crítica: registar o novo URL antes de activar o plugin. Se o URL for esquecido, o acesso ao painel fica bloqueado e a recuperação requer acesso directo à base de dados.

Medida 5: Protecção HTTP Authentication no wp-admin

Adicionar uma camada de autenticação HTTP (password de servidor) antes do formulário de login do WordPress cria uma dupla barreira. Um atacante precisaria de ultrapassar a autenticação HTTP e depois a autenticação WordPress.

Configurar via cPanel (Protecção de Directórios com Password) ou via .htaccess com htpasswd. Esta medida pode causar problemas com o WP Cron e algumas APIs — testar em staging antes de aplicar em produção.

Medida 6: Cloudflare com regras de rate limiting

O Cloudflare gratuito não inclui rate limiting avançado, mas o plano Pro permite criar regras que bloqueiam automaticamente IPs que façam mais de X pedidos a /wp-login.php por minuto. Para sites com mais tráfego, o Cloudflare é uma das defesas mais eficazes a nível de infraestrutura.

A combinação recomendada para sites de clientes

Para a maioria dos sites de clientes, a combinação ideal é:

  1. Limit Login Attempts Reloaded (ou Wordfence) — impede brute force básico
  2. 2FA para utilizadores admin — elimina o risco mesmo em caso de password comprometida
  3. WPS Hide Login — reduz volume de tentativas nos logs
  4. Username não óbvio — evitar "admin", "administrator", ou o nome do site

Estas medidas eliminam mais de 99% dos vectores de ataque brute force sem impacto na experiência do cliente. Para um conjunto completo de medidas de hardening WordPress, ver o artigo sobre 10 medidas de hardening para sites de clientes.

Quer que auditemos a segurança dos sites dos seus clientes?

O nosso serviço de suporte WordPress inclui auditorias de segurança e implementação de medidas preventivas como as descritas neste artigo.

Auditar segurança WordPress