> Manuales > Manual de administración de servidores Linux

Qué es Fail2Ban, un software gratuito esencial para proteger al servidor ante ataques de fuerza bruta. Cómo configurar Fail2Ban para multitud de servicios y en particular para banear las IP que realizan repetidos fallos de autenticación a SSH.

Cómo usar y configurar Fail2Ban

Cualquier servidor de Internet se encuentra expuesto a posibles ataques, lo que afecta a cualquiera de los servicios que ofrece a sus usuarios. Uno de los más sencillos ataques consiste en tratar de descubrir pares de usuario y contraseña de alguno de los usuarios autorizados en el sistema.

Obviamente, los atacantes no conocen nuestras claves, pero si no hemos configurado algún sistema que lo impida, pueden realizar cualquier número de intentos de conexión, probando con usuarios y claves hasta que consigan dar con un par de usuario/clave autorizada.

Por supuesto, este proceso de prueba y error lo realizan máquinas o bots, configuradas por los atacantes, que realizan intentos de acceso al servidor de manera repetitiva, simplemente probando claves al azar. Este tipo de ataque es el que se conoce con el nombre de "ataque de fuerza bruta".

Lo más frecuente es que el ataque intente tomar el control del servidor, buscando usuarios y contraseñas que les permitan conectarse al servidor por SSH. Pero en la práctica cualquiera de los servicios del software instalado en el servidor puede ser susceptible de recibir ataques de fuerza bruta. Esto incluye desde el propio SSH, los servidores de correo, servidores de FTP o servidores web, o incluso la autenticación en aplicaciones web como WordPress.

Qué es Fail2Ban

Fail2Ban es un programa gratuito disponible en Linux y otros sistemas operativos como MacOS. Este software monitoriza los accesos a sistemas del servidor y pone en una lista negra a aquellas IP que fallen varias veces en intentos de autenticación.

Puedes usarlo para bloquear IPs que fallan en sus intentos de autenticación a SSH, pero también en otros servicios que requieran acceso por usuario y clave, como FTP, POP, etc.

Gracias a Fail2Ban podemos mitigar de manera bastante efectiva los ataques de fuerza bruta. Además es muy sencillo usar Fail2Ban, para banear direcciones IP que hayan realizado diversos intentos fallidos reiterados en el acceso al servicio.

En este artículo vamos a explicar con detalle cómo funciona Fail2Ban y veremos un ejemplo concreto sobre cómo lo puedes usar para proteger los accesos SSH al servidor.

Instalar fail2ban

El programa se instala fácilmente, usando los repositorios oficiales de nuestro sistema. En el caso de Ubuntu, o cualquier otro sistema basado en Debian, lo realizamos de la siguiente manera:

sudo apt install fail2ban

Si no usas Ubuntu o Debian, tendrás que instalarlo a través del software de instalación de tu distribución.

Qué es un jail

En Fail2Ban existe el concepto de "jail". Los "Jail" son los sistemas que vamos a proteger con Fail2Ban.

Definiciones de los Jail soportados por Fail2Ban en jail.conf

Los archivos de configuración de los "jail" se encuentran en la ruta /etc/fail2ban.

Dentro de esa carpeta encontraremos un archivo llamado jail.conf que define las configuraciones "de casa" para Fail2Ban.

Puedes abrir este archivo con el comando:

sudo nano /etc/fail2ban/jail.conf

Dentro de jail.conf podrás encontrar mucho código y gran parte de ellos son comentarios, que te ayudarán a entender las definiciones. Dentro de este archivo habrá distintas partes, que se encabezan con un texto entre corchetes.

[DEFAULT]

En la sección [DEFAULT] encontramos las configuraciones predeterminadas que afectarán a todos los jail. Todas las configuraciones que pongas en [DEFAULT] son heredadas por los jail definidos a continuación. Más abajo haremos un análisis de las configuraciones más importantes.

Luego encontrarás todos los jail que Fail2Ban es capaz de procesar, que son unos cuantos, ya que es capaz de proteger multitud de servicios. En cada jail particular se podrán redefinir las configuraciones de [DEFAULT].

Algunos de los muchos jail que están disponibles en Fail2Ban son:

[ssh]

Este es el jail del servicio de SSH. En él se especifican las configuraciones de Fail2Ban para SSH.

Únicamente a nivel informativo (puesto que todavía no hemos empezado a explicar cómo se realizan las configuraciones), este jail contiene un código como el que sigue:

[ssh]
filter  = sshd
action  = iptables[name=ssh, port=ssh]
logpath = /var/log/auth.log

Entre las configuraciones para el jail [ssh] podemos encontrar la ruta del archivo de logs que se debe interpretar para entender cuántos accesos fallidos han tenido los usuarios.

A veces el Jail [ssh] viene definido como [sshd]. No sé a partir de qué versión ocurre esto, pero en todo caso siempre que he configurado Fail2ban estos dos jail son equivalentes.

[apache-auth]

Es el jail para la autenticación implementada en el servidor Apache. A veces este jail aparece simplemente como [apache].

El código que encontraremos podrá ser algo como este:

[apache-auth]
port     = http,https
logpath  = %(apache_error_log)s

Te lo muestro para que veas que en ocasiones los path a los archivos de logs están en variables. Estas variables pueden estar definidas en archivos externos a jail.conf, como paths-debian.conf o paths-common.conf.

Hay cantidad de jails definidos de antemano, algunos incluso de aplicaciones web como [drupal-auth], [webmin-auth] o cosas similares.

Todos los jail especificados en jail.conf están ahí como definiciones y configuraciones básicas predeterminadas. Podemos entenderlo como un simple directorio de todo lo que Fail2Ban es capaz de hacer. Sin embargo, todos estos jail deben ser activados de manera explícita para hacerlos funcionar. Para ello vamos a aprender a configurar Fail2Ban.

Cómo configurar Fail2Ban

El archivo que acabamos de abrir, jail.conf no conviene tocarlo, ya que en actualizaciones de Fail2Ban podría cambiar y machacar nuestras propias configuraciones. En lugar de ello vamos a usar el archivo llamado jail.local, también se debería colocar dentro de la carpeta /etc/fail2ban.

El archivo jail.local se cargará después de jail.conf y en él se puede sobreescribir sus configuraciones, por lo que todo lo que nosotros escribamos en jail.local es lo que se va a tener en cuenta definitivamente.

Si ese archivo no está en la carpeta lo podemos crear nosotros mismos.

cd /etc/fail2ban
sudo vim jail.local

Puedes usar otros editores más sencillos como nano: sudo nano jail.local.

Dentro de jail.local podemos incorporar cada uno de los jail que necesitemos, generalmente habrá uno predeterminado con configuración común para todos los jail y otro específico de jail para cada servicio que queramos tratar.

El jail predeterminado ya lo conoces. Se llama [DEFAULT] y luego habrá un jail por servicio, siendo el más común el [ssh], para las conexiones al servidor mediante SSH.

Ejemplo de archivo jail.local

En el siguiente código puedes ver un ejemplo de configuración para el archivo jail.local. Vamos a ver el código entero y enseguida comentaremos cómo funciona.

[DEFAULT]
ignoreip = 127.0.0.1/8 1.2.3.4
bantime = 600
maxretry = 5
findtime = 600

[ssh]
enabled = true

Las secciones [DEFAULT] y [ssh] son indicadores de las configuraciones generales y las configuraciones para SSH.

Dentro de [DEFAULT] hemos colocado varios valores:

Dentro de [ssh] se heredan todas las configuraciones de [DEFAULT], aunque podríamos sobreescribirlas si fuera necesario. Además hemos indicado:

Reiniciar Fail2Ban

Después de cambiar los valores del jail.local debemos reiniciar el servicio para que los cambios se tengan en cuenta.

sudo systemctl restart fail2ban.service

Operaciones administrativas sobre Fail2Ban

Para poder realizar operaciones de administración de Fail2Ban usamos el cliente llamado fail2ban-client.

El cliente que nos permite verificar el estado de Fail2Ban, existiendo un comando genérico para conocer el status del servicio:

sudo fail2ban-client status

Este comando nos mostrará el status general de Fail2Ban y los nombres de los jail que tenemos configurados y activos.

Mostrar el status general de Fail2Ban

Además de tenemos un comando para verificar el estado de cada jail en particular, indicando el nombre del jail que queramos revisar.

sudo fail2ban-client status ssh

Mostrar el status del jail ssh de Fail2Ban

Al ver el status del jail ssh, o cualquier otro, nos mostrarán datos interesantes como los accesos fallados, el archivo de logs procesado o los usuarios baneados actualmente o el contador de usuarios baneados a lo largo del tiempo. Es interesante ver como, con el paso de los días o semanas, estos valores aumentarán significativamente. Ello nos puede dar una idea de la importancia de tener activo este software para proteger nuestros sistemas

Otra operación administrativa habitual, que no vamos a tocar en este artículo porque ya se ha tratado es la de desbanear una IP. Si te interesa, lee esta FAQ para aprender a desbloquear IPs que han sido baneadas anteriormente con Fail2Ban.

Conclusión

Fail2Ban es uno de esos programas esenciales que debemos instalar si tenemos un servidor a nuestro cargo. A poco que instalemos el programa y lo dejemos funcionando en el servidor observaremos que existen muchos intentos de acceso fallidos que Fail2Ban estará bloqueando.

Es muy útil y agregará una barrera importante, no solamente a SSH (que ya es bastante), sino a cualquier otro servicio que queramos proteger. Hemos visto las acciones más básicas, pero si consultas la documentación podrás ver otras funciones no tan importantes pero que pueden añadir algo de valor.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual