Imagen de un hombre de negocios sosteniendo una llave brillante, con un fondo de código, ilustrando la protección contra ataques de fuerza bruta con Fail2ban.
Seguridad informática con Fail2ban.

Cómo Defenderse Contra los Ataques de Fuerza Bruta con Fail2ban

Para variar y diversificar los artículos, hoy te hablaré sobre seguridad. Te mostraré cómo detectar un ataque de fuerza bruta en los servidores SSH y FTP usando la herramienta Fail2ban.

Introducción

Cada día oigo noticias relacionadas con la ciberdelincuencia. Por ejemplo, algunos usuarios o robots maliciosos han logrado sortear algunos sitios web o servicios públicos. En artículos anteriores, mostré varias técnicas de fuerza bruta y conexión. Por lo tanto, es importante implementar medidas de seguridad, como IDS/IPS en el firewall, para defender nuestros servidores/clientes durante la configuración.

IPS (sistema de prevención de intrusiones): Examina el tráfico entrante para realizar una detección de intrusos, luego bloquea los incidentes, elimina paquetes maliciosos, prohíbe el tráfico de una IP incriminada…

¿Qué es Fail2ban?

Fail2ban es una aplicación que analiza los registros de varios servicios (SSH, Apache, FTP…) buscando coincidencias entre patrones definidos en sus filtros y las entradas de los registros. Busca intentos repetidos de conexiones fallidas en los archivos de registro y procede a un bloqueo agregando una regla al firewall iptables o nftables para bloquear la IP de origen.

Ataque de fuerza bruta en ausencia de IPS

Supongo que todos conocen la herramienta hydra, así que no necesito hacer un repaso. Comienzo, para mostrarte mejor usaré una máquina Ubuntu como objetivo y Parros OS como atacante. Como información, creé mis propias listas de palabras (user.txt y pass.txt).

Entonces, primero inicio mi ataque en el servidor SSH:

hydra -L user.txt -P pass.txt 192.168.1.112 ssh -f
Captura de pantalla que muestra un ataque de fuerza bruta exitoso usando la herramienta Hydra contra un servidor SSH.
Ataque Hydra exitoso: credenciales encontradas.

¡Listo! Ha logrado encontrar los datos de autenticación del lado SSH. Ahora, ejecutaré un comando muy similar para el servidor FTP:

hydra -L user.txt -P pass.txt 192.168.1.112 ftp -f
Captura de pantalla de un ataque de fuerza bruta exitoso utilizando Hydra contra un servidor FTP.
Credenciales FTP comprometidas mediante ataque Hydra.

Hasta aquí todo bien, también funciona. El objetivo es bloquear la fuerza bruta, así que instalaré la herramienta en cuestión para continuar.

Instalación y configuración de Fail2ban

Usando Ubuntu me facilité la tarea, ya que ya tiene el paquete. Para instalarlo, nada complicado, solo escribe el comando:

sudo apt-get install fail2ban

Pero antes, quiero mostrarte la lista de reglas iptables, para eso usa esto:

sudo iptables -S
Captura de pantalla mostrando la salida del comando iptables -S, listando las reglas del firewall.
Configuración actual de Iptables.

NOTA:

Al configurar fail2ban en tu ordenador local, debes tener acceso root o puedes usar un usuario sin privilegios de root con derechos sudo.

sudo apt-get install fail2ban
Captura de pantalla que muestra la instalación de Fail2ban en un sistema Ubuntu usando el administrador de paquetes apt.
Instalación de Fail2ban con apt-get.

Una vez finalizada la instalación, pasaré a la fase de configuración. El servicio Fail2ban tiene sus archivos de configuración predeterminados “jail.local” en el directorio /etc/fail2ban, por lo tanto, no debo modificar este archivo, pero puedo reemplazarlo con el archivo jail.local para configurarlo según mis necesidades.

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

y luego

sudo gedit /etc/fail2ban/jail.local
Captura de pantalla del archivo jail.local de Fail2ban, mostrando opciones de configuración.
Archivo de configuración jail.local de Fail2ban.

Aquí es donde configuraré todo para bloquear los ataques. Debo definir la IP que Fail2ban debe ignorar, el número máximo de intentos del usuario y el tiempo de prohibición:

Captura de pantalla del archivo de configuración de Fail2ban, mostrando las opciones ignoreip, bantime, y maxretry.
Configuración de parámetros de bloqueo en Fail2ban.

Para esta parte he terminado.

SSH

Ahora debo buscar las líneas referentes a SSH y configurarlas como en la imagen de abajo:

Captura de pantalla mostrando la sección de configuración SSH dentro del archivo jail.local de Fail2ban.
Configuración de Fail2ban para el servicio SSH.

¡Listo! Debo reiniciar el servicio Fail2ban y luego observar el estado del cliente ssh. Para ver si mis parámetros se han guardado, compruebo iptables:

sudo fail2ban-client status
sudo fail2ban-client status ssh
sudo iptables -S
Captura de pantalla mostrando el estado de Fail2ban para el jail SSH y las reglas de iptables después de la configuración.
Estado de Fail2ban y reglas de iptables tras la configuración.

¡Genial! Una pequeña prueba para ver si funciona. ¡Vamos! Vuelvo a iniciar mi ataque de fuerza bruta SSH en el mismo servidor:

Captura de pantalla mostrando el mensaje "Connection refused" al intentar un ataque de fuerza bruta SSH con Hydra, bloqueado por Fail2ban.
Ataque SSH bloqueado por Fail2ban.
hydra -L user.txt -P pass.txt 192.168.1.112 ssh -f

¡Sí! Funciona muy bien. Imposible obtener información de conexión. Echaré un vistazo al estado y al archivo de registro:

sudo fail2ban-client status ssh
sudo tail /var/log/auth.log
Captura de pantalla mostrando el estado de Fail2ban para SSH, incluyendo la lista de IPs baneadas, y las últimas líneas del archivo de registro /var/log/auth.log.
Estado de Fail2ban y registro de eventos tras intento de ataque.

Genial, veo la IP del atacante. Bueno, es bueno bloquear, pero hay que desbloquear la IP:

fail2ban-client -i
Set ssh unbanip 192.168.1.164
exit
sudo fail2ban-client status ssh
Captura de pantalla mostrando los comandos usados para desbloquear una IP (192.168.1.164) baneada por Fail2ban, y el estado del jail SSH después del desbloqueo.
Desbloqueando una IP baneada por Fail2ban.

Debo reiniciar el servicio fail2ban para tener en cuenta los cambios:

service fail2ban restart
sudo fail2ban-client status ssh
Captura de pantalla mostrando los comandos para reiniciar el servicio Fail2ban y verificar el estado del jail SSH.
Reinicio de Fail2ban y verificación del estado de SSH.

Ahora vuelvo a probar para ver si puedo usar fuerza bruta:

hydra -L user.txt -P pass.txt 192.168.1.112 ssh -f
Captura de pantalla mostrando un ataque de fuerza bruta SSH exitoso con Hydra después de desbloquear una IP previamente baneada por Fail2ban.
Ataque Hydra exitoso tras desbloquear IP.

Genial, vuelve a funcionar, así que la seguridad se ha quitado.

FTP

Para el servidor FTP , debo modificar el archivo jail.local cambiando el logpath, el filtro y maxretry, así como verificar que enabled = true:

Captura de pantalla mostrando la configuración de Fail2ban para el servicio vsftpd dentro del archivo jail.local, incluyendo enabled, logpath, filter, y maxretry.
Configuración de Fail2ban para el servidor FTP vsftpd.

Lo intento para ver si funciona:

hydra -L user.txt -P pass.txt 192.168.1.112 ftp -f
Captura de pantalla mostrando un ataque de fuerza bruta FTP con Hydra, donde algunos intentos fueron bloqueados por Fail2ban
Fail2ban bloquea parcialmente el ataque FTP

¡Listo! Estoy bloqueado y además mi IP atacante está mencionada en iptables:

Captura de pantalla mostrando el estado de Fail2ban para vsftpd, con una IP baneada, y las reglas iptables que reflejan el bloqueo.
IP atacante bloqueada por Fail2ban en vsftpd.

Te dejo la libertad de quitar el bloqueo tú mismo para familiarizarte con los comandos y comprender el proceso.

Conclusión

Este es el final del artículo. Espero que haya sido bastante instructivo y sobre todo comprensible. No dudes en volver a contactarme o intercambiar información en las diferentes redes sociales con nuestra comunidad si es necesario.

Te sugiero que uses los comandos varias veces con diferentes ejemplos para dominar realmente la herramienta.

¡Hasta muy pronto para un próximo artículo lleno de información!

My Cart Close (×)

Tu carrito está vacío
Ver tienda