Cómo instalar Fail2ban con Firewalld en Rocky Linux 8.4

Fail2ban es un demonio de sistema para proteger los servidores de los ataques maliciosos de inicio de sesión y de fuerza bruta. Fail2ban es un marco IPS (Software de Prevención de Intrusiones) de código abierto escrito en Python y es extremadamente configurable. Funciona como un servicio demonio que monitoriza el diario y los archivos de registro de SystemD y busca cualquier intento de autenticación fallido. Cuando la autenticación fallida alcanza el número X máximo, el fail2ban bloqueará automáticamente la dirección IP mediante el software de cortafuegos.

Si eres propietario de un VPS (Servidor Privado Virtual) o de un servidor dedicado, deberías considerar instalar fail2ban en todos tus servidores. Te ayudará a proteger algunos servicios básicos como SSH y FTP de los ataques maliciosos de fuerza bruta. Además, fail2ban es muy práctico, fácil de configurar y flexible.

En esta guía, aprenderás a instalar fail2ban en Rocky Linux, a configurar fail2ban con firewalld y a proteger el servicio SSH contra ataques de fuerza bruta.

Requisitos previos

  • Un usuario con privilegios de sudo root.

Configurar Firewalld

Firewalld es el software de cortafuegos por defecto en Rocky Linux. Se instala automáticamente durante la instalación de Rocky Linux, pero no está activado por defecto.

1. Ejecuta el siguiente comando para asegurarte de que el paquete firewalld está disponible en tu sistema.

sudo dnf info firewalld

Obtendrás una salida similar a la de abajo.

Comprobación del paquete fail2ban

Como se ve en la captura de pantalla, el paquete firewalld aparece como«Paquetes instalados«.

2. A continuación, inicia el servicio firewalld con el siguiente comando.

sudo systemctl start firewalld

3. Ahora activa el servicio firewalld para que se ejecute automáticamente en cada arranque del sistema.

sudo systemctl enable firewalld

Y obtendrás la siguiente salida.

Created symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service → /usr/lib/systemd/system/firewalld.service.
Created symlink /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.

4. Después, comprueba el estado del servicio firewalld utilizando el siguiente comando.

sudo systemctl status firewalld

Y obtendrás la siguiente salida.

Estado del servicio Fail2ban activo y en funcionamiento

Como se ve, el servicio firewalld está activo y funcionando.

5. Opcionalmente, puedes comprobar el estado del servicio firewalld utilizando el comando firewall-cmd. El firewall-cmd es la interfaz principal para interactuar con firewalld. El comando firewall-cmd es una utilidad para gestionar las reglas de firewalld, te permite añadir reglas, eliminarlas, comprobar su estado, etc.

Ejecuta el comando firewall-cmd que aparece a continuación para comprobar el estado del servicio firewalld.

sudo firewall-cmd --state

Si tu firewalld está activo, obtendrás la salida como«running«. De lo contrario, obtendrás la salida como «no se está ejecutando».

Ahora ejecuta el siguiente comando firewall-cmd para comprobar todas las reglas de firewalld que se están aplicando actualmente.

sudo firewall-cmd --list-all

Obtendrás una salida similar a la de abajo.

comprobar el estado de firewalld con firewall-cmd

Añadir el repositorio EPEL a Rocky Linux

Antes de instalar fail2ban, debes añadir el repositorio EPEL(Extra Packages for Enterprise Linux) a tu sistema.

1. Ahora ejecuta el siguiente comando para instalar el repositorio EPEL.

sudo dnf install epel-release

Escribe «y» para instalar y continuar.

Añadir el repositorio EPEL a Rocky Linux

2. Cuando se haya completado la instalación, comprueba todos los repositorios disponibles en tu sistema utilizando el siguiente comando.

sudo dnf repolist

Ahora verás la salida que se muestra a continuación.

Comprueba el repositorio habilitado en Rocky Linux con el comando DNF

Como se ve, el repositorio EPEL está disponible y activo en el sistema. Ahora, continuemos con la instalación de Fail2ban.

Instalación de Fail2ban en Rocky Linux

1. Para instalar fail2ban, ejecuta el siguiente comando.

sudo dnf install fail2ban fail2ban-firewalld

Escribe «y » para confirmar la instalación y pulsa«Enter» para continuar.

Instalación de fail2ban en Rocky Linux

Al igual que en la línea de comandos, también vas a instalar el paquete adicional «fail2ban-firewalld». Éste permitirá a fail2ban manipular las reglas de firewalld.

2. Cuando la instalación se haya completado, inicia el servicio fail2ban utilizando el siguiente comando.

sudo systemctl start fail2ban

3. Después, ejecuta el siguiente comando para que el servicio fail2ban se inicie automáticamente en cada arranque del sistema.

sudo systemctl enable fail2ban

4. Ahora, comprueba el estado de los servicios fail2ban ejecutando el siguiente comando.

sudo systemctl status fail2ban

Y obtendrás que el servicio fail2ban está activo y funcionando con la configuración por defecto que se indica a continuación.

Comprobar el estado del servicio fail2ban

Configurar Fail2ban

Ahora vas a configurar fail2ban y habilitarlo para que funcione con el firewalld.

1. Copia la configuración por defecto de fail2ban de «jail.conf » a«jail.local» utilizando el siguiente comando.

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

2. A continuación, edita la configuración de fail2ban utilizando el siguiente comando del editor nano.

sudo nano /etc/fail2ban/jail.local

En la sección «[DEFAULT]«, comprueba las configuraciones que aparecen a continuación.

[DEFAULT]
....
bantime = 1h
findtime = 1h
maxretry = 5

Opciones que debes conocer.

  • [DEFAULT] = Todas las configuraciones de esta sección se aplicarán como configuración global por defecto.
  • bantime = Número de veces que se baneará x dirección IP. Admite el formato de un día, un minuto u horas. En este ejemplo, el host o la dirección IP será baneada durante «1 hora» después de un máximo de intentos fallidos de autenticación.
  • findtime = La dirección IP será baneada si tiene un máximo de intentos fallidos de autenticación durante el último «findtime».
  • maxretry = Cuando la dirección IP tenga el número X de intentos fallidos de inicio de sesión, entonces la IP será baneada. En este ejemplo, la dirección IP será baneada después de 5 intentos fallidos de autenticación.

Ajusta el «bantime», el «findtime» y el «maxretry» según tus necesidades, luego pulsa «Ctrl+x» y escribe «y», después pulsa «Enter» para guardar la configuración.

3. La configuración por defecto de fail2ban es utilizar el iptables para el bloqueo. Para que fail2ban utilice firewalld para el bloqueo, copia la configuración «00-firewalld.conf» a«00-firewalld.local» utilizando el siguiente comando.

sudo mv /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local

Esta configuración «00-firewalld.conf» forma parte del paquete«fail2ban-firewalld«.

4. Ahora reinicia el servicio fail2ban para aplicar las nuevas configuraciones utilizando el comando que aparece a continuación.

sudo systemctl restart fail2ban

Proteger el servicio SSH con Fail2ban

Por defecto, el fail2ban no bloquea ninguna dirección IP, hasta que habilites la configuración de la jaula para cada servicio que quieras proteger. Además, la configuración de la jaula anulará la configuración por defecto en «jail.local». La configuración de la jaula estará disponible en el directorio «/etc/fail2ban/jail.d».

1. Crea una nueva configuración de jaula para el servicio SSH utilizando el siguiente comando.

sudo nano /etc/fail2ban/jail.d/sshd.local

Ahora pega la siguiente configuración.

[sshd]
enabled = true

# Override the default global configuration
# for specific jail sshd
bantime = 1d
maxretry = 3

Como ves, la configuración anula las opciones«bantime» y«maxretry» de la jaula«sshd«.

Pulsa «Ctrl+x» y escribe«Y» y luego pulsa«Enter» para guardar la nueva configuración de la jaula.

2. Para aplicar la nueva configuración, reinicia el servicio fail2ban con el siguiente comando.

sudo systemctl restart fail2ban

3. Después, comprueba el estado de fail2ban utilizando el comando fail2ban-client. El fail2ban-client es una línea de comandos para gestionar el servidor de control de fail2ban.

Ahora ejecuta el comando fail2ban-client que aparece a continuación para verificar la configuración de la cárcel.

sudo fail2ban-client status

Y obtendrás una salida similar a la de abajo.

Comprueba el estado de fail2ban con fail2ban-client

El fail2ban se está ejecutando con 1 jaula activa de nombre«sshd«.

Para comprobar la configuración de una jaula específica, puedes utilizar la opción«get» seguida del nombre de la jaula, y luego las opciones que quieras comprobar.

Comprueba la configuración «maxretry» de la jaula «sshd» utilizando el siguiente comando.

sudo fail2ban-client get sshd maxretry

Y verás que la salida es«3», que coincide con el valor de la configuración «sshd.local».

A continuación, comprueba la acción de prohibición por defecto para la jaula «sshd» utilizando el siguiente comando.

sudo fail2ban-client get sshd actions

Y verás que la salida es «firewallcmd-rich-rules«, coincide con la configuración global de fail2ban en el «00-firewalld.local».

Verifica la instalación de Fail2ban y Firewalld

Para verificar la instalación de fail2ban, comprueba el estado completo de la jaula (para esta guía es la jaula sshd), y comprueba las reglas de firewalld generadas por fail2ban.

A efectos de prueba, a continuación se muestra la captura de pantalla tras intentar conectarse a un servidor SSH con una contraseña incorrecta. Después de alcanzar el máximo de intentos«3» veces, la conexión es abandonada por el servidor.

El servidor abandona la conexión SSH tras alcanzar el número máximo de intentos 3 intentos de autenticación fallidos

1. Ejecuta el siguiente comando para comprobar el estado de una jaula específica (en este ejemplo la jaula sshd).

sudo fail2ban-client status sshd

Y obtendrás una salida similar a la siguiente.

Comprobación del estado de la cárcel fail2ban

Como se ve, la jaula sshd tiene 1 dirección IP baneada. Si estás en un VPS o servidor dedicado, verás muchas más direcciones IP.

2. El fail2ban generará firewalld rich-rules para bloquear direcciones IP. Las rich-rules de firewalld son una capacidad avanzada de filtrado en firewalld.

Ejecuta el siguiente comando para mostrar las rich-rules de firewalld generadas por fail2ban.

firewall-cmd --list-rich-rules

Y obtendrás una salida similar a la de abajo.

Comprobación de las reglas ricas de firewalld generadas por fail2ban

Desbanear una dirección IP en Fail2ban

Para desbanear una dirección IP de fail2ban, puedes utilizar el comando fail2ban-client.

1. Ejecuta el siguiente comando fail2ban-client para desbanear la dirección IP«192.168.1.10«.

sudo fail2ban-client unban 192.168.1.10

Y la dirección IP se eliminará de la lista de prohibidos en fail2ban.

A continuación, ejecuta el siguiente comando para asegurarte de que la dirección IP se ha eliminado de la base de datos de fail2ban (para este ejemplo la cárcel sshd).

sudo fail2ban-client status sshd

Y obtendrás que la dirección IP es eliminada de la sección«Lista de IPs prohibidas».

Conclusión

Enhorabuena! has instalado con éxito el framework fail2ban IPS en Rocky Linux 8.4. Y para el siguiente paso, puedes buscar otra configuración de jaulas para asegurar otros servicios como el servidor FTP, phpMyAdmin, WordPress, etc.

También te podría gustar...