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.
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.
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
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.