WordPress Login: Proteger wp-admin y wp-login
WordPress Login: Proteger wp-admin y wp-login
Imagina que puedes ocultar o cerrar el acceso a la puerta que permite el acceso a tu casa. Es muy evidente que ganaríamos mucho en seguridad, ¿verdad? Pues lo mismo ocurre con WordPress, con la salvedad, de que aquí no tenemos que imaginarlo, podemos hacerlo. Y podemos hacerlo, porque los «ladrones» son muchos, y están constantemente probando a acceder a nuestra casa, sin que nadie haga nada por solucionarlo. Por lo tanto, tendremos que solucionarlo nosotros mismos. La seguridad del WordPress Login está en tu mano.
El acceso a WordPress se realiza desde /wp-admin o wp-login.php (Ambas opciones te llevan al mismo sitio), y esto es conocido por todos. Incluido aquellos scripts automatizados que pululan por la web buscando sitios a los que acceder. Esto, unido a que muchos servidores disponen de medidas de seguridad muy pobres, hacen que no sea extraño encontrarnos con atacantes que consiguen entrar «hasta la cocina» de nuestro WordPress.
En este KB, te vamos a mostrar dos formas de proteger tu wp-login.php.
Proteger wp-admin con contraseña
En este tutorial vamos a hacerlo para cPanel, dado que es el panel de control que utilizan todos nuestros servidores de hosting. No obstante, con otros paneles/proveedores el proceso es muy similar.
En cPanel, busca la opción «Privacidad del directorio». La encontrarás entre las opciones de «Archivo».

Al acceder, encontraremos una árbol de directorios, sobre el cual, podemos elegir cual queremos proteger. En este caso, nos iremos dentro de public_html y seleccionaremos wp-admin. Tras realizar la selección, una nueva pantalla nos pedirá los siguientes datos:

Marcamos la casilla de «La contraseña protege este directorio». Escribimos un nombre o frase que queramos que aparezca cuando el sistema solicite la contraseña al acceder en «Escriba un nombre para el directorio protegido», y posteriormente, indicamos el nombre de usuario y contraseña que permitirá el acceso al wp-login.
Tras darle a «Salvar» el servidor creará un usuario y contraseña que bloqueara el wp-admin. Si tratas de acceder tras realizar estos pasos, comprobarás que aparece lo siguiente:

Lo que acaba de hacer cPanel, básicamente, es crear un archivo .htaccess dentro de wp-admin (ruta /home/user/public_html/wp-admin/.htaccess), con el siguiente contenido:
1 2 3 4 | AuthName "Este es un mensaje aleatorio que podemos poner" AuthUserFile "/home/usuario/.htpasswds/public_html/wp-admin/passwd" AuthType Basic require valid-user |
¡¡IMPORTANTE!! Si en lugar de aparecer la ventana de login, nos aparece un error 404 o de demasiadas redirecciones, no te preocupes. La solución pasa por ir al .htaccess de nuestra instalación de WordPress, (No el mencionado anteriormente), (en la raíz, generalmente, dentro de public_html, ruta /home/user/public_html/.htaccess, fijate que en este caso, está un directorio por encima del anterior). Busca el archivo .htaccess y añade como primera línea, la siguiente:
1 | ErrorDocument 401 default |
Listo. Ya tenemos nuestro wp-admin protegido.
Permitir las solicitudes a elementos necesarios al WordPress Login
Aunque ya tengamos protegido el wp-admin, debemos realizar una serie de ajustes para que todo funcione de forma correcta. Uno de esos ajustes, es permitir el acceso a ciertas solicitudes. Por ejemplo, el API Ajax de WordPress, que se ejecuta en el archivo wp-admin/admin-ajax.php, estará bloqueado por la protección que hemos realizado anteriormente. Por lo tanto, cualquier plugin o tema que utilice esta API, no funcionará. Y lo mismo se aplica para wl admin-post.php. Pero no te preocupes.
La forma de solucionarlo es sencilla. Vamos a permitir las solicitudes a dichos archivos. Vamos a abrir el .htaccess generado por cpanel (recuerda, dentro de wp-admin, en la ruta /home/user/public_html/wp-admin/.htaccess), e introduce las siguientes líneas al principio.
1 2 3 4 | <filesmatch "(admin-ajax|admin-post)\.php"=""> Order allow,deny Allow from all Satisfy any |
Mediante lo anterior, hemos solucionado el acceso a elementos Ajax y Post. Pero hay determinadas imágenes, archivos CSS y javascript que se encuentran dentro de wp-admin, que podrían ser utilizadas en el front por algunos temas o plugins. Aunque no es lo habitual, no nos cuesta nada aplicar un ajuste para dejarlo todo funcionando como debe. Para ello, deberemos crear un .htaccess dentro de los siguientes directorios (uno por cada directorio):
wp-admin/css/.htaccess
wp-admin/js/.htaccess
wp-admin/images/.htaccess
En los tres .htaccess deberemos colocar el siguiente código:
1 2 3 | Order allow,deny Allow from all Satisfy any |
Proteger el archivo wp-login.php
Ya lo tenemos todo listo, pero seguimos teniendo una «puerta abierta» al WordPress Login. Si accedes al wp-login.php comprobaras que no te pide que te autentifiques. Por lo tanto, todo lo anterior, no sirve de mucho, si la puerta la tenemos visible en otra ruta lógica. Para cerrarlo también, simplemente debemos ir al .htaccess del directorio raiz (/home/user/public_html/.htaccess) y pegar el siguiente código, modificando el AuthUserFile por el tuyo. Este AuthUserFile es el mismo que encontrarás dentro del .htaccess generado por cPanel en la ruta (/home/user/public_html/wp-admin/.htaccess):
1 2 3 4 | AuthName "Este es un mensaje aleatorio que podemos poner" AuthUserFile "/home/usuario/.htpasswds/public_html/wp-admin/passwd" AuthType Basic require valid-user |
¡¡¡OJO!!! Hacemos hincapié en que es muy importante que cambies el AuthUserFile por el mismo que contiene el .htaccess que has generado con cPanel. No hagas un copia y pega de nuestro código, porque no te funcionará.
Si tienes alguna duda sobre como proteger tu WordPress Login, o podemos ayudarte, no dudes en comentar.