Instalar y configurar Fail2ban en Rocky Linux 8

Aprendemos a instalar y configurar la veterana herramienta de seguridad fail2ban, sobre un servidor con Rocky Linux 8. En su día ya la incluimos en los 12 pasos para asegurar nuestro servidor Linux; además, ya hace unos cuantos años, hablamos en detalle de ella: Evitar ataques de fuerza bruta con Fail2ban

Si llevamos años como administradores de sistemas, incluido si no llevamos tanto, nos habremos dado cuenta la gran cantidad de intentos de acceso que tienen los servicios expuestos en la red. Uno de los que recibe más es el servicio de SSH, la mayoría de ellos causados por ataques de fuerza bruta, realizados por usuarios y bots. Aunque, si que es cierto que se pueden evitar, por ejemplo, cambiando el puerto por defecto o bien habilitando el intercambio de llaves y deshabilitar el acceso para root, aún puede representar un problema.

Aquí es donde entra fail2ban, ya que puede mitigar fácilmente los ataques de fuerza bruta al crear una serie de reglas que alteran, de forma automática, la configuración del cortafuegos para denegar el acceso a ciertas IP, después de una cierta cantidad de intentos de inicio de sesión fallidos, sin la intervención por nuestra parte.

Para realizar esta entrada he utilizado, como viene siendo habitual, un VPS creados en mi proveedor de confianza Clouding.io

Instalar y configurar Fail2ban en Rocky Linux 8

Antes de nada, debemos habilitar el repositorio de EPEL, de la siguiente manera:

dnf install epel-release

Una vez hecho esto, instalamos:

dnf install fail2ban -y

Ahora es importante que añadamos el servicio al arranque:

systemctl enable fail2ban

En lo que respecta a la parte de configuración, la carpeta de con los archivos de configuración se encuentran en la ruta «/etc/fail2ban«. Si echamos un vistazo al fichero «fail2ban.conf«, nos indicará que la información en dicho fichero se debe leer como una página de ayuda y no como un fichero de configuración. En su lugar, tenemos dos opciones. La primera es crear perfiles individuales, en varios ficheros dentro de la carpeta «/etc/fail2ban/jail.d/«, o bien crear y recopilar todas las configuraciones locales, en un archivo llamado «jail.local», que actualizaremos de forma periódica, a medida que se cambien las reglas.

Para ello, realizamos el seguimiento paso:

cp jail.conf jail.local

Si editamos el fichero «jail.local» y nos destaplazamos por él, veremos varias secciones. Una sección importante es «[DEFAULT]«, que indica los valores generales para todos los servicios. Por ejemplo, podemos modificar el valor «bandtime«, que establece el período de tiempo que un cliente será baneado cuando no haya podido autenticarse de forma correcta.

Otros valores interesantes son «findtime» y «maxretry» , que se encargan de indicar cuando un cliente es un usuario ilegitimo o no. La variable «maxretry» estable el número de intentos que un cliente tiene que autenticarse, dentro de una ventana de tiempo definida por «findtime«, antes de ser prohibido. De forma predeterminada, el servicio prohibirá a un cliente iniciar sesión sin éxito 5 veces en un minuto en una ventana de 10 minutos.

Si nos interesa también podemos indicar otras cosas como los envíos de correo con las notificaciones de actividad, indicando el correo de destino y el servicio de correo.

También se pueden configurar acciones, esto es, indicar que tiene que hacer fail2ban cuando realizar una prohibición.

Configuraciones individuales

Nos vamos a centrar en el servicio SSH. Desde la siguiente parte del archivo de configuración que se ocupa de los servicios individuales./

Cada una de estas secciones se tiene que habilitar de forma individual, agregando la línea «enabled=true«, justo debajo del encabezado, con sus otras configuraciones.

[default]
. . .
enabled = true
. . .

En el caso de SSH, lo habilitamos justo debajo de la sección [sshd], de la siguiente manera:

[sshd]
 
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode   = normal
enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Además, también vemos otros parámetros, como el filtro que se utilizará para decidir si una línea en un registro indica una autentificación fallida y la ruta del registro que le dice fail2ban dónde se encuentran los registros para ese servicio en particular.

El valor del filtro en realidad apunta a una referencia en un fichero ubicado en el directorio «/etc/fail2ban/filter.d» Los archivos en esta carpeta contienen expresiones regulares que determinan si una línea en el registros es un intento de autentificación fallido.

Podemos ver los filtros disponibles, simplemente listando los ficheros de esa carpeta:

ls /etc/fail2ban/filter.d

Con el resultado:

Listamos los ficheros de filtro

Ya vimos en la entrada: Evitar ataques de fuerza bruta en Nginx con Fail2ban, varios ejemplos de otros filtros que se pueden utilizar.

Antes de finalizar la entrada, para encender el servicio debemos escribir:

systemctl start fail2ban

Con el resultado:

Estado de fail2ban

Y para pararlo:

systemctl stop fail2ban

También podemos comprobar el estado de la herramienta:

fail2ban-client status

Un vistazo:

Filtros habilitados

O especificar un servicios en concreto:

fail2ban-client status sshd

Espero que esta entrada os haya parecido interesante y que os pueda resultar de utilidad en algún momento.

Wiki de fail2ban