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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.