Instalar y configurar Fail2ban para prevenir accesos no deseados al servidor

Fail2ban es una aplicación de Linux que permite evitar accesos no autorizados al servidor. Funciona bloqueando, o baneando, las IP que realicen varios intentos de acceso incorrectos al servidor.

Es importante contar con Fail2ban en un servidor Linux, o una aplicación de similares características, para evitar sobre todo los accesos de bots, es decir, de máquinas automatizadas que realizan intentos de acceso indiscriminados a los servidores. Este tipo de bots son muy comunes en Internet y simplemente se dedican a intentar loguearse por SSH en los servidores, probando diferentes usuarios y claves de acceso, para autorizarse correctamente y tomar el control de la máquina.

Fail2ban se encarga de monitorizar los registros de acceso al servidor, en busca de fallos de acceso SSH e impidiendo nuevos reintentos de login desde las direcciones IP involucradas, por un tiempo determinado.

Instalar Fail2ban

Para instalar esta aplicación necesitamos correr el comando correspondiente a nuestra distribución de Linux. En Ubuntu se realizaría de esta manera:

apt install Fail2ban

Nota: puede que tengas que ejecutar ese comando con «sudo». Además es recomendable realizar previamente un «apt update» para traerse la lista de repositorios actualizada.

Configurar Fail2ban

La configuración de Fail2ban se encuentra en la carpeta «/etc/fail2ban/». Allí encontraremos un archivo llamado «jail.conf» con las configuraciones del sistema. Para encontrar más información podemos abrir ese archivo con nuestro editor preferido.

nano jail.conf

En este archivo encontraremos diversas opciones de configuración interesantes. Un usuario avanzado puede aprovechar muchas de las características de este programa, pero lo más básico es administrar los intentos de login por SSH al servidor.

En la sección «[DEFAULT]» encontramos la configuración global de las opciones. Allí veremos diversas variables que definir como las siguientes:

  • bantime: es el tiempo que una IP será baneada, expresado en segundos.
  • maxretry: es el número máximo de reintentos de login que podrán realizarse antes de que la IP sea baneada.
  • ignoreip: una lista de IPs separadas por espacios que serían ignoradas por fail2ban.

Configuraciones personalizadas para cada servicio

Cada una de las protecciones se expresa en una «jaula». Podemos tener varias «jaulas» para cada tipo de servicio administrado por Fail2ban. Ahora, si deseamos hacer cambios en la configuración predeterminada, lo recomendable es crear un archivo llamado «jail.local».

nano jail.local

Podemos crear una configuración SSH entrante de esta manera:

[sshd]

maxretry = 5

bantime=10800

Nota: «sshd» es el demonio de conexión SSH, que permite que otros usuarios se conecten con nuestro servidor.

Para que estos cambios tengan efecto, tenemos que reiniciar el servicio. El comando puede depender de la distribución con la que estemos trabajando, pero en Ubuntu sería algo como esto:

sudo systemctl restart fail2ban.service

Comprobar el estado de Fail2ban

En cualquier momento podemos comprobar el estado de Fail2ban con el siguiente comando.

fail2ban-client status

Nos arrojará una lista de las jaulas que tenemos configuradas. Luego, podríamos visualizar información detallada de cada jaula con el comando:

fail2ban-client status sshd

En un breve espacio de tiempo, desde que configuremos fail2ban, observaremos que el número de intentos fallidos de acceso al servidor irá en aumento y que el número de IPs baneadas está siempre en constante actualización. La salida podrá ser algo como esto:

Status for the jail: sshd

|- Filter

|  |- Currently failed:    0

|  |- Total failed:           10244

|  `- File list:     /var/log/auth.log

`- Actions

|- Currently banned: 0

|- Total banned:       248

`- Banned IP list: