Cómo utilizar Fail2ban para proteger su servidor Linux
Mejorar la seguridad de su servidor debería ser una de sus principales prioridades cuando se trata de administrar un servidor Linux. Al revisar los registros de su servidor, a menudo puede encontrar diferentes intentos de inicio de sesión por fuerza bruta, inundaciones web, búsqueda de exploits y muchos otros.
Con un software de prevención de intrusiones como fail2ban, puede examinar los registros de su servidor y agregar reglas de iptables adicionales para bloquear direcciones IP problemáticas.
Lea también: Cómo instalar Fail2Ban para proteger SSH en CentOS/RHEL 8
Este tutorial le mostrará cómo instalar fail2ban y configurar la configuración básica para proteger su sistema Linux de ataques de fuerza bruta.
Requisitos
Fail2ban está escrito en Python y el único requisito es tener Python instalado:
- La rama Fail2ban 0.9.x requiere Python >=2.6 o Python >=3.2
- La rama Fail2ban 0.8.x requiere Python >=2.4
- Acceso root a su sistema
- Opcionalmente, iptables o showewall y sendmail
Cómo instalar Fail2Ban en sistemas Linux
La instalación de fail2ban es relativamente sencilla:
Instalar Fail2Ban en CentOS/RHEL
Primero, actualice sus paquetes, habilite el repositorio Epel e instale fail2ban como se muestra.
yum update
yum install epel-release
yum install fail2ban
Instalar Fail2Ban en Debian/Ubuntu
Primero, actualice sus paquetes e instale fail2ban como se muestra.
apt-get update && apt-get upgrade -y
apt-get install fail2ban
Opcionalmente, si desea habilitar el soporte por correo (para notificaciones por correo), puede instalar sendmail.
yum install sendmail [On CentOS/RHEL]
apt-get install sendmail-bin sendmail [On Debian/Ubuntu]
Para habilitar fail2ban y sendmail utilice los siguientes comandos:
systemctl start fail2ban
systemctl enable fail2ban
systemctl start sendmail
systemctl enable sendmail
Cómo configurar Fail2ban en sistemas Linux
De forma predeterminada, fail2ban utiliza los archivos .conf
ubicados en /etc/fail2ban/ que se leen primero. Sin embargo, estos pueden ser anulados por archivos .local
ubicados en el mismo directorio.
Por lo tanto, no es necesario que el archivo .local
incluya todas las configuraciones del archivo .conf
, sino solo las que desea anular. Los cambios deben realizarse en los archivos .local
, no en .conf
. Esto evitará que se sobrescriban los cambios al actualizar el paquete fail2ban.
Para los fines de este tutorial, copiaremos el archivo fail2ban.conf existente a fail2ban.local.
cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
Ahora puede realizar los cambios en el archivo .local
utilizando su editor de texto favorito. Los valores que puedes editar son:
loglevel: este es el nivel de detalle que se registrará. Las opciones posibles son:
- CRÍTICO
- ERROR
- ADVERTENCIA
- AVISO
- INFORMACIÓN
- DEPURAR
logtarget: registra las acciones en un archivo específico. El valor predeterminado es /var/log/fail2ban.log. Sin embargo, puedes cambiar esto a:
- STDOUT: genera cualquier dato
Configurar Fail2ban jail.local
Uno de los archivos más importantes en fail2ban es jail.conf
que define tus cárceles. Aquí es donde defines los servicios para los cuales se debe habilitar fail2ban.
Como mencionamos anteriormente, los archivos .conf
se pueden modificar durante las actualizaciones, por lo que debes crear un archivo jail.local donde puedas aplicar tus modificaciones.
Otra forma de hacer esto es simplemente copiar el archivo .conf con:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
En caso de que estés usando CentOS o Fedora, necesitarás cambiar el backend en jail.local de “auto ” a “systemd ”.
Si estás usando Ubuntu/Debian, no es necesario realizar esta modificación, aunque ellos también usen systemd.
El archivo jail habilitará SSH de forma predeterminada para Debian y Ubuntu, pero no en CentOS. Si desea habilitarlo, simplemente cambie la siguiente línea en /etc/fail2ban/jail.local:
[sshd]
enabled = true
Tiempos de prohibición y reintento
Puede configurar las circunstancias después de las cuales se bloquea una dirección IP. Para ello, fail2ban utiliza bantime, findtime y maxretry.
- bantime: este es el número de segundos que una dirección IP permanecerá prohibida (el valor predeterminado es 10 min).
- findtime: la cantidad de tiempo entre intentos de inicio de sesión, antes de que se prohíba el host. (predeterminado 10 min). En otras palabras, si fail2ban está configurado para bloquear una dirección IP después de 3 intentos fallidos de inicio de sesión, esos 3 intentos deben realizarse dentro del período de tiempo de búsqueda (10 minutos).
- maxretry: número de intentos que se deben realizar antes de que se aplique una prohibición. (por defecto 3).
Dirección IP de la lista blanca
Por supuesto, querrás incluir en la lista blanca ciertas direcciones IP. Para configurar dichas direcciones IP, abra /etc/fail2ban/jail.local con su editor de texto favorito y descomente la siguiente línea:
ignoreip = 127.0.0.1/8 ::1
Luego, puede ingresar las direcciones IP que desea que se ignoren. Las direcciones IP deben estar separadas por espacios o comas.
Alertas de correo electrónico
Si desea recibir alertas por correo sobre el evento, deberá configurar los siguientes ajustes en /etc/fail2ban/jail.local:
- destemail – dirección de correo electrónico, donde recibirá la notificación.
- Nombre del remitente: el remitente que verá al recibir el mensaje.
- remitente: dirección de correo electrónico desde la que fail2ban enviará los correos electrónicos.
El mta (agente de transferencia de correo) predeterminado está configurado en sendmail.
Para recibir notificaciones por correo, también deberá cambiar la configuración de “acción” de:
Action = %(action_)s
A uno de estos:
action = %(action_mw)s
action = %(action_mwl)s
- %(action_mw)s: prohibirá el host y enviará un correo con un informe whois.
- %(action_mwl)s: prohibirá el host, proporcionará información whois y toda la información relevante del archivo de registro.
Configuración adicional de la cárcel Fail2ban
Hasta ahora hemos analizado las opciones de configuración básicas. Si desea configurar una cárcel, deberá habilitarla en el archivo jail.local. La sintaxis es bastante simple:
[jail_to_enable]
. . .
enabled = true
Donde deberías reemplazar jail_to_enable con la cárcel real, por ejemplo, “sshd ”. En el archivo jail.local, los siguientes valores estarán predefinidos para el servicio ssh:
[sshd]
port = ssh
logpath = %(sshd_log)s
Puede habilitar el filtro que ayudará a identificar si una línea en el registro falla. El valor del filtro es en realidad una referencia a un archivo con el nombre del servicio seguido de .conf. Por ejemplo: /etc/fail2ban/filter.d/sshd.conf.
La sintaxis es:
filter = service
Por ejemplo:
filter = sshd
Puede revisar los filtros existentes en el siguiente directorio: /etc/fail2ban/filter.d/.
Utilice el cliente fail2ban
Fail2ban viene con un cliente que puede usarse para revisar y cambiar la configuración actual. Dado que ofrece muchas opciones, puede consultar su manual con:
man fail2ban-client
Aquí verá algunos de los comandos básicos que puede utilizar. Para revisar el estado actual de fail2ban o de una cárcel específica, puede utilizar:
fail2ban-client status
El resultado será similar a este:
Para cárcel individual, puede ejecutar:
fail2ban-client status sshd
En la captura de pantalla a continuación, verá que intencionalmente fallé en varios inicios de sesión para que fail2ban pueda bloquear la dirección IP desde la que estaba intentando conectarme:
Conclusión
Fail2ban es un sistema de prevención de intrusiones excelente y bien documentado que proporciona seguridad adicional a su sistema Linux. Se necesita algo de tiempo para acostumbrarse a su configuración y sintaxis, pero una vez que se familiarice con él, podrá cambiar y ampliar sus reglas.