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.