Fail2ban para prevenir accesos no deseados en un servidor

Categoría:  Sysadmin
Fecha: 03/07/2024
Existen múltiples motivos por lo que una persona puede crear una web, desde hacerlo en ratos libres de ocio a utilizarla para gestionar un negocio o como ecommerce. No obstante, lo que está claro es que para que la web esté accesible de forma pública, necesitaremos alojarla en un servidor, y si somos nosotros mismos los que lo gestionamos (ya sea nuestro o para un tercero), un aspecto importante para nosotros será seguramente proteger el mismo de accesos no deseados. Para ello, podemos beneficiarnos del uso de firewalls u otras aplicaciones que nos permitan establecer medidas de seguridad y bloquear estos accesos. Una de las herramientas que podemos utilizar para esta tarea, es Fail2Ban. [elementor-template id="80835"]

Qué es fail2ban

Fail2ban es una aplicación que monitoriza los logs de un servidor y, en base a la configuración establecida, bloquea por un tiempo preestablecido las IPs desde las que se realicen un número determinado de intentos de acceso (fallidos) al servidor. Esta aplicación nos permite monitorizar varios servicios: SSH, FTP, el puerto de acceso al panel de control del servidor, etc. permitiéndonos así proteger nuestro servidor y las instalaciones que tengamos alojadas en el mismo de un posible acceso por fuerza bruta. Cabe destacar que Fail2ban no es un firewall en sí mismo, sino que se complementa con otras herramientas (generalmente iptables) para bloquear las IPs en base a determinadas reglas (también conocidas como jail).
Fail2ban funciona mediante el bloqueo de IPs en base a intentos de acceso fallidos de forma repetida, por lo que para un ataque cuyo origen sean múltiples IPs podría no ser efectivo

Cómo instalar fail2ban en un servidor Linux

Para instalar Fail2ban necesitaremos disponer de un servidor VPS (o servidor dedicado) y acceso root al mismo.
Si dispones de un Servidor VPS Optimizado contratado con nosotros, este servicio se sustituye por CSF, que incluye funciones similares (además de otras adicionales), por lo que, si existe un servicio con la misma función en el servidor, no sería recomendable instalar esta aplicación de forma adicional.
A continuación, vamos a ver cómo instalar fail2ban en un VPS con VestaCP o RaiolaCP:
dnf install fail2ban
Habilitamos el servicio (para que se inicie al arrancar el sistema):
systemctl enable fail2ban
Por último, podemos iniciar el servicio con:
systemctl start fail2ban
Una vez instalado y activo, podemos verificar que funciona ejecutando el comando "status":
fail2ban-client status
fail2ban En otros entornos es posible que necesitemos utilizar otro comando (por ejemplo, si utilizamos Debian o versiones anteriores de CentOS, respectivamente):
apt install fail2ban
yum install fail2ban

Cómo configurar fail2ban en un servidor Linux

En la mayoría de las ocasiones, es posible que no necesitemos modificar la configuración predeterminada de Fail2ban, no obstante, si necesitamos hacer cambios en la misma, debemos tener en cuenta en qué se basa el funcionamiento de esta aplicación:
  • filter: establece las expresiones regulares que se utilizarán para ‘analizar’ los logs en búsqueda de patrones de repetición.
  • action: establece las acciones a realizar si se detecta alguna IP cuyo comportamiento coincida con alguno de los ‘filter’ establecidos.
  • jail: cada uno de los servicios a los que se aplicarán un conjunto de acciones definidas en «action» en base a las coincidencias establecidas en "filter".
Las modificaciones en la configuración de Fail2ban únicamente deberemos realizarlas si tenemos conocimientos en la gestión de servidores. Si necesitas ayuda para configurar Fail2Ban en tu servidor VPS o servidor dedicado, contacta con nosotros.
La configuración por defecto se establece normalmente en el fichero:
/etc/fail2ban/jail.conf
En este podremos ver toda la configuración, en la que se incluyen algunas opciones que nos podría interesar modificar:
  • ignoreip: nos permite añadir IPs a ignorar, es decir, que no se van a bloquear, aunque superen el máximo de intentos fallidos configurados. Puede ser útil configurar nuestra propia IP.
  • bantime: tiempo por el que se bloquearán las IPs, el valor por defecto se establece en segundos, salvo que agreguemos ‘m’ para indicar minutos, por ejemplo: 10m.
  • findtime: intervalo de tiempo en el que se buscarán los intentos de acceso fallidos.
  • maxretry: número de intentos de acceso permitidos en el período de tiempo que se defina en «findtime».
En la mayoría de ocasiones, tendremos un segundo fichero: jail.local, que nos permitirá sobrescribir la configuración predeterminada: instalar fail2ban linux En este fichero podremos ver todas los servicios que tenemos disponibles para monitorizar y la siguiente información sobre ellos, por ejemplo: [ssh-iptables]  –  correspondiente al servicio SSH del servidor. enabled  = true – establece que este servicio está actualmente monitorizado por fail2ban. filter   = sshd – indica el filtro que utilizará esta jail, en este caso lo que se haya definido en el fichero: /etc/fail2ban/filter.d/sshd.conf. action   = vesta[name=SSH]  – indica las acciones a realizar, que serían las establecidas en el fichero: /etc/fail2ban/action.d/vesta.conf. logpath  = /var/log/secure – indica la ruta del fichero .log correspondiente. maxretry = 5 – se permitirían 5 intentos de acceso fallidos (en el tiempo que se defina en «findtime»). En este caso, vemos que no se establece el valor "findtime", por lo que se utilizaría el definido en el apartado [DEFAULT] del fichero jail.conf: fail2ban linux
Si no disponemos del fichero jail.local, podemos crearlo y realizar posteriormente en él los cambios que necesitemos
En las ocasiones en las que instalemos Fail2Ban de forma independiente al panel de control, seguramente necesitemos crear a mano el fichero jail.local, e ir habilitando en el mismo las jail que consideremos. Si queremos habilitar por ejemplo las jails de SSH y FTP, ambas con un máximo de 4 intentos en 5 minutos y se bloqueen las IPs por 60 minutos, tendríamos que añadir los siguientes parámetros en el fichero jail.local:
[vsftpd]

enabled = true

maxretry = 4

bantime = 5m

findtime = 60m

[sshd]

enabled = true

maxretry = 4

bantime = 5m

findtime = 60m
Finalmente, reiniciamos el servicio con el siguiente comando para que se apliquen las modificaciones:
systemctl restart fail2ban
Si no estamos seguros de cómo se denomina cada una de las jail en nuestro caso, podemos simplemente copiar el fichero por defecto:
cp -a /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
De este modo, podremos realizar los cambios en el apartado general, que sería el marcado con [DEFAULT] o bien, ir editando cada una de las jail, para ello tendremos que buscar las líneas posteriores a [JAILS] e ir habilitando cada una de ellas o realizando los cambios necesarios.

Comandos útiles para configurar Fail2ban

Para gestionar Fail2Ban, podemos hacerlo a través de una conexión SSH.
Podemos ver la ayuda completa de Fail2ban si ejecutamos «fail2ban-client» en el servidor.
A continuación, vamos a ver algunos ejemplos de comandos que pueden sernos de ayuda:
  • Consultar los servicios actualmente protegidos por Fail2ban:
fail2ban-client status
  • Bloquear manualmente una IP:
fail2ban-client set <JAIL> banip IP
  • Por ejemplo, para bloquear la IP 82.154.36.45 para el servicio SSH, sería el siguiente:
fail2ban-client set ssh-iptables banip 82.154.36.45
  • También podemos consultar que la IP se ha bloqueado correctamente ejecutando:
fail2ban-client status ssh-iptables
  • Desbloquear manualmente una IP:
fail2ban-client set ssh-iptables unbanip 82.154.36.45
  • Consultar servicios y las IPs bloqueadas en los mismos:
fail2ban-client banned
fail2ban
  • Consultar valor "findtime" para uno de los servicios en concreto (nos dará el valor en segundos):
fail2ban-client get ssh-iptables findtime
Estos solo son algunos ejemplos de comandos interesantes para gestionar y configurar Fail2Ban, pero hay unos cuantos más que puedes ver en su documentación oficial. Si necesitas ayuda para configurar correctamente Fail2Ban en tu servidor VPS o servidor dedicado y no tienes un servicio administrado, contacta con nosotros y te ayudaremos.
Mila Fernandez
Mila Fernandez

Formo parte del departamento de WordPress, apasionada de la lectura, tengo la habilidad de saberme diálogos de Harry Potter de memoria y mi Batman favorito es el de Nolan.

Artículos relacionados

Si te ha gustado este post, aquí tienes otros que pueden ser de tu interés. ¡No dejes de aprender!

Tenemos 0 comentarios en "Fail2ban para prevenir accesos no deseados en un servidor"

Deja una respuesta

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

¿Vienes desde otro proveedor?

¡Sin problema! Te migramos gratis y sin cortes
Migraciones de hosting gratis