Limitar el acceso a wp-admin de WordPress

Última revisión: 2 de octubre de 2021

Aunque podemos cambiar las carpetas por defecto del sistema, no es posible cambiar las de la administración [/wp-admin/]. Hay dos opciones en este caso.

Bloqueo por IP o usuario/contraseña

La primera y más habitual es la que se suele sugerir es bloquear el acceso a esta carpeta limitada a una serie de IP, pero también sabemos que en general (al menos con IPv4) los usuarios no suelen tener una IP fija para acceder por ahí. Así que si tienes IP fija, podrías configurarlo, pero si no, esta opción no es tan viable.

En Apache HTTPD (dentro del fichero .htaccess en la carpeta /wp-admin/) puedes limitar tu conexión a una IP en concreto:

order deny, allow
allow from 8.8.8.8
deny from all

Has de cambiar 8.8.8.8 por tu dirección IP

Otra posibilidad sería la de mostrar un mensaje de acceso de usuario de sistema operativo (que no dependa de WordPress) pudiendo bloquear, por ejemplo, las peticiones a la página de /wp-login.php:

<Files wp-login.php>
   AuthUserFile ~/.htpasswd
   AuthName "Acceso privado bajo llave"
   AuthType Basic
   require user miusuariosecreto
 </Files>

De la misma forma, en nginx se puede configurar lo siguiente:

location /wp-admin {
  allow 8.8.8.8;
  deny all;
}

Has de cambiar 8.8.8.8 por tu dirección IP

Y también se podría configurar bajo una solicitud de contraseña:

location /wp-login.php {
  auth_basic "Acceso privado bajo llave";
  auth_basic_user_file .htpasswd;
}

Si quieres tener varios usuarios y contraseñas, deberás configurar el fichero .htpasswd con los accesos según convenga.

Cambio de dirección URL del wp-admin

La segunda es la de utilizar un plugin que te permita cambiar la dirección URL, más similar a los cambios anteriores. Uno de ellos es WPS Hide Login, que te permitirá cambiar el acceso.

Ten presente que en cualquiera de los dos casos se generan una serie de problemas asociados. Para comenzar las cachés; si utilizas algún sistema deberás configurarlo para que no cachee esta nueva dirección. Por otro están las llamadas AJAX asíncronas que se suelen hacer a ficheros de esta carpeta: si bloqueas la carpeta a una IP o cambias el nombre, es posible que pierdas toda esta funcionalidad.

Para evitar esto, en Apache HTTPD deberías desbloquear el acceso al fichero:

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

Y de la misma forma, en nginx:

location /wp-admin/admin-ajax.php {
  allow all;
}

Ataques de fuerza bruta

Además de los accesos bloqueados de usuarios conocidos, también hay que disponer de sistemas que eviten el ataque por volumen de intentos de acceso en un periodo de tiempo. Algunos sistemas que limitan los accesos como Limit Login Attempt permiten configurar cuantas oportunidades tiene para acceder un usuario desde una dirección IP en un periodo de tiempo. De esta forma, si hay un ataque por fuerza bruta de usuario / contraseña, se podrá bloquear los intentos durante un periodo definido.

Desconexión automática

Otro momento a tener muy presente es aquel usuario que accede al panel, lo deja abierto y «se va». Este usuario inactivo que deja su sesión abierta posteriormente se puede encontrar con problemas porque alguien haya utilizado su cuenta para realizar fechorías. Para ello podemos utilizar algún plugin como Inactive Logout que permiten que un usuario conectado al panel, pero inactivo durante una serie de minutos, reciba un mensaje de aviso de si quiere seguir conectado al panel, y si no lo contesta, se le expulsa, por lo que posteriormente tendrá que volver a conectarse.

Verificación de cuentas

Cuando intentas acceder al panel de administración y al poner tu usuario o contraseña da un error, ese mensaje deja entrever si lo que ha fallado es el usuario y contraseña, o solo la contraseña (de forma que implícitamente estás diciendo que ese usuario sí que existe). Estos mensajes de error que pueden ser tan claros, se pueden sobrescribir mediante un plugin.

function disable_wordpress_login_errors() {
  return 'Meeeeec!';
}
add_filter('login_errors', 'disable_wordpress_login_errors');

Instrucciones paso a paso

  1. Crea el plugin o descárgalo ya creado (descomprime el fichero ZIP).
  2. Accede por FTP a la carpeta [/wp-content/mu-plugins/]. Si no tienes esta carpeta, créala.
  3. Sube por FTP el fichero [wpdanger-login.php] a la carpeta [/wp-content/mu-plugins/].
  4. Cuando entres en el panel de administración de tu WordPress, en la zona de Plugins tendrás una sección nueva de plugins Imprescindibles donde aparecerá. Recuerda que al ser Imprescindible no podrás activarlo ni desactivarlo.

Seguir con Seguridad para WordPress


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.