Cómo instalar y configurar Fail2Ban en CentOS 8 y Fedora 33

Fail2Ban es una utilidad de análisis de registro que analiza los archivos de registro de varios procesos y prohíbe las direcciones IP que generan demasiadas fallas de contraseña. Cuando se encuentra un intento de inicio de sesión, Fail2Ban agregará una nueva regla a iptables para bloquear la dirección IP del atacante, ya sea de manera temporal o permanente. También puede avisarle por correo electrónico de lo mismo.
Se centra principalmente en la detección de intrusiones a través de SSH, pero se puede configurar para que funcione con cualquier servicio que utilice archivos de registro.
requisitos previos
- Un servidor basado en Fedora 33 o CentOS 8 con un usuario no root con privilegios sudo.
- Instale el editor Nano porque eso es lo que usaremos.
$ sudo dnf install nano -y
Instalar Fail2Ban
Para instalar Fail2Ban en CentOS 8, primero debe instalar el repositorio EPEL Yum.
$ sudo dnf install epel-release
Fedora 33 viene con Fail2Ban.
Ejecute el siguiente comando para instalar Fail2Ban tanto en Fedora 33 como en CentOS 8.
$ sudo dnf install fail2ban
Una vez instalado, debemos habilitar el servicio.
$ sudo systemctl enable fail2ban
A continuación, inicie el servicio fail2ban.
$ sudo systemctl start fail2ban
Ahora puede comprobar el estado del servicio para ver si funciona correctamente.
$ sudo systemctl status fail2ban ? fail2ban.service - Fail2Ban Service Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2020-11-02 21:15:59 UTC; 5s ago Docs: man:fail2ban(1) Process: 19031 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS) Main PID: 19032 (f2b/server) Tasks: 3 (limit: 1125) Memory: 11.0M CPU: 96ms CGroup: /system.slice/fail2ban.service ??19032 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Starting Fail2Ban Service... Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Started Fail2Ban Service. Nov 02 21:15:59 howtoforge-tutorial fail2ban-server[19032]: Server ready
Configurar Fail2Ban
El servicio Fail2Ban mantiene sus archivos de configuración en el directorio /etc/fail2ban. Encontrará un archivo jail.conf en él. Este archivo generalmente se anula durante las actualizaciones de paquetes, por lo que no debe editarse.
En su lugar, todas las configuraciones deben realizarse en un nuevo archivo al que llamaremos jail.local. Las configuraciones en estos 2 archivos se pueden anular aún más a través de archivos del directorio /etc/fail2ban/jail.d/.
Las configuraciones se aplican en el siguiente orden:
- /etc/fail2ban/jail.conf
- etc/fail2ban/jail.d/*.conf, alfabéticamente
- /etc/fail2ban/jail.local
- /etc/fail2ban/jail.d/*.local, alfabéticamente
jail.conf contiene un [DEFAULT] sección seguida de secciones para servicios individuales. Cualquiera de estas secciones se puede anular definiéndolas en archivos .local.
Configurar jail.local
Crearemos un nuevo archivo jail.local.
$ sudo nano /etc/fail2ban/jail.local
Pegue el siguiente código en él.
[DEFAULT] # Ban hosts for one hour: bantime = 3600 # Override backend=auto in /etc/fail2ban/jail.conf backend = systemd [sshd] enabled = true
Prensa Control + X para cerrar el editor y pulsar Y cuando se le solicite guardar el archivo. Esto establece un nuevo tiempo de baneo predeterminado para todos los servicios, cambia el backend a systemd y habilita `sshd jail.
Reinicie Fail2ban para implementar los nuevos cambios.
$ sudo systemctl restart fail2ban
Podemos confirmar la configuración recién aplicada usando la utilidad fail2ban-client.
$ sudo fail2ban-client status Status |- Number of jail: 1 `- Jail list: sshd
También podemos obtener el estado detallado de cada cárcel específicamente de la siguiente manera.
$ sudo fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list:
Más ajustes
jail.conf proporciona muchas más configuraciones que se pueden personalizar usando el archivo /jail.local. Vamos a repasar algunos ajustes a continuación.
IP de la lista blanca
Puede incluir en la lista blanca/ignorar las direcciones IP para que no sean bloqueadas por Fail2ban usando el siguiente código.
[DEFAULT] ignoreip = 127.0.0.1/8 123.45.67.89
Si desea incluir IP en la lista blanca solo para ciertas cárceles, puede hacerlo a través de fail2ban-client.
$ sudo fail2ban-client set JAIL addignoreip 123.45.67.89
Reemplace JAIL en el comando anterior con el nombre de la cárcel para la que desea editar la configuración.
Tiempo de bloqueo y cantidad de reintentos
Hay 3 configuraciones que pueden establecer el tiempo y la cantidad de reintentos para una prohibición.
bantime – es el período de tiempo en segundos durante el cual una IP está prohibida. Para establecer una prohibición permanente, establezca este valor en un número negativo. El valor predeterminado es 10 minutos o 600 segundos.
findtime – es el tiempo que transcurre entre los intentos de inicio de sesión antes de que se establezca una prohibición. Este valor es siempre un número de segundos. Por ejemplo, si Fail2ban está configurado para prohibir una IP después de 5 intentos de inicio de sesión fallidos, esos 5 intentos deben ocurrir dentro del límite de tiempo de baneo establecido de 10 minutos.
maxretry: es el número de reintentos desde una sola dirección IP antes de que se imponga una prohibición. El valor predeterminado es 3.
Para personalizar esta configuración, pegue las siguientes líneas en el archivo \etc\fail2ban\jail.local bajo el [DEFAULT] sección.
bantime = 3600 findtime = 300 maxretry = 4
Alertas de correo electrónico
Para enviar alertas por correo electrónico, primero deberá instalar un Agente de transferencia de correo (MTA). Para nuestro propósito, instalaremos sendmail.
$ sudo dnf install sendmail
Para recibir el correo electrónico, agregue el siguiente código en el archivo \etc\fail2ban\jail.local en [DEFAULT] sección.
destemail = [email protected] sendername = Fail2Ban mta = sendmail action = %(action_mw)s
destemail se refiere a la identificación del correo electrónico de destino, que es la identificación en la que desea recibir los correos electrónicos, sendername se refiere al nombre del remitente, por lo que estamos usando Fail2Ban para ello. mta se refiere al Agente de transferencia de correo que se utiliza, que es sendmail aquí. Si está utilizando Postfix, utilice el correo de valor para la variable mta.
acción se refiere a la acción predeterminada que se lleva a cabo una vez que se detecta una intrusión. El valor predeterminado es %(action_)s, que solo bloquea al usuario. %(action_mw)s prohibirá y enviará un correo electrónico con un informe de Whois; mientras que %(action_mwl)s prohibirá y enviará un correo electrónico con el informe Whois junto con información de los archivos de registro relevantes. Esto también se puede cambiar en una base específica de la cárcel.
Configuraciones para cárceles individuales
Como ya sabemos, [DEFAULT] se aplica a todas las Cárceles, es hora de examinar algunas Cárceles específicas y sus configuraciones.
Cárcel SSHD
ya hemos definido [sshd] anteriormente en nuestro archivo jail.local. Podemos personalizarlo un poco más con el siguiente código.
[sshd] enabled = true port = ssh logpath = %(ssh_log)s
En este caso, estamos usando una variable predefinida ssh para el puerto que es el puerto SSH predeterminado. Si está utilizando un puerto SSH diferente, debe cambiarlo. logpath se refiere a la ubicación del archivo de registro para monitorear. %(ssh_log)s usa un valor definido en el archivo de configuración estándar de Fail2ban (/etc/fail2ban/paths-common.conf).
Cárcel de Nginx
Nginx tiene varios Jails que se pueden usar en Fail2Ban. Por ejemplo, si una parte de su sitio protegida con contraseña es atacada repetidamente, puede usar una sección [nginx-http-auth] en el archivo jail.local para eso.
[nginx-http-auth] enabled = true
También podemos agregar una sección llamada [nginx-botsearch] para detener las solicitudes a carpetas o ubicaciones que no existen.
[nginx-badbots] enabled = true
También hay otras cárceles de Nginx, pero no vienen preconfiguradas con Fail2Ban. Deben crearse manualmente y la mayoría de ellos pueden basarse en los de Apache con los que se envía Fail2Ban.
Filtros Fail2Ban y Failregexs
Hay otra configuración en la configuración de Fail2Ban llamada filtros. Los filtros deciden si una línea en el archivo de registro indica una autenticación fallida.
El valor del filtro en el archivo de configuración es una referencia a un archivo ubicado en el directorio /etc/fail2ban/filter.d con su extensión .conf eliminada.
Puede ver qué tipo de filtros están disponibles consultando el directorio.
$ ls /etc/fail2ban/filter.d
Verá 2 archivos de registro para Nginx en él; nginx-badbots.conf y nginx-http-auth.conf.
Estos archivos de configuración usan expresiones regulares (regex) para analizar archivos de registro. Estos se llaman Failregexs. Puede personalizar o crear nuevos filtros escribiendo sus propias expresiones regulares. No cubriremos estas expresiones regulares en profundidad porque están fuera del alcance de este tutorial.
Supervise los registros y el cortafuegos de Fail2Ban
Puede verificar el estado de Fail2Ban usando systemctl como se indicó anteriormente.
$ sudo systemctl status fail2ban
Para obtener un poco más de detalles, puede usar el comando journalctl.
$ sudo journalctl -b -u fail2ban
También puede usar fail2ban-client para consultar el estado de fail2ban-server o una cárcel individual.
$ sudo fail2ban-client status $ sudo fail2ban-client status jail_name
También puede consultar el archivo de registro de Fail2ban.
$ sudo tail -F /var/log/fail2ban.log
Puede enumerar las reglas actuales configuradas para iptables.
$ sudo iptables -L
También puede enumerar las reglas de iptables en un formato que refleje los comandos necesarios para habilitar esas reglas.
$ sudo iptables -S
Conclusión
Esto concluye nuestro tutorial sobre la instalación y configuración de Fail2Ban en un servidor basado en Fedora 33 o CentOS 8. Si tiene alguna pregunta, publíquela en los comentarios a continuación.