Saltar al contenido principal

Prevenir Ataques de Fuerza Bruta en WordPress: Estrategias Efectivas para Proteger tu Sitio

6 min de lectura Actualizado el

ataques de fuerza bruta
Seguridad
Foto de Federico

Escrito por:

Federico

Ver contenido del artículo

Puntos clave

  • WordPress no limita por defecto los intentos de acceso: sin un plugin o regla de servidor, un bot puede probar indefinidamente.
  • XML-RPC permite agrupar cientos de intentos de autenticación en una sola petición y suele ser el vector real del ataque.
  • La 2FA convierte el ataque en inútil aunque el atacante acierte la contraseña.
  • Bloquear en el WAF o en el servidor evita el consumo de CPU y base de datos que provoca cada intento procesado por WordPress.

Un ataque de fuerza bruta es el intento sistemático y automatizado de adivinar las credenciales de acceso a tu sitio probando miles de combinaciones de usuario y contraseña. En WordPress tiene un objetivo casi siempre idéntico: wp-login.php. No requiere sofisticación ni conocer tu negocio; basta con un bot, una lista de contraseñas filtradas y tiempo. Esta guía recoge las medidas que realmente detienen ese tipo de ataque, ordenadas por impacto.

«WordPress no limita por defecto el número de intentos de acceso. Hasta que no añades esa restricción, un bot puede probar indefinidamente sin que nada lo detenga.»

¿Qué es un ataque de fuerza bruta en WordPress?

El atacante lanza peticiones repetidas contra el formulario de acceso combinando nombres de usuario probables —admin, el nombre del dominio, el autor que aparece en las entradas— con diccionarios de contraseñas procedentes de filtraciones anteriores. Cada intento fallido consume CPU, memoria y consultas a la base de datos, así que el ataque degrada el rendimiento del sitio aunque nunca llegue a acertar.

Por qué WordPress es un objetivo habitual

  • La ruta de acceso es predecible: /wp-login.php y /wp-admin están en el mismo sitio en millones de instalaciones.
  • Los nombres de usuario se filtran solos: el archivo de autor (/?author=1) y la API REST pueden revelar quién publica en el sitio.
  • XML-RPC amplifica el ataque: el método system.multicall permite agrupar cientos de intentos de autenticación en una única petición HTTP, lo que multiplica la velocidad del ataque y esquiva los contadores que solo vigilan el formulario de acceso.
  • No hay límite nativo de intentos: sin plugin ni regla de servidor, WordPress acepta tantas peticiones de acceso como reciba.

Señales de que estás sufriendo uno

  • Picos de intentos fallidos en el registro de accesos, con frecuencia desde muchas IP distintas.
  • Consumo elevado de CPU y memoria sin un aumento real de visitas.
  • Lentitud notable del panel de administración o errores de conexión con la base de datos.
  • Avisos de bloqueo de tu plugin de seguridad o correos de restablecimiento de contraseña que nadie ha solicitado.

Medidas para prevenir ataques de fuerza bruta

1. Limita los intentos de inicio de sesión

Es la medida de mayor impacto y la más sencilla. Configura un máximo de intentos fallidos por IP —entre tres y cinco— y un bloqueo temporal creciente: quince minutos tras el primer bloqueo, varias horas si el patrón se repite. La mayoría de plugins de seguridad lo incluyen, y existen extensiones específicas como Limit Login Attempts Reloaded o Loginizer.

Complementa el bloqueo por IP con un límite global de intentos fallidos por hora, ya que las botnets distribuyen el ataque entre miles de direcciones distintas para no superar nunca el umbral individual.

2. Elimina el usuario «admin» y refuerza las contraseñas

Si el nombre de usuario es predecible, el atacante solo tiene que resolver la mitad del problema. Crea un administrador con un nombre no evidente, transfiere el contenido y elimina la cuenta admin. Cambia además el nickname público para que el nombre de acceso no aparezca en las entradas.

Sobre las credenciales, la longitud es lo que encarece el ataque: por debajo de doce caracteres, una contraseña sin patrón sigue siendo abordable. Aplica contraseñas largas y únicas para todas las cuentas con acceso al panel y refuerza la política con un plugin que impida contraseñas débiles al registrarse.

3. Activa la autenticación de dos factores

El límite de intentos encarece el ataque; el segundo factor lo vuelve inútil. Aunque el atacante acierte la contraseña —por fuerza bruta o porque la obtuvo en una filtración—, sin el código temporal o la llave física no entra. Activa la autenticación de dos factores de forma obligatoria para administradores y editores, y guarda los códigos de recuperación fuera del dispositivo que genera los códigos.

Prioriza los códigos TOTP de una aplicación o, mejor aún, las llaves FIDO2/WebAuthn. El SMS es preferible a no tener segundo factor, pero es vulnerable al intercambio de SIM.

4. Protege o desactiva XML-RPC

XML-RPC es el vector real de buena parte de los ataques de fuerza bruta contra WordPress, porque permite encadenar cientos de comprobaciones de credenciales en una sola petición. Si no usas la aplicación móvil de WordPress, Jetpack ni publicación remota, desactívalo por completo. Si lo necesitas, mantenlo restringido por IP, deshabilita el método system.multicall y asegúrate de que tu firewall cuenta sus peticiones como intentos de acceso.

5. Cambia la URL de acceso al panel

Mover wp-login.php a una ruta personalizada no detiene a un atacante dirigido, pero elimina de golpe el ruido de los bots genéricos que solo prueban la ruta por defecto. El efecto práctico es una caída notable de carga en el servidor. Trátalo siempre como medida complementaria, nunca como sustituto del límite de intentos ni del segundo factor.

6. Filtra el tráfico antes de que llegue a WordPress

Cada intento que procesa WordPress cuesta PHP y consultas a la base de datos. Un firewall de aplicaciones web en la nube bloquea las peticiones maliciosas en el borde, antes de tocar tu servidor, y aplica reglas de reputación de IP que ningún plugin puede replicar. Para sitios con tráfico alto o ataques recurrentes, es la diferencia entre un incidente invisible y una caída del servicio.

7. Refuerza el acceso a nivel de servidor

Si controlas la configuración del servidor, añade una capa previa a WordPress:

  • Autenticación HTTP básica sobre wp-login.php: un usuario y contraseña adicionales gestionados por el servidor web, no por WordPress.
  • Restricción por IP del directorio /wp-admin cuando el equipo trabaja desde direcciones fijas o a través de VPN.
  • Limitación de peticiones (rate limiting) en Nginx o Apache sobre la ruta de acceso, que actúa aunque PHP esté saturado.
  • Fail2ban analizando los registros del servidor para banear en el cortafuegos las IP con intentos repetidos.

Monitorización y respuesta

Prevenir no basta si nadie mira. Configura alertas para los eventos que anticipan un compromiso: series de intentos fallidos, accesos correctos desde países o dispositivos inhabituales, creación de usuarios y cambios de rol. Un registro de actividad convierte un incidente invisible en un aviso accionable, y es la única forma de reconstruir después qué ocurrió y cuándo.

Si detectas que un ataque ha tenido éxito, actúa en este orden: cambia las contraseñas de todas las cuentas con privilegios, regenera las claves de seguridad (salts) de wp-config.php para invalidar las sesiones abiertas, revisa la lista de usuarios en busca de administradores que no hayas creado, escanea el sitio en busca de puertas traseras y solo entonces restaura una copia de seguridad anterior al incidente.

Errores frecuentes al proteger el acceso

  • Confiar solo en ocultar la URL de acceso. Reduce el ruido, no el riesgo real.
  • Bloquear por IP sin límite temporal. Las listas negras permanentes crecen sin control y acaban bloqueando a usuarios legítimos con IP dinámica.
  • Instalar dos plugins de seguridad con firewall. Compiten entre sí, generan falsos positivos y llegan a dejar fuera al propio administrador.
  • Dejar cuentas antiguas activas. Colaboradores que ya no participan siguen siendo una vía de entrada válida.
  • No probar la recuperación. Comprueba que puedes recuperar el acceso si pierdes el segundo factor antes de necesitarlo de verdad.

Reflexión final

Los ataques de fuerza bruta contra WordPress son constantes, automatizados e indiscriminados: no eligen a la víctima, eligen la puerta más fácil. La defensa eficaz no depende de una herramienta concreta, sino de superponer capas que encarecen el ataque en cada nivel: límite de intentos que frena al bot, credenciales largas que hacen inviable el diccionario, segundo factor que anula la contraseña acertada, XML-RPC cerrado que elimina la amplificación y filtrado en el borde que evita consumir recursos del servidor. Con esas cinco capas activas, el ataque deja de ser una amenaza y pasa a ser ruido registrado en un log.

Preguntas frecuentes

¿Cómo sé si mi WordPress está sufriendo un ataque de fuerza bruta?

Señales claras: picos de intentos fallidos en el registro de accesos, aumento de consumo de CPU y memoria sin más tráfico real, correos de bloqueo de tu plugin de seguridad y lentitud del panel de administración. Cualquier plugin con registro de actividad muestra el número de intentos fallidos por IP y por usuario.

¿Sirve cambiar la URL de inicio de sesión?

Ayuda, pero como medida complementaria. Mover wp-login.php a una ruta personalizada elimina el ruido de los bots genéricos que solo prueban la URL por defecto, lo que reduce carga en el servidor. No protege frente a un atacante dirigido, así que debe acompañarse siempre de límite de intentos y segundo factor.

¿Debo desactivar XML-RPC?

Si no usas la app móvil de WordPress, Jetpack ni publicación remota, desactivarlo es lo más seguro: elimina un vector que permite amplificar los intentos de autenticación. Si lo necesitas, mantenlo activo pero restringido por IP o protegido por el WAF, y limita los métodos de autenticación que expone.

¿Te resulta útil este contenido? Añadinos como fuente preferida en Google.