Cómo usar Fail2ban para asegurar su servidor Linux


Mejorar la seguridad de su servidor debe 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 de fuerza bruta, inundaciones web, búsqueda de explotaciones y muchos otros.

Con un software de prevención de intrusiones como fail2ban puede examinar los registros de su servidor y agregar reglas iptables adicionales para bloquear las 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 python instalado:

  • Fail2ban branch 0.9.x requires Python >=2.6 or Python >=3.2
  • Fail2ban branch 0.8.x requires Python >=2.4
  • Root access to your system
  • Optinally, iptables or showewall and sendmail

Cómo instalar Fail2Ban en sistemas Linux

La instalación de fail2ban es relativamente fácil:

Primero actualice sus paquetes, habilite el repositorio 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 de 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

De forma predeterminada, fail2ban utiliza los archivos .conf ubicados en /etc/fail2ban/ que se leen primero. Sin embargo, estos pueden ser anulados por los 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 reemplazar. Los cambios se deben realizar en los archivos .local y 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 existente fail2ban.conf 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 – this is the level of detail to be logged. Possible options are:
    • CRITICAL
    • ERROR
    • WARNING
    • NOTICE
    • INFO
    • DEBUG
    • STDOUT – output any data
    • STDERR – otuput any errors
    • SYSLOG – message based logging
    • File – output to a file

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

    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 < fuerte> "auto" a "systemd" .

    Si está utilizando Ubuntu/Debian , no es necesario realizar esta modificación, aunque también usen 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 use bantime , findtime y maxretry .

    • bantime – this is the number of seconds that an IP address will remain banned (default 10 min).
    • findtime – the amount of time between login attempts, before the host is banned. (default 10 min). In other words, if fail2ban is set to block an IP address after 3 failed login attempts, those 3 attempts, must be done within the findtime period (10 mins).
    • maxretry – number of attempts to be made before a ban is applied. (default 3).

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

    Si desea recibir alertas de correo en caso de un evento, deberá configurar los siguientes ajustes en /etc/fail2ban/jail.local :

    • destemail – mail address, where you will receive the notificatoin.
    • Sendername – the sender that you will see when receiving the message.
    • sender – email address from which fail2ban will send the emails.

    La mta ( agente de transferencia de correo ) predeterminada está configurada en sendmail .

    Para recibir la notificación de 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 – will ban the host and send mail with a whois report.
    • %(action_mwl)s – will ban the host, provide whois info and all relevant information from the log file.

    Configuración adicional de la cárcel Fail2ban

    Hasta ahora hemos visto las opciones de configuración básica. 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ía reemplazar jail_to_enable con la cárcel real, por ejemplo "sshd" En el archivo jail.local , los siguientes valores será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 usar para revisar y cambiar la configuración actual. Ya que ofrece muchas opciones, puedes ir a través de su manual con:

    # man fail2ban-client 
    

    Aquí verás algunos de los comandos básicos que puedes usar. 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, puedes correr:

    # fail2ban-client status sshd
    

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

    Fail2ban es un excelente sistema de prevención de intrusiones bien documentado que brinda seguridad adicional a su sistema Linux. Requiere algo de tiempo para acostumbrarse a su configuración y sintaxis, pero una vez que se familiarice con ella, se sentirá libre de cambiar y ampliar sus reglas.