Cómo usar Fail2ban con WordPress y el proxy de Cloudflare para una seguridad mejorada

En el mundo digital actual, los sitios web están constantemente siendo atacados. Según estudios recientes, más del 80% de las brechas de seguridad en sitios web se deben a ataques de fuerza bruta o credenciales robadas. Esto hace que sea cada vez más importante asegurar tu sitio web contra accesos no autorizados.

Fail2ban es una herramienta de código abierto diseñada para proteger tu sitio web contra ataques maliciosos al bloquear automáticamente las direcciones IP sospechosas. Funciona escaneando los archivos de registro en busca de patrones de actividad sospechosa, como múltiples intentos fallidos de inicio de sesión, y luego bloqueando las direcciones IP asociadas a esas acciones.

En esta guía, te mostraremos cómo asegurar tu sitio de WordPress utilizando Fail2ban y asegurarnos de que funcione correctamente con el proxy de Cloudflare, para que puedas bloquear las IPs maliciosas sin arriesgar la interrupción del tráfico legítimo.

¿Qué es Fail2ban?

Fail2ban es una herramienta de seguridad proactiva que monitoriza los archivos de registro del sistema en busca de señales de actividad maliciosa, como intentos fallidos de inicio de sesión repetidos. Bloquea automáticamente las direcciones IP ofensivas mediante la actualización de las reglas del cortafuegos, evitando que los atacantes sigan intentando acceder. Esta herramienta es ampliamente utilizada para proteger servidores y aplicaciones contra ataques de fuerza bruta, ataques DDoS y otras actividades maliciosas.

Fail2ban es especialmente efectivo para aplicaciones como WordPress, donde los intentos de inicio de sesión de fuerza bruta son comunes. Al configurar Fail2ban para monitorizar los intentos de inicio de sesión en WordPress, puedes mitigar el riesgo de acceso no autorizado a tu sitio.

Configuración de Fail2ban para WordPress

Paso 1: Iniciar sesión en tu servidor

Para comenzar, necesitas acceder a tu servidor a través de SSH. Asegúrate de tener privilegios de superusuario para realizar los cambios necesarios.

ssh usuario@tu-ip-del-servidor

Paso 2: Localizar los archivos de registro

Fail2ban necesita acceso a los archivos de registro para monitorizar la actividad sospechosa. En la mayoría de los servidores Linux que ejecutan Nginx o Apache, los archivos de registro se encuentran en el directorio /var/log/. Para Nginx, normalmente puedes encontrar los registros de acceso en:

/var/log/nginx/access.log

Para Apache, la ubicación sería probablemente:

/var/log/apache2/access.log

Para ver el contenido de estos archivos de registro, usa el siguiente comando:

tail -f /var/log/nginx/access.log | grep "POST /wp-login.php"

Este comando monitorizará los intentos de inicio de sesión en la página de inicio de sesión de WordPress. Intenta iniciar sesión con credenciales incorrectas para generar intentos fallidos de inicio de sesión y confirmar que estos se registran correctamente.

Paso 3: Configuración del «jail» de Fail2ban para WordPress

Fail2ban viene con configuraciones predeterminadas para SSH, pero necesitarás crear un «jail» personalizado para WordPress. Un «jail» define el filtro y la acción que se debe tomar cuando se detecta actividad sospechosa.

Comienza copiando el archivo de configuración predeterminado para crear una versión local:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
nano /etc/fail2ban/jail.local

Desplázate hacia abajo en la sección [jails] y agrega la siguiente configuración para monitorear los intentos de inicio de sesión de WordPress:

[wordpress-auths]
enabled = true
port = http,https
filter = wordpress-auth
logpath = /var/log/nginx/access.log

Reemplaza la ruta del registro con la ubicación real de tu archivo de registro. Esta configuración indicará a Fail2ban que monitoree el archivo de registro especificado para los intentos fallidos de inicio de sesión de WordPress.

Si tienes varios sitios de WordPress en el mismo servidor, puedes especificar varios archivos de registro agregándolos a la variable logpath o usar un comodín (*) para monitorear todos los archivos de registro en el directorio.

Paso 4: Crear el filtro Fail2ban

A continuación, necesitas crear un filtro que defina qué tipo de intentos de inicio de sesión deben considerarse sospechosos. Este filtro utilizará expresiones regulares (regex) para identificar los intentos fallidos de inicio de sesión en el archivo de registro.

Crea un nuevo archivo de filtro para WordPress:

nano /etc/fail2ban/filter.d/wordpress-auth.conf

Agrega el siguiente contenido para filtrar los intentos fallidos de inicio de sesión:

[Definition]
failregex = ^<HOST> .* "POST /wp-login.php HTTP.* 200

Este patrón de regex coincide con las solicitudes POST fallidas a la página de inicio de sesión de WordPress. Si usas Apache o OpenLiteSpeed, es posible que necesites ajustar ligeramente el patrón según el formato de los registros del servidor.

Una vez guardado el filtro, sal del editor de texto.

Paso 5: Probar el filtro Fail2ban

Antes de aplicar la configuración, es recomendable probar el filtro para asegurarte de que funciona correctamente. Ejecuta el siguiente comando para probar el filtro contra tu archivo de registro:

fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/wordpress-auth.conf

El resultado mostrará la cantidad de entradas del archivo de registro que coincidieron con el filtro. Si todo está configurado correctamente, el resultado debería mostrar los intentos fallidos de inicio de sesión.

Paso 6: Reiniciar Fail2ban y verificar la configuración

Una vez que todo esté configurado, reinicia Fail2ban para aplicar los cambios:

systemctl restart fail2ban

Verifica que Fail2ban esté funcionando correctamente ejecutando:

fail2ban-client status

Para ver qué IPs han sido bloqueadas, usa:

fail2ban-client status wordpress-auths

Ahora Fail2ban bloqueará las direcciones IP que superen el número máximo de intentos de inicio de sesión permitidos.

Usando Fail2ban con Cloudflare Proxy

Si usas Cloudflare como proxy para tu sitio web, Fail2ban podría bloquear incorrectamente las direcciones IP de Cloudflare en lugar de las IPs reales de los atacantes. Esto se debe a que Cloudflare oculta las direcciones IP originales de los visitantes.

Para solucionar esto, necesitas configurar Nginx (o tu servidor web) para identificar correctamente la dirección IP original de los visitantes. Esto se puede hacer asegurando que los encabezados de Cloudflare se usen para restaurar la IP real.

Paso 1: Restaurar la IP del visitante con Cloudflare

Puedes configurar Nginx para restaurar la IP original del visitante utilizando una opción preconfigurada para Cloudflare en la configuración de Nginx. Agrega lo siguiente a la configuración de Nginx:

set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
real_ip_header CF-Connecting-IP;

Esta configuración asegura que Nginx interpretará correctamente las direcciones IP reales de los visitantes a partir de los encabezados de Cloudflare.

Paso 2: Usar la API de Cloudflare para bloquear IPs

Para automatizar el bloqueo de IPs a través de Cloudflare, crea una acción en Fail2ban que instruya a Cloudflare para bloquear las direcciones IP maliciosas. Primero, genera tu token de API de Cloudflare, luego crea la configuración de la acción de Fail2ban:

nano /etc/fail2ban/action.d/cloudflare.conf

Pega la siguiente configuración, reemplazando los espacios reservados con tu token de API y dirección de correo electrónico de Cloudflare:

# Configuración de acción para Cloudflare API

Después de guardar la configuración, edita el archivo /etc/fail2ban/jail.local para asegurarte de que use la nueva acción:

action = cloudflare
    iptables-allports

Reinicia Fail2ban para aplicar los cambios:

systemctl restart fail2ban

Ahora Fail2ban bloqueará automáticamente las direcciones IP maliciosas utilizando el cortafuegos de Cloudflare.

Conclusión

Usar Fail2ban con WordPress es una excelente manera de mejorar la seguridad de tu sitio al protegerlo de ataques de fuerza bruta y otros comportamientos maliciosos. Siguiendo los pasos descritos en esta guía, puedes configurar fácilmente Fail2ban en tu sitio de WordPress y combinarlo con Cloudflare para una protección adicional.

Con Fail2ban en funcionamiento, tu sitio de WordPress estará protegido contra intentos maliciosos de inicio de sesión, y utilizando el firewall de Cloudflare, evitarás que el tráfico legítimo se vea afectado. Esta configuración garantiza que tu sitio permanezca seguro y opere de manera óptima, incluso cuando esté bajo ataque.

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana.

¡Apúntate a nuestro newsletter!


– patrocinadores –

Noticias destacadas

– patrocinadores –

¡SUSCRÍBETE AL BOLETÍN
DE LOS SYSADMINS!

Scroll al inicio