Skip to content
Home » Seguridad Básica pero Efectiva para WordPress en Apache (2026)

Seguridad Básica pero Efectiva para WordPress en Apache (2026)

WordPress sigue siendo en 2026 el CMS más atacado del planeta. La buena noticia es que con un puñado de configuraciones bien hechas en el servidor Apache + ModSecurity puedes eliminar el 90-95% de los ataques automáticos más comunes (bruteforce, xmlrpc, enumeración, exploits antiguos, etc.) sin depender exclusivamente de plugins.

Aquí tienes una configuración realista, mantenible y bastante efectiva para la mayoría de sitios WordPress medianos/pequeños en servidores dedicados o VPS.

1. Lo primero: lo que NO debes saltarte (nivel básico obligatorio)

Prioridad Acción Impacto Dificultad Tiempo
★★★★★ Actualizar WP, temas y plugins Muy alto Baja 5 min
★★★★★ Contraseñas fuertes + 2FA Muy alto Media 15 min
★★★★☆ Cambiar prefijo de tablas Medio Baja 10 min
★★★★☆ Desactivar edición de archivos Alto Muy baja 2 min
★★★☆☆ Desactivar indexación uploads Medio Baja 5 min
Resumen de medidas de seguridad recomendadas.

2. Configuraciones clave en Apache + .htaccess (capa 1 – gratuita)

Pon esto en el .htaccess del root de WordPress (o mejor aún, en el VirtualHost):

# ==================== PROTECCIÓN BÁSICA WORDPRESS ====================

# Bloqueo xmlrpc.php (el 99% de sitios no lo necesita)
<Files xmlrpc.php>
    Require all denied
</Files>

# Prohibir acceso directo a archivos sensibles
<FilesMatch "^(\.user\.ini|\.htaccess|\.htpasswd|wp-config\.php|error_log|php\.ini|\.gitignore|composer\.json|composer\.lock)$">
    Require all denied
</FilesMatch>

# Impedir listados de directorios
Options -Indexes

# Bloquear acceso directo a wp-config.php y wp-config-sample.php aunque fallen las reglas anteriores
<Files wp-config.php>
    Require all denied
</Files>

# Limitar accesos a wp-admin desde IPs conocidas (opcional pero muy efectivo)
# <FilesMatch "^wp-admin">
#     Require ip 123.45.67.89   # tu IP
#     Require ip 2001:db8::/32  # IPv6 si usas
# </FilesMatch>

# Protección contra enumeración de usuarios vía author (muy común)
RewriteCond %{QUERY_STRING} ^author=([0-9]*) [NC]
RewriteRule .* - [F,L]

3. Rate limiting efectivo con ModSecurity (capa 2 – la que más marca la diferencia)

Esta es la configuración que recomendamos actualmente (enero 2026) para la mayoría de sitios:

<IfModule mod_security2.c>

    # Inicializamos colecciones globales (se ejecuta en todas las peticiones)
    SecAction \
        "phase:1,id:20001,nolog,pass,initcol:ip=%{REMOTE_ADDR}"

    # Contador general de intentos de login/autenticación
    SecRule REQUEST_URI "@rx (?i)/(?:wp-login\.php|wp-admin/post\.php|wp-json/wp/v2/users|my-account.*login|admin-ajax\.php.*action=login)" \
        "id:20010,phase:2,nolog,pass,chain"
    SecRule REQUEST_METHOD "@streq POST" \
        "setvar:ip.wp_auth_attempts=+1,expirevar:ip.wp_auth_attempts=300"

    # Bloqueo después de 12 intentos en 5 minutos
    SecRule ip:wp_auth_attempts "@gt 12" \
        "id:20020,phase:2,log,deny,status:429,\
        msg:'[WP-BRUTE] Demasiados intentos de autenticación - IP bloqueada 10 min',\
        setvar:ip.blocked=1,expirevar:ip.blocked=600,\
        setenv:RATELIMITED"

    # Bloqueo adicional más estricto para xmlrpc (por si alguien lo reactivó)
    SecRule REQUEST_URI "@streq /xmlrpc.php" \
        "id:20030,phase:1,nolog,pass,chain"
    SecRule REQUEST_METHOD "@streq POST" \
        "setvar:ip.xmlrpc_attempts=+1,expirevar:ip.xmlrpc_attempts=300"

    SecRule ip:xmlrpc_attempts "@gt 4" \
        "id:20031,phase:2,log,deny,status:429,\
        msg:'[XMLRPC-ABUSE] Uso abusivo de xmlrpc.php - bloqueado',\
        setenv:RATELIMITED"

    # Cabecera informativa (útil para bots que respetan estándares)
    Header always set Retry-After "600" env=RATELIMITED

</IfModule>

# Mensaje personalizado para 429 (muy recomendable)
ErrorDocument 429 "Demasiados intentos. Espera 10 minutos antes de volver a intentarlo."

4. Capa de plugin: All In One WP Security & Firewall (AIOS) – la mejor opción gratuita en 2026

All In One Security (AIOS) (versión 5.4.4+ a enero 2026) es uno de los plugins de seguridad más completos y ligeros del mercado gratuito. Tiene más de 1 millón de instalaciones activas y sigue recibiendo actualizaciones regulares.

Ventajas clave en 2026:

  • Sistema de puntuación de seguridad (te dice cuánto % estás protegido)
  • Clasificación de ajustes: Basic / Intermediate / Advanced → reduces riesgo de romper el sitioBrute force con lockout por IP + 2FA (Google Authenticator, etc.)
  • Firewall basado en .htaccess + reglas 6G (Perishable Press)
  • Bloqueo de bots falsos, hotlinking, spam comments automáticoEscáner de permisos de archivos, protección de archivos sensibles, auditoría de cambios

Configuración recomendada (orden progresivo – empieza por Basic)

Dashboard → mira tu puntuación inicial (normalmente 50-150/400+)Settings → General → Activa todo lo BasicFirewall (la joya del plugin):

  • Basic Firewall Rules → Activa todo
  • Additional Firewall Rules → Activa todo
  • 6G Blacklist Firewall Rules → Activa 6G + legacy 5G
  • Internet Bots → Bloquea Fake Googlebots
  • 404 Detection → Activa lockout de IPs que buscan páginas inexistentes

Brute Force →

  • Login Lockout: 5 intentos fallidos → lockout 5-10 minutos
  • Cookie Based Brute Force Prevention (muy útil)

Login Security → Activa 2FA para todos los usuarios (obligatorio para admins)User Accounts →

  • Cambia/renombra usuario “admin” si existe
  • Prohíbe login = display name

File System Security → Escanea y corrige permisos inseguros (644/755)Blacklist Manager → Añade IPs o User-Agents problemáticos manualmente.

Consejo importante:
AIOS modifica tu .htaccess → haz backup antes de activar reglas avanzadas.
Si usas ModSecurity (como en el punto 2), desactiva las reglas de firewall más agresivas de AIOS para evitar conflictos (las de ModSecurity son mucho más potentes y rápidas).

Con todas estas medidas estás evitando el 99.9% de posibilidades que tu sitio sea vulnerado.