Guía · 3 min de lectura

Cómo proteger el acceso a WordPress

Respuesta corta: da a cada administrador una contraseña larga y única y autenticación en dos pasos, limita cuántos intentos de acceso puede hacer una misma dirección y elimina las cuentas de administrador que nadie usa. El núcleo de WordPress no limita los intentos de acceso por sí mismo, así que añade un límite en el servidor web, en la CDN o con un plugin. Cambiar solo la URL de acceso no es protección.

Actualizado el · HackGrade

Primero, analiza tu sitio. El análisis gratuito muestra cuáles de estas correcciones necesitas. Análisis de seguridad de WordPress

Pasos rápidos

  1. Ordena las cuentas de administrador. Elimina los administradores que no se usan y da al resto el rol más bajo que les sirva.
  2. Activa el acceso en dos pasos. Usa una app TOTP con códigos de respaldo para cada administrador y editor.
  3. Limita wp-login.php. Limita los intentos por dirección IP en el servidor, en la CDN o con un plugin.
  4. Restringe o cierra otras puertas. Bloquea XML-RPC si no lo usas y revisa las contraseñas de aplicación.
  5. Cierra las sesiones robadas. Ante cualquier sospecha, cambia las claves secretas para que todas las sesiones terminen.

El código y la configuración se mantienen en inglés.

Por qué la página de acceso es la puerta principal

Los bots prueban contraseñas comunes y filtradas contra /wp-login.php y /xmlrpc.php todo el día en casi cualquier sitio WordPress. La mayoría no acierta por astucia, sino porque una contraseña se reutilizó en otro sitio que sufrió una filtración. Una sola contraseña de administrador robada basta para instalar un plugin malicioso, así que el acceso merece varias capas.

1. Ordena las cuentas de administrador

Lista a todas las personas con control total y elimina o rebaja a quien no lo necesite. Quienes escriben contenido rara vez necesitan más que el rol de Editor o Autor.

Terminal
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered

Cada persona tiene su propia cuenta (nada de un acceso «admin» compartido) y una contraseña larga y única de un gestor de contraseñas. Si tu sitio aún tiene un usuario llamado literalmente admin, crea un nuevo administrador, pásale el contenido y borra el antiguo.

2. Activa la autenticación en dos pasos

El acceso en dos pasos frena la mayoría de los ataques con contraseñas robadas, porque el atacante también necesita un código del teléfono del usuario. El plugin gratuito Two Factor del directorio de plugins de WordPress.org admite apps de autenticación (TOTP), códigos por correo y códigos de respaldo. Instálalo y cada usuario lo activa en Usuarios → Perfil. Prefiere una app de autenticación a los códigos por correo, entrega a los usuarios sus códigos de respaldo y exígelo a cada administrador y editor. Muchas suites de seguridad ofrecen la misma función si ya usas una.

3. Limita los intentos de acceso

El núcleo de WordPress no limita los accesos fallidos, así que los bots pueden probar sin fin. El mejor sitio para frenarlos es antes de que se ejecute PHP. En nginx, un límite de peticiones en la página de acceso deja pasar a los usuarios reales y ralentiza a los bots:

nginx
# in the http { } block
limit_req_zone $binary_remote_addr zone=wplogin:10m rate=10r/m;

# in the server { } block, above your general PHP location
location = /wp-login.php {
    limit_req zone=wplogin burst=5 nodelay;
    limit_req_status 429;
    # then the same fastcgi lines as in your location ~ \.php$ block, e.g.:
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}

Pruébalo en tu propio sitio; tras unas cuantas peticiones rápidas deberías ver 429:

Terminal
for i in $(seq 1 20); do curl -s -o /dev/null -w '%{http_code} ' -X POST https://yourdomain.com/wp-login.php; done; echo

Detrás de Cloudflare, una regla de rate limiting para la ruta /wp-login.php hace lo mismo en el borde. En un hosting compartido sin acceso al servidor, un plugin reconocido para limitar intentos de acceso es la opción práctica.

4. Permite el acceso solo desde direcciones conocidas (opcional)

Si todas las personas que acceden trabajan desde direcciones IP fijas, puedes cerrar la página de acceso a todos los demás. En Apache 2.4, en .htaccess:

.htaccess
<Files "wp-login.php">
    Require ip 203.0.113.10 198.51.100.0/24
</Files>

No bloquees /wp-admin/admin-ajax.php: muchos temas y plugins lo usan para los visitantes. Sáltate este paso si tu equipo accede desde redes cambiantes o si los clientes inician sesión en una tienda; usa 2FA y el límite de intentos en su lugar.

5. Cierra las otras puertas

XML-RPC es una API remota antigua que también acepta contraseñas. Si no usas la app móvil de WordPress ni Jetpack, bloquéalo como se describe en la lista de bastionado de WordPress. Las contraseñas de aplicación permiten a herramientas externas usar la API REST; revísalas en Usuarios → Perfil y revoca las que no reconozcas. Si nada las usa, desactiva la función con un pequeño plugin must-use:

PHP
<?php
// wp-content/mu-plugins/no-app-passwords.php
add_filter( 'wp_is_application_passwords_available', '__return_false' );

6. Si sospechas que han robado una contraseña

Cambia la contraseña y después sustituye las claves secretas de wp-config.php. Eso cierra todas las sesiones en todos los dispositivos, incluida la del atacante:

Terminal
wp config shuffle-salts

Después busca administradores o plugins que no hayas añadido tú, como se explica en Cómo saber si tu WordPress está hackeado.

¿Y ocultar la URL de acceso?

Mover wp-login.php a una dirección secreta reduce el ruido de bots en tus registros, pero no es protección: la dirección se filtra a través de enlaces y plugins, y no sirve de nada contra una contraseña filtrada. Úsalo como extra, después de 2FA y del límite de intentos.

Qué comprueba HackGrade

El análisis gratuito señala los nombres de usuario que WordPress muestra públicamente, un endpoint XML-RPC abierto y el núcleo, plugins y temas de WordPress desactualizados con vulnerabilidades conocidas. Nunca intenta adivinar contraseñas, ni siquiera en el análisis profundo.

Preguntas frecuentes

¿WordPress limita los intentos de acceso por defecto?

No. El núcleo de WordPress no limita los accesos fallidos. Añade un límite en el servidor web, en tu CDN o con un plugin.

¿Qué método de dos pasos debo usar en WordPress?

Una app de autenticación (TOTP) con códigos de respaldo guardados. Los códigos por correo son mejor que nada, pero quien entre en el buzón también obtiene el código.

¿Debo cambiar la URL de wp-admin?

Reduce el ruido de bots, pero no frena a un atacante decidido ni una contraseña filtrada. Hazlo solo además de 2FA y del límite de intentos.

¿El límite de intentos bloqueará a mis clientes?

No con un límite razonable, como 10 intentos por minuto con un pequeño margen. Las personas reales casi nunca inician sesión más de unas pocas veces por minuto.

Fuentes

Guías relacionadas

Gratis · Al instante · Sin registro

Conoce tu nota antes que nadie.

Análisis pasivo. Nada se ataca sin tu permiso.

Empieza gratis. Pro desde 29 $ al mes (unos 24 $ con facturación anual), o un informe único completo por 29 $. Ver precios