Protege tu backend de WordPress, wp-admin, con contraseña adicional en .htaccess

En informática siempre decimos que no hay un método de seguridad infalible. Que lo importante es añadir «capas de seguridad». Es la suma de capas lo que securiza mejor el sistema. Hoy vamos a enseñaros a añadir otra más a vuestra web en WordPress: una contraseña adicional en tu backend (wp-admin o incluso wp-login si no tienes usuarios que usen el backend).

Proteger el backend de WordPress, wp-admin, con contraseña usando htaccess.

La idea es usar este artículo para generar dos cosas:

  • un fichero .htpasswd que contenga un usuario y una contraseña encriptada. Puedes usar la web en el artículo para generarlo. Este fichero hay que ponerlo FUERA de la web, en un directorio al que el servidor pueda acceder pero que no sea público (en home o en cualquier otro).
  •  Un fichero .htaccess que debe llamar al fichero anterior, y que guardaremos en el directorio wp-admin de nuestra web (importante, no es el fichero .htacess de la raíz). De esta manera, cuando alguien escriba en el navegador tudominio/wp-admin el fichero htaccess verá que necesita usuario y contraseña, y abrirá una ventana solicitándolo. Comprobará lo que introduzcas con el fichero htpasswd.

Parece un poco lata, porque habrá 2 identificaciones (usuario y contraseña de htaccess y usuario y contraseña de WordPress). Pero recordad que significa que tenéis 2 «verjas» en el panel de administración de vuestra web. Además, este primer método elimina buena parte de los ataques de fuerza bruta a la web.

El fichero htaccess en el directorio wp-admin será algo como esto (puede variar):

AuthType Basic
AuthName "Acceso restringido con contraseña"
AuthUserFile "/home/user/.htpasswds/public_html/wp-admin/passwd"
require valid-user

La ruta del AuthUserFile puede ser la que querías. Por ejemplo /home/user/pepe/passswordsweb

Arreglos extra que hay que añadir.

Esta protección extra rompe alguna funcionalidad que puede (y puede que no) tenga tu tema. Rompe la API Ajax de WordPress. También las peticiones GET/POST.
Para arreglarlo tenemos que editar el fichero .htaccess creado en el directorio wp-admin (el que acabamos de crear) y añadir:

<FilesMatch "(admin-ajax|admin-post)\.php">
	Order allow,deny
	Allow from all
	Satisfy any
</FilesMatch>

Para que permita estas solicitudes.

Proteger wp-login con contraseña.

Sin no tienes usuarios que deban acceder a tu backend puede interesarte también proteger wp-login. No puedes hacerlo igual que en el caso anterior porque, en este caso, no es un directorio sino un fichero. Pero es similar, y también protege el admin (que es un login)

Tienes que editar el .htaccess del directorio raíz de tu web, el que crea WordPress y añadir:

# Stop Apache from serving .ht* files
<Files ~ "^\.ht">
  Order allow,deny
  Deny from all
</Files>
# Protect wp-login.php
<Files wp-login.php>
  AuthUserFile "/home/user/.htpasswds/public_html/wp-admin/passwd"
AuthName "Private access"
AuthType Basic
require user mysecretuser
</Files>

Como veis, cuando alguien quiere entrar en wp-login hace lo mismo que el fichero anterior. Hemos puesto la misma ruta del fichero, podéis tener otra. Y hemos puesto un usuario pero puedes poner valid-user.

Errores 404 o redirecciones infinitas.

Después de estos cambios pueden ocurrir errores 404 o redirecciones en la web. Para evitarlos edita el .htaccess del directorio raíz de tu web y añade:

ErrorDocument 401 default

Recordad que todos estos casos, además de proteger la web, lo que hacen es mejorar el rendimiento de tu servidor. Porque estamos elminando muchas de las las peticiones de acceso «ilícitas» y los intentos de ataque (os sorprenderían la cantidad que hay).

Deja un comentario

Resumen de nuestra Política de Privacidad

  • Responsable: SmythSys IT Consulting SLNE.
  • Finalidad: Gestionar y moderar los comentarios.
  • Legitimación: Necesitas dar tu consentimiento para publicar un comentario.
  • Destinatarios: Tus datos se alojan en los servidores de OVH.
  • Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir los datos en la dirección del responsable (en nuestra política de privacidad).

Time limit is exhausted. Please reload CAPTCHA.