Fail2Ban. Como Configurarlo en GNU/Linux para Prevenir Ataques de Fuerza Bruta

GNU/Linux AppArmor

Muy buenas. En este post te hablaré de Fail2Ban, una herramienta de seguridad fundamental en servidores GNU/Linux para prevenir intentos de acceso por fuerza bruta contra todo tipo de servicios abiertos al exterior.entenderás el porqué representa un herramienta de prevención de intrusiones fundamental, especiaunque tambien puede ser util a nivel más desktop, si tienes algun servicio que te permita conectarte vía remota.

Si sigues estas líneas, te contaré brevemente como funciona Fail2Ban, como puedes instalarlo y habilitarlo, y tambien como ajustarlo correctamente para proteger correctamente contra todos los posibles accesos de fuerza bruta que puedas recibir, en función de las características de tu sistema, y de los servicios que tengas abiertos al exterior.

Tabla de contenidos:

  1. File2Ban. ¿Qué es y como funciona?
  2. Como instalar Fail2Ban en tu distribución GNU/Linux
  3. Como habilitar Fail2Ban en el arranque del sistema
  4. Como monitorizar el estado de Fail2Ban
  5. Como configurar Fail2Ban
  6. Como consultar los logs de direcciones IP baneadas

File2Ban. ¿Qué Es y Como Funciona?

Fail2ban Logo

Fail2Ban es una herramienta de prevención de intrusiones escrita en Pyhton y que está destinada a prevenir ataquesde fuerza bruta en servidores GNU/Linux, a través de alguno de los servicios que tengas abiertos al exterior.

En un contexto, pues, casi que te diría que es obligado el uso de alguna herramienta como Fail2Ban, más teniendo en cuenta la proliferación de todo tipo de bots que segundo a segundo realizan miles de intentos de login a través de los servicios más tipicos que suelen ofrecer modos de autenticacion. A nivel de usuario de escritorio no tiene tanto sentido su uso, a no ser que tengas algun servicio abierto para permitir conexiones remotas a través de algún protocolo como SSH o FTP.

Fail2Ban funciona, a grandes rasgos, monitorizando los ficheros de logs en directorios concretos, como por ejemplo /var/log/auth.log o /var/log/apache/access.log, para detectar un exceso de intentos de acceso fallidos con autenticación incorrecta y en cortos lapsos de tiempo.

Una vez que una determinada IP ha superado el umbral establecido como sospechoso, Fail2Ban entra en acción, añadiendo una regla a nivel de cortafuegos para denegar el tráfico proveniente de esta IP durante un tiempo preestablecido, que luego puede ser ajustado según tus preferencias.

Fail2Ban funciona a través de lo que denominan jails o capsulas, siendo cada jail la combinación de las reglas más acciones específicas asociadas a cada servicio a proteger. Por defecto ya viene pre-configurado con jails para una gran cantidad de servicios considerados estándares en muchos servidores GNU/Linux, como sshd, apache-auth, apache-noscript, nginx-http-auth, openwebmail, etc, aunque más adelante te enseñaré que tu también tienes la posibilidad de añadir nuevos jails para otros servicios.

Como lnstalar Fail2Ban en tu Distribución GNU/Linux

Fail2Ban está disponible en los repositorios oficiales de la gran mayoría de distribuciones GNU/Linux. En Debian, Ubuntu, o cualquiera de sus derivados, puedes instalarlo fácilmente desde la terminal a través de Apt, tal como te muestro a continuación.

sudo apt install fail2ban

Si te encuentras en openSUSE deberías utilizar Zypper en vez de Apt, mientras que en Fedora o CentOS utilizariamos DNF.

Con la instalación se creará automaticamente el directorio /etc/fail2ban, que es donde donde podrás localizar el fichero de configuración de Fail2ban para ajustar los parametros que necesites, peor de eso te hablaré un poco más adelante.

Como Habilitar Fail2ban en el Arranque del Sistema

Aunque acabes de instalar Fail2Ban, eso no significa que ya este habilitado y funcionando en tu sistema, ya que Fail2Ban carga un servicio en segundo plano, que de entrada no esta programado para inicializarse en el arranque. Puedes comprobarlo utilizando systemctl, que es la herramienta para controlar servicios que utiliza systemd, el gestor de arranque que utilizan gran parte de las distribuciones GNU/Linux a día de hoy.

sudo systemctl status fail2ban.service

En un inicio, te debería aparecer una salida parecida a la que te muestro a continuación, indicando que el servicio esta cargado, pero que se encuentra deshabilitado. Este es el output que me ha aparecido a mi en Ubuntu 22.04 LTS:

● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; disabled; vendor preset: enabled)
     Active: inactive (dead)
       Docs: man:fail2ban(1)

Para programar que el servicio este activo tras el arranque del sistema, utilizaremos igualmente systemctl con el comando te dejo a continuación. Ten en cuenta que esto no arrancará el servicio ahora, sino programará que se active a partir del próximo arranque.

sudo systemctl enable fail2ban.service

Ahora solo te queda comprobar que, tras un reinicio del equipo, el servicio ya este activo. Para ello puedes utilizar de nuevo systemctl:

sudo systemctl status fail2ban.service

Ahora si que te debería aparecer un output como el que te muestro a continuación, que es el que me aparece a mi en Ubuntu 22.04 LTS. En otra distribución puede que todos los parámetros de la salida no sean exactamente los mismos, pero lo más importante es que te fijes en la línea que pone Active: active (running), indicando que el servicio está corriendo:

● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-09-19:33 CEST
       Docs: man:fail2ban(1)
   Main PID: 901 (failban-server)
      Tasks: 5 (limit: 4570)
     Memory: 16.0 M
        CPU: 915ms
     CGroup: /system.slice/fail2ban.service
             └─899 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

Con esto, ya tenemos el servicio correindo. Ahora pasemos a saber como monitorizar su estado más en detalle.

Como Monitorizar el Estado de Fail2Ban

Para comprobar su estado de ejecución, puedes utilizar el siguiente comando:

sudo fail2ban-client status

Si ejecutas este comando cuando tras haber habilitado el servicio en el arranque, lo que te indicará es el número de jails que estan actualmente habilitados, y el detalle de cada uno de ellos. Por defecto, el unico jail que suele estar habilitado es el correspondiente al servicio sshd, por lo que deberías ver una salida como la que te muestro a continuación:

Status
|- Number of jail:     1
`- Jail list:   sshd

Este resultado luego verás que variará en función de los jails que vayas habilitando, segun los diferentes servicios que necesites proteger.

Como Configurar Fail2Ban

Ahora que ya sabes que Fail2Ban está activo en cada arranque, y sabes como controlar el número de jails que están habilitados, es hora de que profundizemos un poco más en su funcionamiento y en los parametros de su configuración que puedes ajustar.

Los archivos de configuración de Fail2Ban se almacenan en el directorio /etc/fail2ban, y el fichero con el que podrás visualizar y editar los parámetros principales que te permitirán ajustar el comportamiento de Fail2Ban es jail.conf.

Puedes visualizar el fichero con cuallquier editor de texto, como Vim, utilizando el siguiente comando:

sudo vim /etc/fail2ban/jail.conf

En este fichero podrás visualizar los parametros de funcionamiento más comunes, como el numero de intentos de acceso erroneos que tiene que darse para que un host entre en la lista negra, el tiempo de baneo de los hosts que hayan entrado en la lista negra, o el detalle de todos los jails que tiene pre-establecidos (que no necesariamente habilitados).

A continuación te dejo con algunos de los parámetros más importantes que te puede interesar controlar (ten en cuenta que las líenas que empiezan por «#» están comentadas, y por lo tanto no está aplicando):

Por un lado, el tiempo de baneo pre-establecido lo puedes encontrar en la siguiente línea, y en mi caso, en una instalación de Ubuntu 22.04, verás que está establecido en 10 minutos.

# "bantime" is the number of seconds that a host is banned.
bantime = 10m

El numero de intentos érroeos antes de que el host sea baneado lo puedes encontrar en esta línea de código (en mi caso son 5 intentos):

# "maxretry" is the number of failures before a host get banned.
maxretry = 5

Finalmente, en el mismo fichero, tambien se detallan todos los jails que tiene configurados, indicando, para cada jail, el servicio a que corresponde, los puertos por los que se comunica este servicio, y los ficheros de logs que debe leer asociados a este servicio.

A continuación te dejo una muestra con los dos primeros jails que aparecen definidos, para que puedas localizar fácilmente donde aparece esta información, pero en este caso no debes modificar ninguno de los parámetros que aparecen.

#
# JAILS
#

# SSH servers
#

[sshd]
port      = ssh
logpath   = %(sshd_log)s
backend   = %(sshd_backend)s

[dropbear]
port      = ssh
logpath   = %(dropbear_log)s
backend   = %(dropbear_backend)s

Si vas tirando más abajo, verás un listado de todos los jails, agrupados según el tipo de servidor en el que pueden ser necesarios (servidores SSH, servidores HTTP, servicios de webmail, aplicaciones web, servidores proxy HTTP, servidores FTP, servidores de correo y servidores DNS).

Como Consultar los Logs de Direcciones IP Baneadas

Por ultimo, ahora que ya tienes Fail2Ban correctamente ajustado y en pleno funcionamiento, lo unico que faltaría por saber es como poder consultar todo el histórico de direcciones IP baneadas, para hacerte una idea de todos los intentos de acceso por fuerza bruta que ha ido frenando.

Por ello, la forma más fácil es consultar el fichero de registro de logs de la propia herramienta mediante un editor de texto como puede ser Vim. A continuación te dejo el comando con la ruta exacta:

vim /var/log/fail2ban.log

En este fichero deberías ver, a parte de los registros relacionados con cambios de configuración o creación de nuevos jails, un historico de todas las direcciones IP que han sido baneadas, o puestas de nuevo en la lista blanca (recuerda que por defecto, el baneo de una dirección IP esta establecido con una duración determinada).

Y con esto llegamos al final de esta guía. Espero que la hayas disfrutado y te haya resultado de utilidad.

¡Hasta la proxima!

Publicado por Oriol

Soy un chico de Barcelona. Estoy aquí para compartir mis Hobbies e intentar aportar mi granito de arena a todos aquellos usuarios interesados en el mundo de la informática, internet y las tecnologías de la información en general.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: