En esta entrada veremos cómo cambiar y proteger la página de login de WordPress paso a paso, ya que añadir todas las medidas de seguridad posibles en nuestro sitio WordPress es mucho más que recomendable, y personalizar la página de login debería ser una de las primeras acciones a realizar.
Tabla de contenidos
Antes de cambiar la página de login de WordPress
Si quieres seguir esta guía para cambiar y proteger la página de login de WordPress deberías partir de los siguientes requisitos básicos:
- Un sitio WordPress actualizado.
- Un usuario administrador del sitio.
- Conexión a Internet.
Si además alojas tu sitio WordPress con un servidor Apache bajo Linux:
- Acceso a consola de comandos con root o un usuario con permisos de sudo.
Cambiar la página de login de WordPress es una de las primeras tareas que se deben acometer cuando nos proponemos mejorar la seguridad de nuestro sitio WordPress.
Podrías pensar que teniendo una buena contraseña nadie será capaz de descubrirla por fuerza bruta, y en efecto así es. Pero una buena contraseña no impedirá las continuas visitas de usuarios maliciosos y bots que intenten averiguarla cientos de veces al día. Y, de hecho, cuanto más popular sea tu sitio web, más ataques recibirá.
Si puedes acceder a los archivos de registro o log del servidor web, busca cuántas veces y desde cuántos sitios se intenta acceder a la página /wp-login.php:
... 18.191.5.224 - - [21/Oct/2019:12:17:45 +0200] "GET /wp-login.php HTTP/1.1" 200 4837 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 18.191.5.224 - - [21/Oct/2019:12:17:46 +0200] "POST /wp-login.php HTTP/1.1" 200 5291 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 157.245.173.13 - - [21/Oct/2019:12:30:26 +0200] "GET /wp-login.php HTTP/1.1" 200 4837 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 157.245.173.13 - - [21/Oct/2019:12:30:26 +0200] "POST /wp-login.php HTTP/1.1" 200 5291 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 51.77.133.61 - - [21/Oct/2019:12:36:06 +0200] "GET /wp-login.php HTTP/1.1" 200 4837 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 51.77.133.61 - - [21/Oct/2019:12:36:06 +0200] "POST /wp-login.php HTTP/1.1" 200 5291 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 137.74.112.95 - - [21/Oct/2019:12:59:37 +0200] "GET /wp-login.php HTTP/1.1" 200 4837 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 137.74.112.95 - - [21/Oct/2019:12:59:38 +0200] "POST /wp-login.php HTTP/1.1" 200 5291 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 36.89.39.193 - - [21/Oct/2019:13:07:12 +0200] "GET /wp-login.php HTTP/1.1" 200 4837 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 36.89.39.193 - - [21/Oct/2019:13:07:13 +0200] "POST /wp-login.php HTTP/1.1" 200 5291 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 176.53.84.27 - - [21/Oct/2019:13:11:59 +0200] "GET /wp-login.php HTTP/1.1" 200 4837 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" 176.53.84.27 - - [21/Oct/2019:13:12:00 +0200] "POST /wp-login.php HTTP/1.1" 200 5291 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0" ...
Los atacantes cargan la página wp-login.php y realizan un intento de conexión, una y otra vez, 24 horas al día. Esto es mucho trabajo extra para tu servidor web y siempre existe la posibilidad de que alguna vez salte la liebre. Lo mejor en este caso es cambiar la página de login de WordPress, sustituyéndola por otra con un nombre personalizado y deshabilitando la original.
Cómo cambiar la página de login de WordPress
Por suerte para cambiar la página de login de WordPress existe un plugin perfecto. Entra en la sección de plugins de tu sitio WordPress, pulsa el botón «Añadir nuevo» y en la caja de búsqueda de la página «Añadir plugin» busca «WPS Hide Login«.
En primera posición de los resultados aparecerá el plugin «WPS Hide Login«, que instalaremos y activaremos como cualquier plugin nuevo.
Por defecto, el plugin cambia la ruta /wp-login.php por la ruta /login/. En este ejemplo entrábamos al sitio con la URL http://debian10.local/wordpress/wp-login.php y con el nuevo plugin la dirección de inicio de sesión cambia a http://debian10.local/wordpress/login/.
Esto está muy bien, el problema es que cambiamos un valor por defecto por otro valor por defecto. Los atacantes recibirán un error 404 de página no encontrada, que es justo lo que queremos, pero con el tiempo todos los bots incluirán esta nueva dirección de login de WordPress en su base de datos.
Afortunadamente, el plugin permite configurar una página de login totalmente personalizada, por lo que nos dirigiremos a los ajustes de WPS Hide Login, que en realidad es una nueva sección dentro de los ajustes generales:
En este ejemplo podemos ver que hemos variado la ruta de login por defecto del plugin por la ruta /la-puerta-grande/, esto quiere decir que para acceder al sitio debemos acceder a http://debian10.local/wordpress/la-puerta-grande/.
Guardaremos los cambios y cerraremos la sesión.
Probaremos a acceder de forma tradicional, como seguirán intentando los usuarios maliciosos, a través de la página /wp-login.php:
Perfecto, el atacante recibirá una página de error de WordPress y no tendrá la oportunidad de probar contraseña alguna.
Ahora vamos a probar qué ocurre si tratamos de acceder con la nueva ruta que configuramos en los ajustes del plugin, en este ejempo /la-puerta-grande/:
¡Ahí está! Ahora solamente tú sabes por dónde entrar a tu sitio WordPress. Conviene que uses una ruta fácil de recordar e, incluso, guardarla en los marcadores de tu navegador.
Prohibir el acceso a la página wp-login.php en Apache
Si usas Apache como servidor web y tienes acceso a su configuración, puedes hacer cosas más interesantes aún.
Con la configuración actual el ciclo que se sigue ante la petición de la página wp-login.php es el siguiente:
- Solicitud de la página /wp-login.php, usualmente por protocolo HTTP estándar.
- Normalmente, redirección a la página /wp-login.php por protocolo HTTPS seguro.
- Procesado de WordPress de la petición.
- Devolución de la página de error de WordPress.
Si tienes una buena configuración, será el servidor web el que redirija de protocolo HTTP a HTTPS, lo cuál es más eficiente que si se encarga de ello un plugin de WordPress. Pero el proceo ser sería aún mucho más eficiente si fuese el servidor web el que denegara la petición de esa página concreta.
Puedes hacerlo en la configuración general del servidor web, en la del servidor virtual en su caso, o en el archivo .htaccess del directorio de WordPress, añadiendo este bloque:
... <Files wp-login.php> Order deny,allow Deny from all </Files> ...
Recargar la configuración del servidor web para aplicar la nueva configuración (no es necesario si la configuración es a través de .htaccess).
Al intentar acceder de nuevo a la página /wp-login.php será en las primeras fases del ciclo anterior donde se detenga el proceso:
Ha sido el servidor web el que ha bloqueado el acceso, en una etapa temprana, sin intervención de WordPress, por lo que ahorrarás mucho tiempo de proceso, memoria RAM e incluso ancho de banda. Sin embargo, podrás entrar desde tu página personalizada sin problemas.
Bloquear con Fail2Ban a los atacantes de tu página de login de WordPress
Si tienes instalado Fail2Ban en tu servidor entonces sí que puedes hacer mucho más aún, ya que además de no permitir el acceso a la página de login de WordPress, podrás bloquear a esos usuarios maliciosos que insisten día tras día.
Crea un filtro llamado wp-login.conf en la carpeta de filtros de tu instalación de Fail2Ban con este contenido:
[Definition] failregex = ^<HOST> .*"GET .*\/wp-login\.php ^<HOST> .*"POST .*\/wp-login\.php ignoreregex =
Y crea una jaula como esta en el directorio de jaulas o en el archivo de configuración local:
[wp-login] enabled = true port = http,https filter = wp-login logpath = /ruta-de-logs-del-servidor-web/registro-de-accesos.log bantime = 864000 findtime = 3600 maxretry = 2
No olvides sustituir el valor de la directiva logpath por la ruta exacta del archivo de registro de accesos del servidor web (no confundir con el de registro de errores). En cuanto a número de intentos a tolerar, tiempo de bloqueo, etc. siéntete libre de usar los valores que prefieras.
Con la configuración del ejemplo el firewall bloqueará durante 10 días a cualquier dirección IP que intente acceder dos veces a la página /wp-login.php durante la última hora.
Recarga el servicio Fail2Ban con el filtro y la jaula nuevos y… ¡a bloquear se ha dicho!
Conclusión
Cambiar y proteger la página de login, y ocultarla al resto del mundo, es una de las mejoras de seguridad para proteger tu sitio WordPress que no debería quedar si realizar. Ahorrarás recursos y los atacantes no tendrán oportunidad de probar contraseñas. Ten en cuenta que los bots no se cansan ni se aburren.
En caso de dudas, sugerencias, preguntas, etc. puedes dejar un comentario.
Y si gracias a este tutorial de personalización y bloqueo de la página de login en WordPress has conseguido tu objetivo, que estoy seguro de que sí, si quieres agradecérmelo puedes hacerlo dejando una propina de 1 $ desde PayPal para una CocaCola:
O, si te sientes especialmente agradecido, puedes invitarme a un café:
¡Gracias!