Prevenir intentos de accesos no validos al servidor con Fail2ban

fail2ban-portada

Fail2ban es un programa desarrollado en python que permite el baneo/bloqueo de IP’s basándose en el comportamiento de intentos fallidos para ganar acceso, reduciendo la tasa de autenticaciones e intentos incorrectos, que en algunas ocasiones utilizan métodos como la fuerza bruta.

En el peor de los casos, también podemos emplearlo para minimizar los ataques de DoS (Denial of Service), los cuales generan sobrecargas en el consumo de banda ancha y uso de CPU, perjudicando el rendimiento y tiempo de respuesta de los servicios.

A las IP baneadas pueden fijárseles reglas de castigo basados en tiempos de espera en los re-intentos, ya sea en todos los puertos o en algunos en específico.

Las reglas de castigo son definidas por el usuario que administra, en los archivos de configuración jail.conf.

Las acciones a ejecutar pueden estar definidas, por denegar el acceso a la IP origen que genera el ataque o bloquear puertos específicos, modificando las entradas correspondientes en el firewall, regularmente usando iptables.

Las reglas de castigo pueden de igual forma anularse basadas en periodos de tiempos. Ya que pueden existir casos provocados por usuarios legítimos, como el re-intento de contraseñas por simple olvido.

Los requerimientos mínimos para usar fail2ban es tener instalado python ≥ 2.3 . Y la instalación es muy sencilla, por mencionar en algunas distribuciones como Debian o Ubuntu:

sudo apt-get install fail2ban

Fail2ban es de fácil configuración, el archivo principal se encuentra en, /etc/fail2ban/fail2ban.conf , lo podemos modificar usando cualquier editor de texto como vi (editar como root).

directorios

La herramienta soporta una gran cantidad de servicios como (ssh, apache, ftp, etc)

Al ejecutar el comando:

fail2ban-client -h

podemos visualizar algunas de las opciones para configurar fail2ban-client (el frontend de fail2ban)

server client

Las opciones del comando fail2ban-client se ejecutan primeramente situándonos en el modo interactivo del comando con la opcion -i

4

Para este ejemplo del Jail List: ssh podemos observar la regla aplicada en el archivo de configuración /etc/fail2ban/jail.conf

root@Angerlinux: /etc/fail2ban# vi| jail.conf

7ssh Podemos ver en funcionamiento de la tool en la siguiente imagen, donde se aprecia con detalle la lectura sobre el log /var/log/auth.log, el registro de su propia auditoría por parte de fail2ban /var/log/fail2ban y el equipo donde se realiza la prueba que esta virtualizado en windows.

8

Al momento de realizar el baneo de la IP sera agregada como regla al iptables, donde permanecerá en la regla, según el tiempo de baneo que se especifique en la configuración del archivo /etc/fail2ban/fail2ban.conf

iptables

Ahora lo único que queda es analizar los servicios que tenemos instalados en nuestros servidores y determinar las reglas a implementar.

6 thoughts on “Prevenir intentos de accesos no validos al servidor con Fail2ban”

  1. tannhausser says:

    Buen post amigo @anger, se ve una herramienta interesante para todo aquel que trabaje con servidores o quiere evitar intrusos en sus sistemas 🙂

  2. BGBgus says:

    Muy útil!

  3. x-man says:

    Recuerdo haberlo usado en un pequeño servidor que tuve hace un tiempo con “Ubuntu Server” y hay que ver la de ataques que soporto, recuerdo uno que la IP venia de Korea. Voy a ver como le va con el Lagarto.

    Gracias por compartir.

    Saludos

    1. x-man says:

      En openSUSE 13.1 con KDE 4.13.3 Kernel 3.15.6-2.gedc5ddf-desktop x86_64 (64 bit), da un error cuando quieres activarlo para SSH, esta dado porque no encuentra el archivo “sshd.log” que debía estar en /var/log/sshd.log. Solución crear este archivo “sshd.log” en la ruta “/etc/rsyslog.d/sshd.log”, lo editamos y le ponemos la linea siguiente: ” if $programname == ‘sshd’ then /var/log/sshd.log ” (sin las comillas), reiniciamos el servicio .”systemctl restart rsyslog” y ahora funciona sin problemas. Lo probé desde mi Cell y al introducir contraseña errónea varias veces, me bloqueo la IP que tenia asignada el cell en ese momento.

      2014-07-24 09:26:53,027 fail2ban.actions[7802]: WARNING [ssh-iptables] Ban 172.56.23.247
      2014-07-24 09:26:59,130 fail2ban.actions[7802]: INFO [ssh-iptables] 172.56.23.247 already banned
      2014-07-24 09:28:15,203 fail2ban.actions[7802]: INFO [ssh-iptables] 172.56.23.247 already banned
      2014-07-24 09:28:21,209 fail2ban.actions[7802]: INFO [ssh-iptables] 172.56.23.247 already banned
      2014-07-24 09:36:53,682 fail2ban.actions[7802]: WARNING [ssh-iptables] Unban 172.56.23.247

      Perdón por extenderme, espero pueda ayudar. 😉

  4. carlosky77 says:

    Gracias por tus aportes. Parece que el nick anterior era más acorde. Por el momento lo voy a guardar en los bookmarks ya que en un plazo mediano lo voy a necesitar.

  5. Juan Carlos García says:

    Lo tengo en un servidor personal y todos los meses me avisa de dos o tres baneos sobre todo de empresas de teleco chinas

Deja un comentario