systemadmin.es > Seguridad > Instalar y configurar fail2ban

Instalar y configurar fail2ban

fail2ban es un sistema de prevención de intrusiones basado en patrones. Durante mucho tiempo he usado DenyHosts, pero fail2ban me parece mucho mas flexible. Vamos a ver como instalarlo y configurar algunos filtros que nos vienen por defecto:

Al ser un programa escrito en Python la instalación no tiene mucho misterio. Podemos hacerlo de la misma forma en por código fuente:

wget http://downloads.sourceforge.net/project/fail2ban/fail2ban-stable/fail2ban-0.8.4/fail2ban-0.8.4.tar.bz2?use_mirror=ovh
tar xjf fail2ban-0.8.4.tar.bz2
cd fail2ban-0.8.4
python setup.py install

O bien simplemente mediante el gestor de paquetes yum:

# yum install fail2ban

Para configurar fail2ban deberemos tener en cuenta los siguientes ficheros:

Mediante /etc/fail2ban/fail2ban.conf se define una configuración muy genérica:

  • loglevel: Nivel de detalle que queda guardado en los logs
  • logtarget: Dónde se guarda el log. Sus posibles valores són:
    • STDOUT
    • STDERR
    • SYSLOG
    • Nombre de fichero
  • socket: socket para comunicar el cliente (fail2ban-client) con el daemon

Dentro de /etc/fail2ban/filter.d/ podemos encontrar varios patrones predefinidos que podemos usar:

# ls /etc/fail2ban/filter.d/
apache-auth.conf     apache-noscript.conf   courierlogin.conf  dovecot.conf  lighttpd-fastcgi.conf  php-url-fopen.conf  pure-ftpd.conf  sieve.conf      vpopmail.conf     wuftpd.conf
apache-badbots.conf  apache-overflows.conf  couriersmtp.conf   exim.conf     named-refused.conf     postfix.conf        qmail.conf      sshd.conf       vsftpd.conf       xinetd-fail.conf
apache-nohome.conf   common.conf            cyrus-imap.conf    gssftpd.conf  pam-generic.conf       proftpd.conf        sasl.conf       sshd-ddos.conf  webmin-auth.conf

Por otro lado dentro de /etc/fail2ban/action.d/ tenemos las acciones que podemos aplicar al encontrar los patrones en los logs:

# ls /etc/fail2ban/action.d/
complain.conf   ipfilter.conf           iptables.conf                iptables-new.conf   mail-whois.conf        sendmail-buffered.conf  sendmail-whois-lines.conf
dshield.conf    ipfw.conf               iptables-multiport.conf      mail-buffered.conf  mail-whois-lines.conf  sendmail.conf           shorewall.conf
hostsdeny.conf  iptables-allports.conf  iptables-multiport-log.conf  mail.conf           mynetwatchman.conf     sendmail-whois.conf

Para configurar los patrones a buscar y que acción aplicar tenemos el fichero /etc/fail2ban/jail.conf. En dicho fichero podemos encontrar en la sección DEFAULT las siguientes opciones:

  • ignoreip: Listado de IPs separadas por espacios que no queremos que sean baneadas
  • backend: Indicamos el método por el que se leerán los logs. Las opciones són:
    • gamin: Mediante Gamin controla los cambios en los ficheros
    • polling: Comprueba periódicamente los cambios en los ficheros, en este caso no es necesario tener librerías complementarias
    • auto: Escoge por defecto gamin y si no puede usarlo para a polling
  • findtime: Tiempo durante el cual se consideran los reintentos
  • maxretry: Número máximo de reintentos fallidos dentro del findtime antes de ser baneado

A continuación de estos valors por defecto debemos añadir que quetemos monitorizar.

Por ejemplo, para proteger el daemon SSH mediante iptables y que nos avise por mail con el whois de la IP deberemos añadir lo siguiente en el fichero /etc/fail2ban/jail.conf:

[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=22, protocol=tcp]
           sendmail-whois[name=SSH, dest=jordi@systemadmin.es david@systemadmin.es, sender=fail2ban@systemadmin.es]
logpath  = /var/log/secure
maxretry = 5

Primero de todo, entre corchetes, definimos el nombre que le queremos dar a la combinación filtro-acción. A continuación las opciones són:

  • enabled: Podemos activar y deactivar las reglas mediante esta opción. Para habilitar el monitor usamos un 1 y un 0 para deshabilitarlo
  • filter: Filtro o conjunto de filtros presentes dentro de /etc/fail2ban/filter.d/ que buscaran patrones dentro del fichero de log
  • actionAcción o conjunto de acciones a realizar en el caso que se cumplan las condiciones
  • logpath: Fichero contra el cual se buscan los patrones

Además podemos sobrescribir las opciones generales, por ejemplo cambiar el maxretry por cualquier otro valor.

En el caso del ejemplo, se buscan intentos fallidos de login por SSH y las acciones que se producen són:

  • iptables: Con las opciones “[name=SSH, port=22, protocol=tcp]” indicamos que cree una chain con el nombre SSH (fail2ban-SSH) que bloquee la IP que ha fallado por el puerto 22 protocolo TCP
  • correo: Con las opciones “[name=SSH, dest=jordi@systemadmin.es david@systemadmin.es, sender=fail2ban@systemadmin.es]” indicamos el nombre identificativo del servicio (SSH), la o las direcciones destino y la dirección que queremos que aparezca como originante

En el caso que se produzca un baneo, se añade la IP en la chain bloqueando según los parámetros y nos avisará mediante un correo como el siguiente:

Hi,

The IP 1.2.3.4 has just been banned by Fail2Ban after
5 attempts against SSH.


Here are more information about 1.2.3.4:

[Querying whois.arin.net]
[Redirected to whois.apnic.net]
[Querying whois.apnic.net]
[whois.apnic.net]
% [whois.apnic.net node-3]
% Whois data copyright terms    http://www.apnic.net/db/dbcopyright.html

inetnum:        1.2.3.0 - 1.2.3.255
netname:        Debogon-prefix
descr:          APNIC Debogon Project
descr:          APNIC Pty Ltd
country:        AU
admin-c:        GM85-AP
tech-c:         GM85-AP
mnt-by:         APNIC-HM
mnt-routes:     MAINT-AU-APNIC-GM85-AP
status:         ASSIGNED PORTABLE
changed:        hm-changed@apnic.net 20100122
changed:        hm-changed@apnic.net 20100203
source:         APNIC

route:          1.2.3.0/24
descr:          APNIC debogon project testing
origin:         AS9838
country:        AU
mnt-by:         MAINT-AU-APNIC-GM85-AP
changed:        hm-changed@apnic.net 20100203
source:         APNIC

person:         George Michaelson
address:        PO Box 2131
address:        Milton,  QLD 4064
address:        Australia
country:        AU
phone:          +61-7-3858-3100
fax-no:         +61-7-3858-3199
e-mail:         ggm@apnic.net
nic-hdl:        GM85-AP
mnt-by:         MAINT-AU-APNIC-GM85-AP
changed:        ggm@apnic.net 20010306
changed:        ggm@apnic.net 20010720
source:         APNIC

6 comments to “Instalar y configurar fail2ban”

  1. Excelente, la verdad que fail2ban es una muy buena herramienta para evitar ataques DoS al servicio SSH

  2. Me ha servido de mucho !!!

  3. Yo coincido con danyx, es una buena herramienta.
    En nuestro caso lo usamos para evitar que nos hagan fuerza bruta a un vsftpd.

    Un saludo

  4. Sólo una nota que me acaba de ocurrir, al trabajar con /var/log/secure el servidor ssh debe volcar ahí el log, esto se consigue configurando en /etc/ssh/sshd_config esto:

    SyslogFacility AUTHPRIV

    En una máquina que estaba configurando estaba como AUTH sólo y no estaba escribiendo el log.

    Saludos

  5. Una pregunta, una vez que una ip haya sido bloqueado, como se puede hacer para desbloquearla?

  6. Al final siempre acabo mirandote.

    Saludos Jordi.

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>