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

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

  1. Un servidor basado en Fedora 33 o CentOS 8 con un usuario no root con privilegios sudo.
  2. 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:

  1. /etc/fail2ban/jail.conf
  2. etc/fail2ban/jail.d/*.conf, alfabéticamente
  3. /etc/fail2ban/jail.local
  4. /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.

Deja una respuesta

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