Protege tu servidor con Fail2Ban: Instalación, configuración básica y uso de fail2ban-client

La seguridad nunca es mucha: Protege tu servidor con Fail2Ban "Instalación y configuración inicial"

En el mundo de los servidores, la seguridad es esencial para proteger tus datos y mantener tus sistemas en funcionamiento sin problemas. Una herramienta muy útil para fortalecer la seguridad de tu servidor es Fail2Ban. Fail2Ban es un programa que analiza los logs de tu servidor en busca de intentos fallidos de inicio de sesión y, en caso de detectar múltiples intentos fallidos desde una misma dirección IP, aplica una regla temporal de bloqueo en iptables para prevenir futuros intentos de acceso.

En esta entrada de blog, te enseñaremos cómo instalar y configurar Fail2Ban en tu servidor. Además, como bono adicional, también mostraremos cómo limpiar las reglas de iptables para un chain específico relacionado con Fail2Ban.

Paso 1: Instalación de Fail2Ban Dependiendo del sistema operativo de tu servidor, sigue los pasos correspondientes a continuación:

Para sistemas Debian/Ubuntu:

sudo apt-get update
sudo apt-get install fail2ban

Paso 2: Configuración de Fail2Ban Fail2Ban viene con una configuración por defecto que se encuentra en el archivo '/etc/fail2ban/jail.conf'. Es recomendable no editar este archivo directamente y, en su lugar, crear una copia llamada 'jail.local':

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

A continuación, te muestro un ejemplo de cómo ajustar los valores de 'bantime', 'findtime' y 'maxretry' directamente desde la línea de comandos, con valores recomendados:

sudo sed -i 's/^bantimes*=.*/bantime = 3600/' /etc/fail2ban/jail.local
sudo sed -i 's/^findtimes*=.*/findtime = 600/' /etc/fail2ban/jail.local
sudo sed -i 's/^maxretrys*=.*/maxretry = 5/' /etc/fail2ban/jail.local

En este ejemplo con sed, hemos configurado los valores de la siguiente manera:

  • bantime: 3600 segundos (1 hora) - tiempo que una dirección IP estará bloqueada después de superar el límite de intentos fallidos.
  • findtime: 600 segundos (10 minutos) - ventana de tiempo en la que Fail2Ban buscará intentos fallidos.
  • maxretry: 5 - cantidad de intentos fallidos permitidos dentro del 'findtime' antes de bloquear una dirección IP.

A continuación, edita el archivo 'jail.local' para personalizar la configuración de Fail2Ban según tus necesidades:

sudo nano /etc/fail2ban/jail.local

Ademas de los parámetros como 'bantime', 'findtime', 'maxretry', puedes modificar otros según tus necesidades. Guarda y cierra el archivo cuando hayas terminado.

Paso 3: Iniciar y habilitar el servicio de Fail2Ban Ahora que ya tienes Fail2Ban instalado y configurado, es momento de iniciar el servicio y habilitarlo para que se ejecute automáticamente al arrancar el sistema:

Para sistemas Debian/Ubuntu e incluso CentOS/RHEL:

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

¡Eso es todo! Ahora tienes Fail2Ban instalado y configurado en tu servidor.

Bono adicionales

Uso de la herramienta fail2ban-client

La herramienta fail2ban-client es una interfaz de línea de comandos que te permite interactuar con el daemon de Fail2Ban y realizar diversas acciones, como comprobar el estado de Fail2Ban, obtener información sobre los jails habilitados, bloquear o desbloquear direcciones IP manualmente y más. A continuación, te mostramos algunos ejemplos de cómo utilizar fail2ban-client:

  • 1). Comprobar el estado de Fail2Ban:
sudo fail2ban-client status
Este comando te mostrará el estado general de Fail2Ban, incluyendo el número de jails habilitados y una lista de sus nombres.
  • 2). Obtener información sobre un jail específico

A continuación, algunos ejemplos de cómo utilizar fail2ban-client tomando como referencia la salida del comando sudo fail2ban-client status sshd o iptables -L -n -v :

sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 5
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 192.168.150.1

sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 36 packets, 10023 bytes)
pkts bytes target prot opt in out source destination 
15 1972 f2b-sshd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 20 packets, 2736 bytes)
pkts bytes target prot opt in out source destination

Chain f2b-sshd (1 references)
pkts bytes target prot opt in out source destination 
15 1972 REJECT all -- * * 192.168.150.1 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0

En estos ejemplos, verificamos el chain "f2b-sshd" donde tiene una dirección IP bloqueada (192.168.150.1) debido a intentos fallidos de inicio de sesión en el servicio SSH.

  • 3). Desbloquear la dirección IP 192.168.150.1 manualmente:
sudo fail2ban-client set sshd unbanip 192.168.150.1
Este comando desbloqueará la dirección IP 192.168.150.1 en el jail "sshd". Después de ejecutar este comando, la dirección IP 192.168.150.1 ya no estará bloqueada y se eliminará de las reglas de iptables para el chain "f2b-sshd".
  • 4). Bloquear una dirección IP manualmente:
sudo fail2ban-client set sshd unbanip 192.168.150.1

Este comando desbloqueará la dirección IP 192.168.150.1 en el jail sshd.

  • 5). Recargar la configuración de Fail2Ban:
sudo fail2ban-client reload

Este comando recargará la configuración de Fail2Ban, lo que es útil cuando realizas cambios en la configuración y deseas aplicarlos sin reiniciar completamente el servicio.

La herramienta fail2ban-client es una forma útil de interactuar y administrar Fail2Ban directamente desde la línea de comandos. Con ella, puedes supervisar y controlar el comportamiento de Fail2Ban de forma rápida y sencilla.

Para verificar si Fail2Ban está funcionando correctamente en tu servidor, sigue estos pasos:

  • 1). Comprueba el estado del servicio Fail2Ban:
sudo systemctl status fail2ban

● fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-05-08 09:22:48 PDT; 1h 28min ago
Docs: man:fail2ban(1)
Main PID: 5893 (f2b/server)
Tasks: 5 (limit: 5217)
Memory: 13.3M
CGroup: /system.slice/fail2ban.service
└─5893 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

May 08 09:22:48 ubuntu systemd[1]: Starting Fail2Ban Service...
May 08 09:22:48 ubuntu systemd[1]: Started Fail2Ban Service.
May 08 09:22:48 ubuntu fail2ban-server[5893]: Server ready

Si el servicio está funcionando, verás un mensaje indicando que el servicio está "active (running)".

  • 2). Revisa los archivos de registro de Fail2Ban. Los logs de Fail2Ban te proporcionarán información sobre las acciones que realiza, como bloquear y desbloquear direcciones IP. Por defecto, los logs de Fail2Ban se encuentran en /var/log/fail2ban.log. Puedes ver los últimos eventos utilizando el comando tail:
sudo tail -f /var/log/fail2ban.log

Este comando mostrará los últimos eventos en tiempo real. Si Fail2Ban está funcionando correctamente, verás mensajes sobre la detección de intentos fallidos de inicio de sesión y las acciones de bloqueo que realiza.

  • 3). Verifica las reglas de iptables. Cuando Fail2Ban bloquea una dirección IP, crea una regla en iptables. Puedes verificar las reglas actuales en iptables utilizando el siguiente comando:
sudo iptables -L -n -v

Busca los chains que comiencen con "f2b-", que son los chains creados por Fail2Ban. Por ejemplo, verás chains como "f2b-sshd" o "f2b-dovecot-pop3imap" si has configurado Fail2Ban para proteger SSH y servicios de correo. Si hay direcciones IP bloqueadas, verás reglas en estos chains.

  • 4). Prueba un bloqueo intencional (con precaución). Para probar si Fail2Ban está bloqueando direcciones IP correctamente, puedes intentar iniciar sesión en uno de los servicios protegidos por Fail2Ban (como SSH) utilizando credenciales incorrectas. Asegúrate de no bloquear tu propia dirección IP accidentalmente y de tener acceso de respaldo al servidor en caso de que algo salga mal. Después de superar el número de intentos fallidos permitidos (maxretry), Fail2Ban debería bloquear la dirección IP y registrar la acción en el archivo /var/log/fail2ban.log.

Ten en cuenta que realizar pruebas de bloqueo intencional puede tener consecuencias no deseadas, como bloquear tu propia dirección IP o alertar a los sistemas de seguridad. Realiza esta prueba solo si estás seguro de que puedes recuperar el acceso al servidor en caso de un bloqueo accidental.

Si sigues estos pasos y Fail2Ban parece estar funcionando correctamente, puedes estar seguro de que está protegiendo tu servidor contra ataques por fuerza bruta. Si tienes más preguntas o necesitas más ayuda, no dudes en preguntar. Estoy aquí para ayudarte.

Limpiar las reglas de iptables para un chain específico relacionado con Fail2Ban

Si en algún momento deseas limpiar las reglas de iptables para un chain específico, como 'fail2ban-dovecot-pop3imap', puedes seguir estos pasos:

  1. Verifica las reglas actuales en iptables para el chain específico:
sudo iptables -L fail2ban-dovecot-pop3imap --line-numbers

  1. Elimina todas las reglas en el chain de una vez:
sudo iptables -F fail2ban-dovecot-pop3imap
  1. Verifica que el chain esté vacío:
sudo iptables -L fail2ban-dovecot-pop3imap --line-numbers
Ten en cuenta que estas acciones son temporales y solo afectan al sistema actual. Si deseas guardar estas configuraciones de iptables de manera permanente, utiliza la herramienta 'iptables-save' o 'iptables-persistent' según tu distribución y configuración del sistema.
# Para guardar las reglas actuales en sistemas Debian/Ubuntu
sudo iptables-save | sudo tee /etc/iptables/rules.v4

# Para guardar las reglas actuales en sistemas CentOS/RHEL
sudo iptables-save | sudo tee /etc/sysconfig/iptables
Para restaurar las reglas guardadas después de reiniciar el sistema o el servicio iptables, usa el siguiente comando:
# Para sistemas Debian/Ubuntu
sudo iptables-restore < /etc/iptables/rules.v4

# Para sistemas CentOS/RHEL
sudo iptables-restore < /etc/sysconfig/iptables

En resumen, Fail2Ban es una herramienta esencial para proteger tu servidor de ataques por fuerza bruta y mantener la seguridad de tus datos. En esta entrada de blog, te mostramos cómo instalar y configurar Fail2Ban en tu servidor, cómo limpiar las reglas de iptables para un chain específico relacionado con Fail2Ban y cómo utilizar la herramienta fail2ban-client para administrar y supervisar Fail2Ban, tomando como referencia ejemplos relacionados con la salida del comando iptables -L -n -v.

Si tienes alguna pregunta adicional o necesitas más ayuda, no dudes en dejar un comentario. Estamos aquí para ayudarte.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *