Instalar Fail2ban en Debian 12 y que funcione.

Tras darme cuenta de la cantidad de intentos de inicio de sesión que se producen en mi Raspberry todos los días, he decidido instalar Fail2ban.

Fail2ban es una aplicación que te ayudará a proteger tu servidor contra ataques maliciosos y con la que podrás mantener tus datos seguros.

Fail2ban evitará 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 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 e impidiendo nuevos intentos de login desde las direcciones IP involucradas, por un tiempo determinado.

Antes de instalar Fail2ban evita usar puertos como el 22 y 2222 ya que son muy comunes a estos servicios y son el primer punto de intentos de inicio de sesión elegidos por los bots.

Como instalar Fail2ban

Para instalar fail2ban deberemos abrir una terminal y escribir lo siguiente:

sudo apt install fail2ban python3-systemd

Configuración

La configuración de Fail2ban se encuentra en la carpeta «/etc/fail2ban/«. Allí encontraremos un archivo llamado «jail.conf» con las configuraciones del sistema.

Pero nosotros trabajaremos con una copia del archivo jail.conf a la que llamaremos jail.local, ya que así evitaremos que tras una actualización este pueda ser sustituido por la versión por defecto, cambiando así toda nuestra configuración.

El archivo jail.local se carga después de jail.conf y en él realizaremos nuestra configuración, por lo que todo lo que se escriba en jail.local es lo que se va a tener en cuenta definitivamente.

La copia del archivo jail.conf, la haremos desde la terminal con el comando cp (copy)

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

Ahora abre el archivo en cuestión

sudo nano /etc/fail2ban/jail.local

Configuración Default (por defecto)

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

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

  • ignoreip: Aquí puedes añadir direcciones IP que nunca serán baneadas por Fail2ban. Por ejemplo, nuestra propia dirección IP.
  • bantime: es el tiempo que una IP será baneada, expresado en segundos, minutos, horas, días …. (por defecto en 10 minutos)
  • findtime: es el tiempo que transcurre entre intentos de conexión antes de ser baneado. (por defecto en 10 minutos)
  • maxretry: es el número máximo de intentos de login que podrán realizarse antes de que la IP sea baneada. (por defecto en 5 intentos)

Nota si quieres que se ignoren todas las ips procedentes de tu red local, escribe la primera dirección IP (que suele ser la del router) seguido de un /24, esto hará que no se tengan en cuenta las direcciones de la 1 a la 254.

Seguimos cambiando otras cosas de la sección Default.

Como yo no uso iptables, ya que el firewall lo tengo activo a nivel de router, haremos algunos cambios.

Busca las siguientes líneas y comenta con el signo #

[Default]

banaction = iptables-multiport
banaction_allports = iptables-allports

Pega debajo las siguientes líneas.

banaction = nftables
banaction_allports = nftables[type=allports]

Quedando como en la siguiente imagen.

Configuración de Jail

El siguiente paso es configurar los jails.

Los Jails en Debian se se configuran sobre el archivo llamado defaults-debian.conf, que se encuentra en la ruta etc/fail2ban/jail.d/defaults-debian.conf.

Abre defaults-debian.conf desde la terminal

sudo nano /etc/fail2ban/jail.d/defaults-debian.conf

Nos muestra el contenido del archivo

[sshd] 
enabled = true

Esto significa que tengo habilitado el jail sshd.

Este jail tiene los parámetros de configuración heredados por [Default], pero lo mejor será crear unos parámetros específicos.

Añade las líneas en negrita, que son, el puerto de conexión, la ruta de log de eventos y el backend

[sshd]
enabled = true
port    = 2353
logpath = %(sshd_log)s
backend = systemd

Nota: Cambia port por el puerto que usas en tu servidor ssh

Reinicia el el servicio fail2ban así:

sudo systemctl restart fail2ban

Hasta aquí todo listo, ya solo queda comprobar que todo va bien.

Comprobaciones.

Vamos a realizar una serie comprobaciones para ver si se están ejecutando correctamente los servicios, estados y advertencias.

Test estado del servicio

Comprobamos el estado del servicio con:

sudo systemctl status fail2ban

Es posible que después de hacer una status, el servicio aparezca inactivo, como se muestra en la siguiente imagen.

Para arreglar esto haz lo siguente. En una terminal, escrbribe:

sudo echo "sshd_backend = systemd" >> /etc/fail2ban/paths-debian.conf

Reinicia el servicio con:

sudo systemctl restart fail2ban

Y volvemos a ver el estado de como está el servicio:

sudo systemctl status fail2ban

Ahora está todo correcto, el servicio aparece activo y corriendo.

Test estado general de fail2ban

Comprobamos el estado y la cantidad de jails en funcionamiento.

sudo fail2ban-client status

Test estado de Jails específicos

Comprobamos si una jail específica funciona, en mi caso solo tengo configurado ssh, así que ejecuta el siguiente comando:

sudo fail2ban-client status sshd

La salida nos muestra bastante información sobre las IPs baneadas, el número de intentos de conexión, el número de baneos etc etc

Visualizar el log de eventos

Veamos si el archivo log de fail2ban contiene algún error. Visualiza el archivo log en tiempo real para ver los cambios que se van produciendo instantáneamente.

Copia y pega el siguiente comando:

sudo tail -f /var/log/fail2ban.log

En la siguiente imagen verás que no aparece ningún error y se carga nuestro jail sshd

Test de Fail2ban

Fail2ban tiene un comando testear la configuración. Para esta comprobación tienes que usar este comando:

sudo fail2ban-client --test
Test de la configuración de fail2ban

Vaya! tenemos un mensaje de advertencia. No es un error, tampoco afectará al funcionamiento de fail2ban, pero se puede arreglar.

Corregir advertencia Warning IPV6

Para arreglar esto tendremos que abrir el archivo de configuración que se encuentra en /etc/fail2ban/fail2ban.conf

sudo nano /etc/fail2ban/fail2ban.conf

Ve al apartado [Definition], verás que está vacío y escribe debajo lo siguiente:

 allowipv6 = auto

Quedando de la siguiente manera:

Volvemos a repetir el test y ahora se habrá quitado el mensaje de advertencia.

Test de Baneo

Provocamos un ban sobre nosotros para ver si la configuración es correcta.

Intento entrar por ssh desde mi teléfono móvil con una contraseña errónea. Debe de haber 5 intentos de conexión y un baneo de 10 minutos.

Conexión baneada por excesos de inicio de sesión fallidos.

Al quinto intento nos banea y como vimos antes, hasta transcurridos 10 minutos no dejará que volvamos a probar.

Conexión baneada por excesos de inicio de sesión fallidos.

Pasados 10 minutos, tal como está configurado en [Default] se levanta el baneo y dará permiso para volver a dejarnos entrar.

Desbaneo de una IP a los 10 minutos.

Mi teléfono vuelve a dejarnos escribir la contraseña.

Desbanear una IP

Las IP baneadas pueden ser sacadas de la lista de ban sin tener que esperar al tiempo de ban por defecto. Para ello usa unban y la ip a desbanear.

sudo fail2ban-client unban 192.168.1.1

Envío de alertas por email.

Para que fail2ban envíe alertas por email, debes de tener instalado y configurado algún programa que envíe correos electrónicos. En mi caso uso sSMTP y la configuración que usaré en fail2ban, será con este programa.

sSMTP es un programa que envía correo electrónico desde un equipo a un servidor de correo configurado. Es decir que este no es un servidor de correo como si lo es sendmail o postfix sino que solo se encarga del envío de correos.

Si quieres saber cómo he configurado sSMTP puedes ver mi post «Script para monitorizar cambio de IP Pública» e ir al apartado 2- Instalar ssmtp y configurar la cuenta de correo y seguir los pasos que allí te indico.

Fail2ban te avisará cuando una IP sea baneada, aportando una valiosa información acerca de su procedencia, proveedor etc etc

Continuemos con nuestro de configuración jail.local. En nuestra terminal reglamentaria, escribe el siguiente comando:

sudo nano /etc/jail2ban/jail.local

Ve al apartado Actions

Busca la líneas que dicen, destemail y mta

# Some options used for actions

# Destination email address used solely for the interpolations in
# jail.{conf,local,d/*} configuration files.
destemail = root@localhost

# Sender email address used solely for some actions
sender = root@<fq-hostname>

# E-mail action. Since 0.8.1 Fail2Ban uses sendmail MTA for the
# mailing. Change mta configuration parameter to mail if you want to
# revert to conventional 'mail'.
mta = sendmail

En destemail escribe la dirección de correo a la que llegarán las alertas, por ejemplo mi_email@gmail.com
En mta aquí usa el modo en que tu programa envía mails, en el caso de sSMTP pondré mail

# Some options used for actions

# Destination email address used solely for the interpolations in
# jail.{conf,local,d/*} configuration files.
destemail = mi_email@gmail.com

# Sender email address used solely for some actions
sender = root@<fq-hostname>

# E-mail action. Since 0.8.1 Fail2Ban uses sendmail MTA for the
# mailing. Change mta configuration parameter to mail if you want to
# revert to conventional 'mail'.
mta = mail

Ve al Jail [sshd ] (recuerda que la ruta era etc/fail2ban/jail.d/defaults-debian.conf) y añadele la siguiente línea:

action = %(action_mwl)s

action = “mw” después de “action_” le dice a Fail2ban que le envíe correos electrónicos. “mwl” además adjunta los registros.

Ahora nuestra Jail sshd queda de la siguiente manera:

[sshd]
enabled = true
port    = 2353
logpath = %(sshd_log)s
backend = systemd
action = %(action_mwl)s

Reinicia el servicio fail2ban

sudo systemctl restart fail2ban

Puedes intentar loguearte por ssh de forma errónea por 5 veces consecutivas y recibirás un bonito mail de baneo.

Deja un comentario

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

Scroll al inicio