Cómo asegurar el acceso al wp-admin de WordPress

El directorio /wp-admin/ es el punto más atacado en cualquier instalación de WordPress. Un bot que encuentra tu página de login puede intentar miles de combinaciones de usuario y contraseña en minutos, consumir recursos del servidor y, si tiene suerte, colarse dentro. Proteger ese acceso va más allá de elegir una contraseña fuerte.

Por qué el wp-admin es el primer objetivo

WordPress es el CMS más usado del mundo, lo que lo convierte en el objetivo más rentable para los atacantes. La URL /wp-admin/ es la misma en todos los sitios por defecto, así que cualquier script automatizado sabe exactamente dónde buscar. Los ataques de fuerza bruta al login de WordPress son tan comunes que la mayoría de servidores los ven a diario en sus logs.

La buena noticia es que con unas pocas medidas bien configuradas, el riesgo cae drásticamente. Aquí vas a ver las opciones más efectivas, desde las más sencillas hasta las que requieren tocar el servidor.

Protección con .htpasswd: una segunda contraseña antes del login

Añadir una contraseña HTTP al directorio /wp-admin/ mediante .htpasswd y .htaccess pone un filtro antes incluso de que el navegador cargue la pantalla de login de WordPress. Para que funcione, necesitas dos archivos:

  • .htpasswd: almacena las credenciales encriptadas. Una línea por usuario, con el formato usuario:hash. Puedes generar el hash con herramientas como htpasswd de Apache o generadores online.
  • .htaccess en /wp-admin/: le indica al servidor que proteja ese directorio con las credenciales del .htpasswd.

El fragmento de .htaccess que necesitas es:

AuthName "Admins Only"
AuthUserFile /home/dominio/.htpasswd
AuthGroupFile /dev/null
AuthType basic
require user tusuario
<Files admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>

La parte de admin-ajax.php es importante: si no la excluyes de la protección, muchas funciones de WordPress dejan de funcionar (formularios, carritos de compra, actualizaciones dinámicas). Tienes todos los detalles de esta configuración, incluyendo los casos edge de AJAX, en este artículo sobre cómo proteger wp-admin sin romper el AJAX.

Limitar los intentos de login

Aunque tengas .htpasswd, es buena idea también limitar los intentos fallidos de login directamente en WordPress. Plugins como Limit Login Attempts Reloaded o WP Cerber bloquean automáticamente una IP tras un número configurable de intentos fallidos. Lo recomendable es bloquear después de 3-5 intentos durante al menos 20 minutos.

Esta medida no requiere tocar el servidor y funciona en cualquier hosting. Es la primera línea de defensa que debería tener cualquier WordPress, incluso antes de plantearse configuraciones más avanzadas.

Autenticación en dos factores (2FA)

El 2FA añade un segundo requisito al login: además de usuario y contraseña, el sistema pide un código temporal generado en el móvil. Aunque alguien consiga tus credenciales, no puede entrar sin ese código.

En WordPress, plugins como WP 2FA o Google Authenticator lo configuran en minutos. La integración con apps como Google Authenticator o Authy es directa y no necesita ningún servicio externo de pago. Si gestionas un WordPress con varios usuarios con acceso de editor o admin, el 2FA es prácticamente obligatorio.

Restricción por IP

Si siempre accedes desde la misma IP (o desde un rango fijo de IPs de oficina), puedes configurar el .htaccess para que solo esas IPs puedan cargar el directorio /wp-admin/. El resto recibe un error 403 directamente, sin que el servidor ni siquiera muestre la página de login.

Order deny,allow
Deny from all
Allow from 195.0.0.1

El inconveniente es obvio: si tu IP cambia (trabajas desde casa, desde cafeterías, en viaje), te quedas fuera. En ese caso, la opción más práctica es combinar .htpasswd con 2FA en lugar de restricción por IP.

Cambiar la URL de acceso al admin

Plugins como WPS Hide Login te permiten cambiar /wp-admin/ por cualquier ruta personalizada, por ejemplo /acceso-privado/. Los bots que escanean URLs estándar de WordPress no encontrarán nada. Esta medida por sí sola no es suficiente (si alguien sabe que usas WordPress puede probar variaciones comunes), pero combinada con las anteriores reduce significativamente el volumen de peticiones automatizadas.

Una visión general de cómo combinar estas medidas con otras capas de protección la tienes en este artículo sobre cómo proteger tu WordPress contra hackers. Y si quieres ir un paso más allá a nivel de servidor, las cabeceras de seguridad HTTP son otra capa que complementa bien todo lo anterior.

Preguntas frecuentes

¿Rompe algo en WordPress proteger /wp-admin/ con .htpasswd?

Sí puede romper cosas si no excluyes admin-ajax.php correctamente. Sin esa excepción, funciones como los formularios dinámicos, las actualizaciones de carrito en WooCommerce o ciertos bloques de Gutenberg dejan de responder. La configuración del .htaccess que aparece en este artículo ya lo tiene en cuenta.

¿Qué método es mejor si no tengo IP fija?

La combinación .htpasswd + 2FA es la más equilibrada para quiénes acceden desde distintas ubicaciones. La restricción por IP solo es práctica cuando la IP del administrador es siempre la misma.

¿Necesito todas estas medidas a la vez?

No necesariamente. Para un sitio pequeño con poco tráfico, limitar intentos de login más .htpasswd ya da un nivel de protección bastante bueno. El 2FA se vuelve más necesario cuanto más sensible sea el contenido o cuantos más usuarios con acceso de admin tenga el sitio.

¿Este tipo de protección funciona en todos los hostings?

La configuración con .htpasswd y .htaccess funciona en servidores Apache, que es lo que usa la mayoría de hostings compartidos en España. En Nginx la sintaxis es diferente y suele requerir acceso al archivo de configuración del servidor, que en hostings compartidos normalmente no tienes. En ese caso, las opciones de plugin (límite de intentos, 2FA, cambio de URL de login) son la alternativa directa.

Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.