Securizar el acceso a wp-admin de WordPress

Seguridad Unix TCP WrappersSiguiendo un poquito con la temática WordPress hoy quería tratar el tema de la securización del acceso a la zona de administración. Tiene lógica que al tratarse de la puerta de entrada a toda la gestión de nuestro sitio queramos tenerla lo más securizada posible.

Por defecto, la entrada a la zona de administración (ejemplo.com/wp-admin/) tiene un sistema de autenticación interno de WordPress que funciona contra la base de datos. El administrador, por defecto accede con el usuario «admin», si dejamos este valor por defecto, el atacante ya tiene el punto de partida para intentar acceder. Por este motivo se recomienda:

  • Establecer una clave lo suficientemente compleja para el usuario administrador.
  • Cambiar el nombre del usuario administrador de «admin» a uno personalizado. Para ello podemos usar el plugin WP-Optimize, que además nos sirve para otras cosas como mantener optimizada y limpia la base de datos. Si no queremos instalar el plugin, bastará con crear un nuevo usuario con rol de administrador y posteriormente borrar el original «admin». Ojo, con esta última opción no borréis los artículos de «admin», sino asociarlos al nuevo usuario. También se podría cambiar directamente en la base de datos, desde la shell de MySQL o phpMyAdmin.

Una vez que nuestro usuario administrador está securizado, lo mejor es proceder a añadir una segunda capa de autenticación para la ruta wp-admin, de modo que lo primero que se encuentre el atacante sea la barrera de autenticación básica de Apache, y en el hipotético caso de que la sobrepasara tuviera que enfrentarse también a la de WordPress.

Lo que hacemos entonces es crear, vía el fichero .htaccess dentro de la carpeta «wp-admin» una capa de autenticación. Creamos el fichero con el siguiente contenido:

AuthName "Acceso restringido"
AuthUserFile /home/foo/bar/.htpasswd
AuthType basic
require user miusuario

Nota importante: El fichero .htpasswd, que contendrá los usuarios y passwords con acceso autorizado, debe ubicarse fuera de la ruta pública del sitio web. Podemos añadir los usuarios al mismo desde línea de comandos con el comando htpasswd:

# htpasswd -cb /home/foo/bar/.htpasswd  miusuario mipassword

En este ejemplo, nos generaría el fichero .htpasswd siguiente:

# cat .htpasswd
miusuario:ktRS/8rW/AFm3as3l0/Y

Si no disponéis de un equipo Unix con el comando htpasswd, podéis usar cualquiera de las webs que permiten generar este fichero a través de asistentes.

Con estos dos ficheros ya tenemos una nueva capa de autenticación para acceder a la administración de WordPress. En el caso de que utilicemos las funcionalidades Ajax de la administración de WordPress se recomienda añadir también lo siguiente al fichero .htaccess del directorio «wp-admin»:

<Files admin-ajax.php>
    Order allow,deny
    Allow from all
    Satisfy any 
</Files>

Y finalmente, si tras realizar estos cambios recibimos un error 404 al acceder a la administración o un bucle «Too many redirects error», añadimos la siguiente línea al fichero .htaccess principal del sitio (ojo, al principal, no al de wp-admin):

ErrorDocument 401 default

Existen otras opciones, como modificar el nombre del directorio «wp-admin» para dificultar aún más su exposición a ataques, no obstante con lo comentado en esta entrada debería ser suficiente para tener seguro nuestro acceso a la administración.

Un comentario en “Securizar el acceso a wp-admin de WordPress

Comments are closed.