Tutoriales

Cómo proteger xmlrpc.php en WordPress contra ataques de fuerza bruta

Guía Certificado de Seguridad SSL

¿Qué es xmlrpc.php y por qué es vulnerable?

El archivo xmlrpc.php es una interfaz de WordPress que permite interactuar con el sitio de forma remota, por ejemplo desde la app móvil, Jetpack, o servicios externos. Sin embargo, este archivo también es uno de los vectores más comunes para ataques de fuerza bruta, ya que permite múltiples intentos de inicio de sesión mediante llamadas automatizadas.

Los bots maliciosos pueden descubrir el nombre de usuario del administrador y lanzar ataques con múltiples contraseñas usando xmlrpc.php, muchas veces sin que el sitio lo bloquee de inmediato.

A continuación te explicamos cómo proteger este archivo de distintas formas, según tus necesidades.

Cómo desactivar xmlrpc.php si no lo necesitas

Si no utilizas servicios como Jetpack, publicaciones remotas o la app de WordPress, podés desactivar completamente xmlrpc.php con una línea de código en el archivo functions.php de tu tema o mediante un plugin personalizado.

Agregá este fragmento:

add_filter('xmlrpc_enabled', '__return_false');

Otra opción es instalar un plugin como Disable XML-RPC para desactivarlo sin tocar código.

Cómo bloquear xmlrpc.php desde el servidor

Si quieres asegurarte de que nadie acceda a xmlrpc.php, podés bloquearlo desde el servidor web.

Si usas Apache, agregá esto a tu archivo .htaccess:

<Files xmlrpc.php> Order allow,deny Deny from all </Files>

Si usas Nginx, agregá esto en tu configuración:

location = /xmlrpc.php {
deny all;
return 403;
}

Esto evita que cualquier solicitud externa llegue al archivo, lo cual es efectivo incluso antes de que WordPress procese la petición.

Cómo permitir solo ciertas IPs en xmlrpc.php

Si necesitás xmlrpc.php pero solo desde una IP específica (por ejemplo, una app de confianza), podés hacer una excepción.

Apache (en .htaccess): <Files xmlrpc.php> Order deny,allow Deny from all Allow from 123.456.78.90 </Files>

Nginx:

location = /xmlrpc.php {
allow 123.456.78.90;
deny all;
}

Reemplazá 123.456.78.90 por tu dirección IP real.

Cómo bloquear métodos peligrosos como pingback.ping

El método xmlrpc llamado pingback.ping es el más usado para ataques de denegación de servicio o escaneos de red. Podés bloquearlo con este código en functions.php:

add_filter('xmlrpc_methods', function($methods) {
unset($methods['pingback.ping']);
return $methods;
});

Esto deja xmlrpc.php habilitado para otros usos legítimos, pero desactiva una de sus funciones más vulnerables.

Cómo limitar xmlrpc.php con Fail2Ban

Si tu servidor guarda logs de accesos (por ejemplo en Apache o Nginx), puedes usar Fail2Ban para bloquear IPs que hagan muchas solicitudes a xmlrpc.php en poco tiempo.

Filtro para xmlrpc en /etc/fail2ban/filter.d/wordpress-xmlrpc.conf:

[Definition]
failregex = <HOST> -."(POST|GET) /xmlrpc.php HTTP/."
ignoreregex =

Regla en /etc/fail2ban/jail.local:

[wordpress-xmlrpc]
enabled = true
filter = wordpress-xmlrpc
action = iptables[name=WP-XMLRPC, port=http, protocol=tcp]
logpath = /var/log/apache2/access.log
maxretry = 5
findtime = 600
bantime = 86400

Esto bloquea IPs automáticamente si hacen más de 5 solicitudes en 10 minutos. Asegurate de ajustar logpath a la ruta real de tus logs.

Cómo evitar la exposición del nombre de usuario

Un paso clave para evitar ataques de fuerza bruta es impedir que los atacantes descubran el nombre del usuario administrador.

Bloqueá la URL ?author=1 y los perfiles públicos de autores con este código:

add_action('template_redirect', function() {
if (is_author() || (isset($_GET['author']) && is_numeric($_GET['author']))) {
wp_redirect(home_url(), 301);
exit;
}
});

También puedes restringir el acceso público a la REST API con este filtro:

add_filter('rest_authentication_errors', function($result) {
if (!empty($result)) return $result;
if (!is_user_logged_in()) {
return new WP_Error('rest_forbidden', 'REST API solo disponible para usuarios registrados', array('status' => 401));
}
return $result;
});

Plugins recomendados para proteger xmlrpc.php y el login

Si preferís una solución todo en uno con interfaz gráfica, estos plugins incluyen opciones para proteger xmlrpc.php:

Recuerda que usar varios plugins de seguridad a la vez puede causar conflictos, por lo que es mejor elegir uno principal y configurarlo correctamente.

Conclusión

Proteger xmlrpc.php en WordPress es una de las medidas más efectivas para reducir ataques de fuerza bruta. Ya sea que decidas desactivarlo, limitar su uso o reforzar su seguridad con plugins, es importante revisar regularmente los accesos y tomar acciones preventivas. Combina estas medidas con contraseñas seguras, autenticación en dos pasos y supervisión de logs para tener un sitio mucho más protegido.