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.

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.

Fail2ban está escrito en Python y el único requisito es tener instalado Python:

  • La rama Fail2ban 0.9.x requiere Python> u003d 2.6 o Python> u003d 3.2
  • La rama 0.8.x de Fail2ban requiere Python> u003d 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 fácil:

Primero, actualice sus paquetes, habilite el repositorio de Epel e instale fail2ban como se muestra.

# yum update
# yum install epel-release
# yum install fail2ban

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 de 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 use los siguientes comandos:

# systemctl start fail2ban
# systemctl enable fail2ban
# systemctl start sendmail
# systemctl enable sendmail

Cómo configurar Fail2ban en sistemas Linux

Por defecto, fail2ban usa los archivos .conf ubicados en/etc/fail2ban/que se leen primero. Sin embargo, estos pueden ser reemplazados por archivos .local ubicados en el mismo directorio.

Por lo tanto, el archivo .local no necesita incluir todas las configuraciones del archivo .conf , sino solo las que desea anular. Los cambios deben realizarse en los archivos .local , no en el .conf . Esto evitará que se sobrescriban los cambios al actualizar el paquete fail2ban.

Para el propósito de este tutorial, copiaremos el archivo fail2ban.conf existente en 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 puede editar son:

  • loglevel: este es el nivel de detalle que se registrará. Las posibles opciones son:
    • CRÍTICO
    • ERROR
    • ADVERTENCIA
    • AVISO
    • INFO
    • DEPURAR

    • STDOUT: generar cualquier dato
    • STDERR: muestra cualquier error
    • SYSLOG: registro basado en mensajes
    • Archivo: salida a un archivo

    Uno de los archivos más importantes de fail2ban es jail.conf , que define sus cárceles. Aquí es donde se definen los servicios para los que debe habilitarse fail2ban.

    Como mencionamos anteriormente, los archivos .conf pueden modificarse durante las actualizaciones, por lo que debe crear un archivo jail.local donde pueda aplicar sus 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é utilizando CentOS o Fedora, deberá cambiar el backend en jail.local de "auto" a "systemd".

    Si está usando Ubuntu/Debian, no es necesario realizar esta modificación, aunque ellos también usan systemd.

    El archivo de la cárcel 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
    

    Puede configurar la circunstancia después de la cual se bloquea una dirección IP. Para ese propósito, fail2ban usa bantime, findtime y maxretry.

    • bantime: este es el número de segundos que una dirección IP permanecerá prohibida (por defecto, 10 minutos).
    • tiempo de búsqueda: la cantidad de tiempo entre los intentos de inicio de sesión, antes de que se bloquee 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. (predeterminado 3).

    Por supuesto, querrá incluir ciertas direcciones IP en la lista blanca. 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 poner las direcciones IP que desea que se ignoren. Las direcciones IP deben estar separadas por espacios o comas.

    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 para 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 de 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 debe 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 es una 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/.

    Fail2ban viene con un cliente que se puede utilizar 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 para una cárcel específica, puede usar:

    # fail2ban-client status
    

    El resultado se verá similar a esto:

    Para la cárcel individual, puede ejecutar:

    # fail2ban-client status sshd
    

    En la captura de pantalla a continuación, verá que he fallado intencionalmente en varios inicios de sesión, por lo que fail2ban puede bloquear la dirección IP desde la que estaba tratando de conectarme:

    Fail2ban es un excelente sistema de prevención de intrusiones 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, se sentirá libre de cambiar y ampliar sus reglas.