Cómo proteger tu WordPress con Fail2ban (guía completa)

Si tienes WordPress instalado en un VPS, proteger tu sitio contra ataques de fuerza bruta es fundamental. Uno de los métodos más efectivos es usar Fail2ban, una herramienta que detecta intentos de acceso maliciosos y bloquea automáticamente las direcciones IP que generan actividad sospechosa.

En esta guía aprenderás a instalar, configurar y activar Fail2ban para proteger tu WordPress, tu panel de administración y tu servidor SSH.


1. ¿Qué es Fail2ban y por qué usarlo en WordPress?

Fail2ban es un sistema de seguridad que analiza archivos de registro (logs) en busca de patrones peligrosos, como intentos repetidos de inicio de sesión. Cuando detecta actividad sospechosa, bloquea la IP atacante mediante el firewall del servidor.

Beneficios principales:

  • Bloquea ataques de fuerza bruta al login de WordPress.
  • Protege tu servidor SSH.
  • Reduce el consumo de recursos causado por bots.
  • Funciona automáticamente una vez configurado.

2. Instalar Fail2ban en tu servidor

En la mayoría de servidores Ubuntu/Debian, Fail2ban está disponible en los repositorios oficiales.

sudo apt update
sudo apt install fail2ban -y

Una vez instalado, Fail2ban se inicia automáticamente.


3. Proteger el login de WordPress con Fail2ban

Para que Fail2ban pueda detectar intentos fallidos de acceso a WordPress, necesitamos registrar los intentos de login. Esto se hace añadiendo un pequeño fragmento de código en el archivo functions.php de tu tema hijo o en un plugin personalizado.

3.1. Registrar intentos fallidos en WordPress

Añade este código para registrar los intentos fallidos en /var/log/auth.log:

function wp_fail2ban_login_failed( $username ) {
    syslog(LOG_NOTICE, "WordPress login failed for user: $username");
}
add_action( 'wp_login_failed', 'wp_fail2ban_login_failed' );

Este registro permitirá que Fail2ban detecte intentos fallidos.


4. Crear el filtro de Fail2ban para WordPress

Crea un archivo de filtro:

sudo nano /etc/fail2ban/filter.d/wordpress.conf

Pega lo siguiente:

[Definition]
failregex = .*WordPress login failed for user.*
ignoreregex =

Guarda con Ctrl + O, Enter y sal con Ctrl + X.


5. Crear la jail de Fail2ban para WordPress

Ahora crea la configuración que activará el filtro:

sudo nano /etc/fail2ban/jail.local

Añade:

[wordpress]
enabled = true
filter = wordpress
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600

Esto significa:

  • maxretry 5: 5 intentos fallidos.
  • bantime 3600: IP bloqueada 1 hora.
  • findtime 600: 10 minutos para acumular fallos.

6. Proteger SSH con Fail2ban

Fail2ban ya incluye una jail para SSH. Solo asegúrate de activarla:

[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 4

Esto bloquea bots que intentan entrar por SSH.


7. Reiniciar Fail2ban y verificar que funciona

Reinicia Fail2ban:

sudo systemctl restart fail2ban

Verifica el estado:

sudo fail2ban-client status

Verifica la jail de WordPress:

sudo fail2ban-client status wordpress

Deberías ver algo como:

Currently banned: 0
Total banned: 0

8. Cómo ver las IP bloqueadas

sudo fail2ban-client status wordpress

Para desbloquear una IP:

sudo fail2ban-client set wordpress unbanip 123.123.123.123

9. Recomendaciones adicionales

  • Usa Cloudflare para añadir protección adicional.
  • Activa 2FA en WordPress.
  • Evita usar admin como usuario.
  • Actualiza WordPress y plugins regularmente.

10. Conclusión

Fail2ban es una herramienta poderosa para proteger tu WordPress contra ataques de fuerza bruta. Combinado con buenas prácticas de seguridad, reduce drásticamente los intentos de acceso malicioso y mejora la estabilidad de tu servidor.

Si usas WordPress en un VPS, Fail2ban es una capa de seguridad imprescindible.