Hushfort

¿Cómo limito los intentos de login (inicio de sesión) en WordPress?

Por Eureka Studio · Actualizado

Respuesta corta

WordPress deja que cualquiera adivine contraseñas sin fin. Para limitar los intentos de login, usa un plugin que cuente los accesos fallidos por IP dentro de un intervalo de tiempo y bloquee esa IP durante un rato; por ejemplo, 8 fallos en 5 minutos suponen 15 minutos de espera. Asegúrate de que los fallos de 2FA y de contraseñas de aplicación también cuentan, y añade tu propia IP a la lista de permitidas.

Pasos

  1. 1Paso 1

    Mira cómo es adivinar sin límite

    Sin límite, WordPress responde a cada contraseña incorrecta con el mismo error, tantas veces como se lo pidan, y el mensaje predeterminado incluso confirma que el nombre de usuario existe.

    Dos contraseñas incorrectas escritas en el formulario de acceso de WordPress; cada vez WordPress dice que la contraseña de demo-admin no es correcta y deja pasar el siguiente intento
  2. 2Paso 2

    Activa los Límites de acceso y fija las reglas

    En WordPress, abre Hushfort → Límites y restricciones y activa «Activar los límites de acceso». Por defecto son 8 intentos fallidos en 5 minutos y, después, un bloqueo de 15 minutos; tras 4 bloqueos en 24 horas, el bloqueo dura 1.440 minutos. Pulsa Guardar cambios.

    Pestaña Límites y restricciones de Hushfort: límites de acceso activados, con 8 intentos fallidos permitidos, intervalo de 5 minutos y duración del bloqueo de 15 minutos
  3. 3Paso 3

    Añade tu IP a la lista de permitidas y revisa el origen de la IP

    Más abajo, ajusta el Origen de la IP. «Automático (solo cabeceras de proxy verificadas)» encaja con la mayoría de los sitios, incluidos los que están detrás de Cloudflare. Después, añade la IP de tu oficina o de tu casa en IP permitidas para que nunca puedas quedarte fuera, y guarda.

    Origen de la IP en Automático (solo cabeceras de proxy verificadas) y 203.0.113.10 añadida en IP permitidas
  4. 4Paso 4

    Recibe un correo cuando se bloquee una IP

    Activa el Correo de alerta e indica una o varias direcciones, separadas por comas. El interruptor necesita que el sitio tenga SMTP funcionando; si no lo tiene, Hushfort mantiene la opción desactivada y te explica por qué.

    Correo de alerta activado con dos direcciones de alerta escritas y guardado
  5. 5Paso 5

    Mira cómo funciona el límite

    Tras el número de fallos permitido, la IP queda bloqueada en lugar de recibir otro intento. El Historial lista cada bloqueo activo con el nombre de usuario que probó, el número de intentos y cuándo termina el bloqueo, con un botón Desbloquear.

    Pantalla Historial de Hushfort: bloqueos activos de tres direcciones IP con los nombres de usuario que probaron, 8 intentos cada una y 15 minutos restantes, encima del historial completo de intentos fallidos

Por qué importa

Un ataque de fuerza bruta no es más que paciencia: probar una contraseña, fallar, probar la siguiente. A WordPress le da igual. Responderá a mil intentos fallidos desde la misma dirección con la misma cortesía que al primero. Si una cuenta tiene una contraseña débil o reutilizada, es solo cuestión de tiempo.

Un límite de accesos cambia las cuentas. Si una IP solo puede hacer unos pocos intentos antes de tener que esperar quince minutos, adivinar una contraseña decente lleva años en lugar de horas. Además, evita que tu servidor genere una y otra vez la página de acceso para un bot.

Lo que no cubre por sí solo. Los atacantes que controlan miles de direcciones IP pueden enviar unos pocos intentos desde cada una. Por eso un límite de accesos funciona mejor junto a la autenticación de dos factores, que hace inútil una contraseña adivinada si no se tiene el código.

Errores habituales

  • Contar solo el formulario de acceso. También se pueden probar contraseñas a través de xmlrpc.php, de las contraseñas de aplicación de la API REST y en el paso del código de dos factores. Si eso no cuenta para el límite, los atacantes simplemente lo usan. Cierra también el acceso por XML-RPC; consulta cómo desactivar XML-RPC de forma segura.
  • Leer la IP equivocada detrás de un proxy. Si tu sitio está detrás de Cloudflare y el plugin lee la dirección del proxy, un solo bot puede bloquear a todos los visitantes. Si, en cambio, confía a ciegas en la cabecera X-Forwarded-For, un bot puede inventarse una IP nueva en cada petición y no ser contado nunca. La regla segura es confiar en las cabeceras del proxy solo cuando la petición viene de verdad del proxy.
  • Bloqueos demasiado largos. Un bloqueo de 24 horas por tres erratas castiga a tu propio equipo. Mantén corto el primer bloqueo y alarga los bloqueos repetidos.
  • Sin lista de permitidas. Añade tu propia IP fija para que una contraseña olvidada no te deje nunca fuera.

Sin plugin

WordPress tiene un hook, wp_login_failed, que se dispara tras cada acceso fallido. Puedes contar los fallos con un transient y rechazar los accesos cuando la cuenta sea demasiado alta. Una versión mínima para un plugin de uso obligatorio (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, pero sé honesto sobre lo que se le escapa: solo lee REMOTE_ADDR, así que detrás de un proxy cuenta el proxy; no cuenta como intentos separados las contraseñas probadas con multicall de XML-RPC; y no tiene lista de permitidas, ni correo de alerta, ni registro. Cada una de esas cosas es más código que escribir y mantener.

Algunos hostings también ofrecen herramientas a nivel de servidor, como fail2ban vigilando el registro de accesos. Es sólido si tu hosting lo gestiona por ti; en un hosting compartido normalmente no puedes configurarlo.

Si algo sale mal

  • Te has bloqueado a ti mismo. Espera a que termine el bloqueo, prueba desde otra red, como los datos móviles, o pide a otro administrador que añada tu IP a la lista de permitidas.
  • Todo el mundo queda bloqueado a la vez. Seguramente tu sitio está detrás de un proxy y el plugin está leyendo la IP del proxy. Cambia el ajuste del origen de la IP.
  • Nunca se produce ningún bloqueo. Comprueba si el origen de la IP confía en una cabecera que los bots pueden falsificar. Si cada intento muestra una «IP» distinta, esa es la causa.

Para conocer todas las formas de volver a entrar, consulta Sin acceso después de cambiar la URL de acceso.

Con Hushfort

Los Límites de acceso forman parte de Hushfort Pro, el complemento de pago que se instala sobre Hushfort Security, el plugin de seguridad gratuito para WordPress.

La capa de Límites de acceso de Hushfort cuenta los accesos fallidos por IP (o por IP y nombre de usuario) dentro de un intervalo de tiempo que tú eliges, y bloquea la IP durante el tiempo que tú decidas. Los bloqueos repetidos en 24 horas pueden activar un bloqueo prolongado, más largo.

  • Los códigos de dos factores fallidos y los accesos fallidos con contraseñas de aplicación también cuentan, así que no queda ninguna puerta lateral para adivinar.
  • Solo se confía en las cabeceras del proxy cuando la petición viene de verdad de Cloudflare o de una red privada.
  • Los correos de alerta llegan a tantas direcciones como indiques.
  • Cada intento fallido y bloqueado aparece en un Historial filtrable.
  • La lista de permitidas se comparte con todas las demás capas de Hushfort, así que te añades una sola vez.

Al desactivar Hushfort se levantan todos los bloqueos existentes.

Preguntas frecuentes

¿Cuántos intentos de acceso debería permitir?

Los suficientes para alguien que se equivoca al escribir varias veces, y tan pocos que adivinar no tenga sentido. Entre 5 y 10 fallos en unos minutos, con un bloqueo de 15 minutos, es un término medio razonable.

¿WordPress limita los intentos de acceso por defecto?

No. El núcleo de WordPress acepta accesos fallidos ilimitados. Algunos hostings añaden un límite en el servidor, así que consúltalo con el tuyo, pero no puedes contar con ello.

¿Un límite de accesos puede dejarme fuera de mi propio sitio?

Puede, si te sigues equivocando. Añade tu propia IP a la lista de permitidas o espera a que termine el bloqueo. Otro administrador también puede añadir tu IP a la lista de permitidas.

¿Limitar los intentos de acceso basta para detener la fuerza bruta?

Ralentiza muchísimo los intentos, pero los atacantes con muchas direcciones IP pueden repartirlos. Combínalo con la autenticación de dos factores, contraseñas seguras y el cierre del acceso por XML-RPC.

¿Por qué los bloqueos afectan a quien no deben detrás de Cloudflare?

Detrás de un proxy, todos los visitantes pueden parecer venir de la IP del proxy. Ajusta el origen de la IP para que el plugin confíe en la cabecera de la IP real, y solo cuando la petición venga de verdad de ese proxy.

Informar de un error o pedir una función

Tu mensaje llega directamente al equipo que desarrolla Hushfort.

¿De qué se trata?

Solo lo usamos para responderte.

Usamos estos datos solo para responderte. Privacidad