Protege tu wordpress de ataques de fuerza bruta

Como vimos en el anterior post "Configurar servidor VPS desde cero III: uso de fail2ban", podemos aprovechar una vez tenemos instalado Fail2Ban para crear un filtro que evite los ataques de fuerza bruta a nuestro panel de control de WordPress.

Desde el primer minuto que publicamos nuestro wordpress, esta accesible y de forma publica la pagina de acceso al panel de control. Lógicamente, esta protegida con un nombre de usuario y contraseña.

Esto es utilizado por bots para mediante un diccionarios de palabras, generar un nombre de usuario y contraseña e intentar acceder al panel de control y tomar el control de nuestra web.

Aprovechando nombres comunes de usuarios (admin, editor, etc), se aprovechan para intentar hacer login intentando adivinar la contraseña con las combinaciones de palabras del diccionarios que utilizan.

Índice
  1. Plugin WP Fail2ban
  2. Cómo podemos proteger nuestro wordpress de los ataques de fuerza bruta
    1. Requisitos
    2. Instalación de plugin y configuración del servidor
    3. Pruebas de funcionamiento
    4. Ajustes finales

Plugin WP Fail2ban

El plugin para wordpress WP Fail2Ban nos permite registrar los intentos de acceso a nuestro panel de control en el fichero auth.log de nuestro servidor.

Como este fichero puede ser procesado por Fail2Ban, podemos aprovechar para que los intentos reiterados de acceso a nuestro panel de control sean bloqueados a nivel de ip por Fail2ban.

De esta manera, bloqueamos el acceso a nuestra web a la ip del atacante, imposibilitando el cargar cualquier página de la web, y por la tanto no podrá intentar hacer login en nuestro panel de control.

Cómo podemos proteger nuestro wordpress de los ataques de fuerza bruta

La forma mas sencilla es mediante la instalación del plugin WP Fail2ban en nuestro wordpress y combinarlo con el programa Fail2ban en nuestro servidor.

Requisitos

Para poder ejecutar correctamente el plugin WP Fail2Ban, es necesario tener instalado el Fail2Ban en nuestro servidor y tener acceso mediante ssh.

Además de instalar el plugin, el acceso mediante ssh es necesario para poder copiar los ficheros de filtros wordpress-soft.conf y wordpress-hard.conf en el directorio de filtro de fail2ban.

Instalación de plugin y configuración del servidor

Despues de instalar el plugin como cualquier otro plugin en wordpress, debemos de acceder mediante ssh a nuestro servidor.

Una vez en nuestro servidor, debemos copiar los ficheros de configuración de los filtros de WP Fail2ban al directorio de filtros de Fail2Ban.

Antes de copiar y pegar el texto, debemos comprobar que las rutas de los ficheros de configuración indicadas en negrita se corresponden con las rutas en nuestro servidor:

cp /var/www/web/wp-content/plugins/wp-fail2ban/filters.d/wordpress-hard.conf /etc/fail2ban/filter.d/wordpress-hard.conf

cp /var/www/web/wp-content/plugins/wp-fail2ban/filters.d/wordpress-soft.conf /etc/fail2ban/filter.d/wordpress-soft.conf

cp /var/www/web/wp-content/plugins/wp-fail2ban/filters.d/wordpress-extras.conf /etc/fail2ban/filter.d/wordpress-extras.conf

Después de copiar estos archivos, debemos añadir los nuevos filtros en el fichero /etc/fail2ban/jail.conf o /etc/fail2ban/jail.local:

[wordpress-hard]
enabled = true
filter = wordpress-hard
logpath = /var/log/auth.log
maxretry = 3
port = http,https
bantime = 2592000

[wordpress-soft]
enabled = true
filter = wordpress-soft
logpath = /var/log/auth.log
maxretry = 3
port = http,https
bantime = 2592000

Una vez modificado el fichero, debemos recargar la nueva configuración:

fail2ban-client reload

Para comprobar que los nuevos filtros de wordpress esten funcionando, podemos comprobarlo de la siguiente manera:

fail2ban-client status

Nos devolverá un texto similar a este:

fail2ban-client status
Status
|- Number of jail:	7
`- Jail list:		wordpress-soft, postfix-sasl, dovecot-pop3imap, ssh, pureftpd, wordpress-hard, ssh-ddos

Podemos comprobar que el filtro wordpress-hard y wordpress-soft estan activos.

Pruebas de funcionamiento

Una prueba sencilla de funcionamiento es realizar 4 intentos a nuestro panel de control de manera fallida. Como resultado, la quinta vez que se intente acceder, el navegador nos mostrará que no se puede mostrar la web.

Si utilizamos los comandos de fail2ban-client de ambos filtros, nos detallara el numero y las ips bloqueadas por cada filtro:

fail2ban-client status wordpress-soft

En este caso al haber reiniciado fail2ban hace poco, no ha bloqueado aun ninguna ip. Si comprobamos dentro de unos días, podremos comprobar como se van añadiendo las ips bloqueadas por el filtro:

Status for the jail: wordpress-soft
|- filter
|  |- File list:	/var/log/auth.log 
|  |- Currently failed:	0
|  `- Total failed:	1
`- action
   |- Currently banned:	0
   |  `- IP list:	
   `- Total banned:	0
fail2ban-client status wordpress-hard

Status for the jail: wordpress-hard
|- filter
|  |- File list:	/var/log/auth.log 
|  |- Currently failed:	2
|  `- Total failed:	148
`- action
   |- Currently banned:	15
   |  `- IP list:	140.143.241.251 178.62.33.138 117.17.198.101 112.160.217.138 142.93.172.64 159.65.11.200 221.217.50.249 37.139.24.190 122.154.18.145 217.61.124.73 159.89.229.244 89.108.87.179 198.27.67.173 118.72.7.3 68.183.102.199 
   `- Total banned:	15

Ajustes finales

Por ultimo, podemos personalizar tanto el tiempo de duracion del baneo a la ip como el numero maximo de intentos por cada filtro (independientemente del valor especificado en la configuracion general).

Añadimos el parametro max-retry para indicar el numero maximo de intentos en cada bloque del filtro en /etc/fail2ban/jail.conf o /etc/fail2ban/jail.local:

maxretry = 3

Tambien podemos indicar un tiempo de baneo(en segundos) especifico para ese filtro:

bantime = 2592000

Con esto podemos personalizar cada filtro de Fail2ban a nuestro gusto.

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)
  1. admin dice:

    Gracias Andres.
    como comentas, en hostings compartidos esta solución no es valida, al no poder acceder mediante ssh. Como bien dices, añadir el reCaptcha v2 o v3 funciona muy bien para evitar el spam.

    Incluso en los formularios de contacto de los blogs, es una solución muy efectiva, añadir un checkbox personalizo para aceptar la política de privacidad. Los bots no son capaces de interpretarlo y descienden muchísimo los correos de spam.

  2. Andrés dice:

    Interesante solución y muy buen artículo. Como alternativa para hostings compartidos dónde no tenemos esta posibilidad yo utilizo reCaptcha de Google.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir