Seguridad en WP: seguridad de wp-admin | cambiar la URL de acceso, limitar los intentos de inicio de sesión y XML-RPC
La seguridad de wp-admin son los ajustes que frenan los ataques de fuerza bruta que llegan por el panel de administración y la pantalla de acceso de WordPress. Al revisar los registros de acceso de un servidor Nginx + Apache con varios sitios WordPress, las solicitudes automáticas a xmlrpc.php seguían llegando incluso después de cambiar la URL de acceso, así que también apliqué un límite de velocidad en el servidor.
1️⃣ Por qué atacan wp-admin y wp-login.php
Que la dirección del panel de WordPress sea conocida es un punto débil, pero se puede compensar reforzando la seguridad. Todos los sitios WordPress usan el mismo /wp-admin/ y [wp-login.php], y al abrir /wp-admin/ sin sesión iniciada se pasa a la pantalla de acceso de [wp-login.php].
Los ataques llegan como fuerza bruta, probando una y otra vez usuarios y contraseñas en esta pantalla de acceso. Por eso, en la seguridad de wp-admin, frenar los intentos de acceso va antes que ocultar la dirección.
2️⃣ Efecto y límites de cambiar la URL de acceso
Al cambiar la URL de acceso con un plugin de seguridad, el [wp-login.php] predeterminado devuelve un 404, y los ataques automáticos que insisten en la dirección por defecto no llegan a la pantalla de acceso. La nueva dirección hay que comunicarla aparte a quien tenga una cuenta de administrador.
Este método requiere poco trabajo, pero si olvidas la nueva dirección no podrás entrar al panel y tendrás que renombrar la carpeta de ese plugin por FTP o con un gestor de archivos para desactivarlo. En un sitio que administran varias personas, conviene anotar la dirección en un solo lugar.
3️⃣ Limitar los intentos de acceso y la verificación en dos pasos
Aunque cambies la URL de acceso, si la nueva dirección se conoce, los intentos de adivinar contraseñas continúan. El núcleo de WordPress no limita los inicios de sesión fallidos, así que por muchas contraseñas erróneas que se introduzcan, vuelve a abrirse la misma pantalla.
Un plugin de límite de intentos bloquea durante un tiempo la IP que supera el número permitido, y la verificación en dos pasos pide además un código de la app de autenticación del móvil aunque la contraseña sea correcta. Al activarla, guarda también los códigos de respaldo por si pierdes el móvil.
4️⃣ Cerrar xmlrpc.php
[xmlrpc.php] es una segunda entrada que recibe usuario y contraseña sin pasar por la pantalla de acceso, y con el método [system.multicall] puede probar varias contraseñas en una sola solicitud.
Los registros de acceso de un servidor Nginx + Apache con varios sitios WordPress mostraron 2.250 solicitudes POST a [xmlrpc.php] entre las 0:00 y las 9:50 del 13 de octubre. Llegaron desde 22 IP y su User-Agent se hacía pasar por Jetpack y WordPress.com.
Si no usas la app móvil de WordPress ni Jetpack, bloquea las solicitudes a [xmlrpc.php] en la configuración de Nginx o usa el ajuste para desactivar XML-RPC de un plugin de seguridad.
# Dentro del bloque server — rechazar solicitudes a xmlrpc.php
location = /xmlrpc.php {
deny all;
}Con este ajuste, las solicitudes GET y POST a [xmlrpc.php] terminan todas en 403 sin llegar a PHP. La opción de desactivar XML-RPC de un plugin de seguridad solo rechaza las solicitudes que requieren acceso y el archivo sigue respondiendo, así que para reducir también las ejecuciones de PHP conviene bloquearlo en Nginx.
5️⃣ Bloquear en el servidor: restricción de IP para administrar y límite de velocidad
Si solo administras desde una IP fija, permitir [wp-login.php] y /wp-admin/ únicamente a esa IP en Nginx es el método más fiable. No sirve si la IP de tu casa u oficina cambia a menudo.
Bloquear todo /wp-admin/ puede parecer suficiente, pero funciones del lado del visitante como la búsqueda o el carrito suelen enviar solicitudes a [admin-ajax.php], así que ese archivo debe quedar abierto.
# Dentro del bloque server — encima del location de PHP
location = /wp-login.php {
allow 203.0.113.10; # IP fija desde la que administras
deny all;
# Copia aquí debajo la configuración del location de PHP
}Si abres [wp-login.php] desde una IP distinta de la permitida, sale un 403; desde la IP permitida se abre la pantalla de acceso. Dentro del location tienes que copiar tal cual la configuración de PHP del sitio (fastcgi_pass, etc.) para que la pantalla de acceso funcione con normalidad.
Si no puedes fijar la IP, puedes aplicar un límite de velocidad a las solicitudes PHP de visitantes sin sesión; el proceso de limitarlas a 30 por minuto para que las solicitudes automáticas no acaparen los recursos del servidor se explica en aviso de php-fpm max_children (artículo aparte).
# Bloque http — contar por IP solo las solicitudes sin cookie de sesión
map $http_cookie $php_anon_key {
default $binary_remote_addr;
"~*wordpress_logged_in" "";
}
limit_req_zone $php_anon_key zone=php_anon:10m rate=30r/m;
# Dentro del location de PHP
limit_req zone=php_anon burst=60 nodelay;
limit_req_status 429;Cuando una IP sin sesión envía solicitudes PHP seguidas, se atienden hasta la 61.ª y después se devuelve 429; las solicitudes con cookie de sesión no cuentan. Si la caché de páginas responde sin pasar por PHP, la navegación normal de los visitantes no llega a este límite.
Plugin de seguridad
Plugins de seguridad para WordPress: los 5 mejores
Una tabla comparativa de cinco plugins de seguridad destacados.
Acceso
Restablecer la contraseña de administrador olvidada
Cómo cambiar la contraseña en tu perfil y cómo restablecerla si la olvidas.
Herramientas
Generador de contraseñas aleatorias
Herramienta que crea contraseñas de 6 a 30 caracteres combinando mayúsculas, minúsculas, números y caracteres especiales.
ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.