Como proteger tu servidor Web con Fail2ban

sec

Para los que como yo tengáis un servidor web y queráis protegerlo de manera automática contra ataques informáticos, os recomiendo instalar la herramienta fail2ban, un software de código abierto y distribución libre adoptado en miles de servidores de todo el mundo con esa finalidad.

fail2ban
Su funcionamiento, permanente y en segundo plano, viene a controlar el acceso a distintos servicios de nuestro sistema, permitiéndonos definir acciones defensivas que se ejecutarán automáticamente, y de las que podremos llevar seguimiento en cualquier momento.

En este tutorial voy a explicar como instalarlo y configurarlo para:

Restringir el acceso a nuestro sistema a través de ssh, limitando el número de accesos con usuario y contraseña erróneos (por defecto no hay límite de intentos).

reload

Proteger nuestro servidor web de ataques de fuerza bruta o Ddos de la manera más eficiente, consumiendo el menor ancho de banda y tiempo de procesador posible.

attack

Pasos previos (actualizar nuestro sistema):

sudo apt-get update
sudo apt-get upgrade

Descarga del programa:

sudo apt-get install fail2ban

Configuración básica:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Una vez abierto el fichero de configuración buscaremos parámetros como:

bantime  (tiempo durante el que desconectaremos al atacante, en segundos)

findtime (tiempo en segundos durante el que mantendremos activo el número de intentos de un cliente)

maxretry (número de intentos)

Que podremos configurar con los siguientes valores:

bantime = 6000
findtime = 3000
maxretry = 3

Cuyo significado en este caso viene a decir que si durante un plazo de 3000 segundos (5 minutos) un cliente (dirección ip) accede incorrectamente más de 3 veces, dicha IP será bloqueada durante 6000 segundos (10 minutos).

Configuración avanzada:

En la configuración por defecto la supervisión del servicio ssh viene activada:

[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

Si queremos detenernos en este punto, bastará con guardar los cambios realizados con Ctrl + X , confirmando la grabación con S ó Y y Enter.

Seguidamente reiniciaremos el servicio con:

sudo service fail2ban restart

y comprobaremos que funciona con:

sudo fail2ban-client status ssh

Lo cual mostrará algo parecido a lo siguiente:

Status for the jail: ssh
|- filter
|  |- File list: /var/log/auth.log 
|  |- Currently failed: 0
|  `- Total failed: 323
`- action
   |- Currently banned: 11
   |  `- IP list: 123.31.34.248 122.194.229.39 39.184.118.112 91.224.161.71 123.129.90.220 219.82.22.0 27.159.234.8 116.31.116.24 62.210.180.230 183.93.195.79 218.56.106.106 
   `- Total banned: 17

El resultado puede ser sorprendente como en este caso, en el que en mi ejemplo, y en un periodo de menos de 24 horas se han producido 323 intentos ilegales de login a través de ssh a nuestra máquina, habiéndose bloqueado el acceso en estos momentos a 11 direcciones IP de un total de 17.

Si queréis ir algo más lejos y hacer extensivo el control a vuestro servidor web, bastará con volver al fichero de configuración:

sudo nano /etc/fail2ban/jail.local

y activar la supervisión para cada tipo de funcionalidad, os copio un  par de ejemplos:

# HTTP servers
#
[apache]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache*/*error.log
maxretry = 6

[apache-noscript]
enabled  = true
port     = http,https
filter   = apache-noscript
logpath  = /var/log/apache2/error.log
maxretry = 6

[apache-overflows]
enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache2/error.log
maxretry = 2

Como en el caso anterior, una vez finalizados los cambios los guardaremos con Ctrl + X, confirmando con S ó Y.

Reiniciaremos el servicio para que los cambios en la configuración tomen efecto:

sudo service fail2ban restart

Y comprobaremos que funciona con:

sudo fail2ban-client status apache

Si funciona correctamente nos mostrará algo similar a esto:

Status for the jail: apache
|- filter
|  |- File list: /var/log/apache2/error.log 
|  |- Currently failed: 0
|  `- Total failed: 22
`- action
   |- Currently banned: 2
   |  `- IP list: 191.96.249.54 191.96.249.53 
   `- Total banned: 2

Informando en este ejemplo (real) que ha habido un total de intentos de acceso no autorizado a nuestro servidor web (en este caso un ataque de fuerza bruta), que han tenido como consecuencia el bloqueo de la dos direcciones ip que aparecen.

fail2ban-stopping-scanners-e1426900530612

Para que os hagáis una idea el ataque desde esas dos direcciones Ip, ha pasado de saturar el servidor y consumir muchísimo ancho de banda a directamente no llegar al servicio, y tan solo consumir unos pocos bits/segundo, demostrándose mucho más eficaz y eficiente que la utilización de los módulos de seguridad de Apache.

Ánimo, divertiros y si necesitáis ayuda o cualquier aclaración no dudéis en contactarme.

Salu2

Santi

Esta entrada fue publicada en Herramientas de Administración, Raspberry Pi, Seguridad y Redes y etiquetada , , , , , , , . Guarda el enlace permanente.

Deja un comentario