Hushfort

Como limitar as tentativas de login no WordPress?

Por Eureka Studio · Atualizado em

Resposta rápida

O WordPress deixa qualquer pessoa adivinhar senhas para sempre. Para limitar as tentativas de login, use um plugin que conte os logins com falha por IP dentro de uma janela de tempo e bloqueie esse IP por um período: por exemplo, 8 falhas em 5 minutos significam 15 minutos de espera. Garanta que falhas de 2FA e de senhas da aplicação também contem e coloque seu próprio IP na lista de permissões.

Passo a passo

  1. 1Passo 1

    Veja como é a adivinhação sem limites

    Sem um limite, o WordPress responde a cada senha errada com o mesmo erro, quantas vezes for solicitado, e a mensagem padrão ainda confirma que o nome de usuário existe.

    Duas senhas erradas digitadas no formulário de login do WordPress; a cada vez o WordPress diz que a senha de demo-admin está incorreta e deixa passar a próxima tentativa
  2. 2Passo 2

    Ative os Limites de Login e defina as regras

    No WordPress, abra Hushfort → Limites e Restrições e ligue Ativar os limites de login. O padrão é 8 tentativas com falha em 5 minutos, seguidas de um bloqueio de 15 minutos; depois de 4 bloqueios em 24 horas, o bloqueio dura 1.440 minutos. Clique em Salvar alterações.

    Aba Limites e Restrições do Hushfort: limites de login ligados, mostrando 8 tentativas com falha permitidas, janela de tempo de 5 minutos e duração do bloqueio de 15 minutos
  3. 3Passo 3

    Libere seu próprio IP e confira a origem do IP

    Mais abaixo, defina a Origem do IP. "Automática (apenas cabeçalhos de proxy verificados)" serve para a maioria dos sites, inclusive os que estão atrás da Cloudflare. Depois, adicione o IP do seu escritório ou de casa em IPs na lista de permissões para nunca se trancar do lado de fora, e salve.

    Origem do IP definida como Automática (apenas cabeçalhos de proxy verificados) e 203.0.113.10 adicionado em IPs na lista de permissões
  4. 4Passo 4

    Receba um e-mail quando um IP for bloqueado

    Ligue o E-mail de alerta e informe um ou mais endereços, separados por vírgulas. A opção exige SMTP funcionando no site; sem ele, o Hushfort mantém a opção desligada e explica o motivo.

    E-mail de alerta ligado com dois endereços de alerta digitados e salvos
  5. 5Passo 5

    Veja o limite em ação

    Depois do número permitido de falhas, o IP é bloqueado em vez de ganhar outra tentativa. O Histórico lista cada bloqueio ativo com o nome de usuário tentado, o número de tentativas e quando o bloqueio termina, com um botão Desbloquear.

    Tela Histórico do Hushfort: Bloqueios ativos para três endereços IP com os nomes de usuário tentados, 8 tentativas cada e 15 minutos restantes, acima do histórico completo de tentativas com falha

Por que isso importa

Um ataque de força bruta é pura paciência: tenta uma senha, erra, tenta a próxima. O WordPress não se importa. Ele responde a mil tentativas erradas do mesmo endereço com a mesma educação da primeira. Se uma conta tem uma senha fraca ou reutilizada, é só uma questão de tempo.

Um limite de login muda a conta. Se um IP só pode fazer um punhado de tentativas antes de ter de esperar quinze minutos, adivinhar uma senha razoável leva anos em vez de horas. Isso também poupa seu servidor de renderizar a página de login repetidamente para um bot.

O que ele não cobre sozinho. Invasores que controlam milhares de endereços IP podem enviar poucas tentativas de cada um. Por isso, um limite de login funciona melhor junto com o login em dois fatores, que torna inútil uma senha adivinhada sem o código.

Erros comuns

  • Contar só o formulário de login. Senhas também podem ser testadas pelo xmlrpc.php, pelas senhas da aplicação da API REST e na etapa do código de dois fatores. Se essas tentativas não contam para o limite, os invasores simplesmente as usam. Feche também o login via XML-RPC; veja como desativar o XML-RPC com segurança.
  • Ler o IP errado atrás de um proxy. Se o seu site está atrás da Cloudflare e o plugin lê o endereço do proxy, um único bot pode bloquear todos os visitantes. Se, ao contrário, ele confia cegamente no cabeçalho X-Forwarded-For, um bot pode inventar um IP novo a cada requisição e nunca ser contado. A regra segura é confiar em cabeçalhos de proxy apenas quando a requisição realmente vem do proxy.
  • Bloqueios longos demais. Um bloqueio de 24 horas por três erros de digitação pune sua própria equipe. Mantenha o primeiro bloqueio curto e torne os bloqueios repetidos mais longos.
  • Sem lista de permissões. Adicione seu IP fixo para que uma senha esquecida nunca tranque você do lado de fora.

Sem plugin

O WordPress tem um hook, wp_login_failed, que é disparado após cada login com falha. Você pode contar as falhas com um transient e recusar logins quando a contagem for alta demais. Uma versão mínima para um plugin obrigatório (must-use) (wp-content/mu-plugins/login-limit.php):

<?php
add_action( 'wp_login_failed', function () {
    $key = 'll_' . md5( $_SERVER['REMOTE_ADDR'] );
    $n   = (int) get_transient( $key );
    set_transient( $key, $n + 1, 15 * MINUTE_IN_SECONDS );
} );

add_filter( 'authenticate', function ( $user ) {
    $key = 'll_' . md5( $_SERVER['REMOTE_ADDR'] );
    if ( (int) get_transient( $key ) >= 8 ) {
        return new WP_Error( 'too_many', 'Too many failed attempts. Try again later.' );
    }
    return $user;
}, 30 );

Funciona, mas seja honesto sobre o que fica de fora: ele lê apenas o REMOTE_ADDR, então atrás de um proxy conta o proxy; não conta como tentativas separadas os palpites feitos via multicall do XML-RPC; não tem lista de permissões, nem e-mail de alerta, nem registro. Cada um desses itens é mais código para escrever e manter.

Algumas hospedagens também oferecem ferramentas no nível do servidor, como o fail2ban monitorando o log de acesso. Isso é forte se a sua hospedagem o roda para você; em hospedagem compartilhada, normalmente você não consegue configurá-lo.

Se algo der errado

  • Você se trancou do lado de fora. Espere o bloqueio terminar, tente de outra rede, como os dados móveis, ou peça a outro administrador para adicionar seu IP à lista de permissões.
  • Todo mundo é bloqueado ao mesmo tempo. Seu site provavelmente está atrás de um proxy e o plugin está lendo o IP do proxy. Mude a configuração de origem do IP.
  • Os bloqueios nunca acontecem. Verifique se a origem do IP confia em um cabeçalho que os bots conseguem falsificar. Se cada tentativa mostra um "IP" diferente, essa é a causa.

Para todos os caminhos de volta, veja Sem acesso depois de mudar a URL de login.

Com o Hushfort

Os Limites de Login fazem parte do Hushfort Pro, o complemento que funciona sobre o Hushfort Security, o plugin de segurança gratuito para WordPress.

A camada Limites de Login do Hushfort conta os logins com falha por IP (ou por IP e nome de usuário) dentro de uma janela de tempo que você escolhe e bloqueia o IP pelo tempo que você escolher. Bloqueios repetidos em 24 horas podem acionar um bloqueio estendido, mais longo.

  • Códigos de dois fatores errados e logins com senha da aplicação que falham também contam, então não há porta lateral para a adivinhação.
  • Cabeçalhos de proxy só são considerados quando a requisição realmente vem da Cloudflare ou de uma rede privada.
  • Os e-mails de alerta vão para quantos endereços você listar.
  • Cada tentativa com falha ou bloqueada aparece em um Histórico filtrável.
  • A lista de permissões é compartilhada com todas as outras camadas do Hushfort, então você se adiciona uma única vez.

Desativar o Hushfort suspende todos os bloqueios existentes.

Perguntas frequentes

Quantas tentativas de login devo permitir?

O suficiente para uma pessoa que erra a digitação algumas vezes, e pouco o bastante para tornar a adivinhação inútil. Algo entre 5 e 10 falhas em poucos minutos, com bloqueio de 15 minutos, é um meio-termo tranquilo.

O WordPress limita as tentativas de login por padrão?

Não. O WordPress puro aceita logins com falha sem limite. Algumas hospedagens adicionam um limite no servidor, então vale perguntar à sua, mas não dá para contar com isso.

Um limite de login pode me trancar fora do meu próprio site?

Pode, se você continuar errando a senha. Adicione seu próprio IP à lista de permissões ou espere o bloqueio terminar. Outro administrador também pode adicionar seu IP à lista de permissões.

Limitar as tentativas de login basta para barrar a força bruta?

Deixa a adivinhação lentíssima, mas invasores com muitos endereços IP podem espalhar as tentativas. Combine com login em dois fatores, senhas fortes e o fechamento do login via XML-RPC.

Por que os bloqueios atingem as pessoas erradas atrás da Cloudflare?

Atrás de um proxy, todos os visitantes podem parecer vir do IP do proxy. Defina a origem do IP para que o plugin confie no cabeçalho do IP real, e somente quando a requisição realmente vier desse proxy.

Relatar um erro ou pedir um recurso

Sua mensagem vai direto para a equipe que desenvolve o Hushfort.

Sobre o que é?

Usado apenas para responder a você.

Usamos esses dados apenas para responder a você. Privacidade