Fail2ban en raspberry pi

4 minutos de lectura

Escuchando el podcast de Eduardo Collado descubrí un servicio que protege de los ataques por fuerza bruta a nuestros servidores, fail2ban y aunque no tengo expuesta mi nube privada al exterior, me conecto siempre utilizando Openvpn, me dio por experimentar y probar, que para eso me compre la raspberry pi.

Por cierto en la ultima versión ne Nextcloud ya viene por defecto activo la protección de seguridad contra ataques por diccionario.

[[/images/2017/10/fail2ban/fail2ban1.png].

El funcionamiento de Fail2ban es muy sencillo, si intentamos hacer login a uno de los servicios que hemos configurado y se produce un determinado numero de errores, bloqueamos esa dirección IP por el tiempo que le indiquemos en el fichero de configuración.

Instalación

Antes de instalar fail2ban, como siempre, actualizamos el sistema

1sudo apt-get update && sudo apt-get upgrade -y

Instalamos :

1sudo apt-get install fail2ban

Configuración

El fichero de configuración se estructura en pequeñas partes llamadas jaulas (jail) en las que vamos configurando los servicios a auditar.

Por defecto vienen predefinidos una serie de filtros, para habitarlos, simplemente tendremos que cambiar false por true.

fail2ban busca el fichero de configuración jail.local y si no lo encuentra enjutará la configuración del fichero jail.conf.

Por lo tanto es buena idea trabajar con una copia del fichero original:

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

Abrimos el fichero de cofiguación para configurar fail2ban y habilitar los servicio a auditar :

1sudo nano /etc/fail2ban/jail.local

Si no queremos auditar una determinada ip o tramo de red podemos modificar el siguiente valor:

1ignoreip = 127.0.0.1/8

Por defecto el tiempo que va a estar bloqueada una dirección IP es de 600 segundos (10 minutos)

1bantime  = 600

De forma global el número máximo de intentos fallidos antes de bloquear la IP es de tres, podemos poner el valor que creamos oportuno cambiando

1maxretry = 3

Bloqueo los intentos por ssh

1[ssh]
2
3enabled  = true
4port     = ssh
5filter   = sshd
6logpath  = /var/log/auth.log
7maxretry = 6

Y en Nginx

1[nginx-http-auth]
2
3enabled = true
4filter  = nginx-http-auth
5port    = http,https
6logpath = /var/log/nginx/error.log

Guardamos los cambios y reiniciamos el servicio :

1sudo systemctl restart fail2ban.service

Podemos comprobar que funciona con

1sudo fail2ban-client status
2
3Status
4|- Number of jail:  2
5`- Jail list:       ssh, nginx-http-auth

Si queremos ver un servicio en particular :

 1sudo fail2ban-client status ssh
 2
 3Status for the jail: ssh
 4|- filter
 5|  |- File list:        /var/log/auth.log
 6|  |- Currently failed: 0
 7|  `- Total failed:     0
 8`- action
 9   |- Currently banned: 0
10   |  `- IP list:
11   `- Total banned:     0

Nextcloud

Como digo Nextcloud 12 ya trae un modulo para protegerse de los ataques por fuerza bruta. aun así, os dejo la forma de auditar los accesos a nextcloud a través de fail2ban

Creamos el fichero /etc/fail2ban/filter.d/nextcloud.conf con el siguiente contenido:

1[INCLUDES]
2before = common.conf
3
4[Definition]
5failregex = Login failed.*Remote IP.*'<HOST>'
6ignoreregex =

Añadimos lo siguiente a nuestro jail.local:

1[nextcloud]
2
3enabled  = true
4port     = http,https
5filter   = nextcloud
6logpath  = /var/www/nextcloud/nextcloud.log

Añadimos los siguientes parámetros al config.php en mi caso esta situado en /var/www/nextcloud/config/config.php :

1'log_type' => 'owncloud',
2'logtimezone' => 'Europe/Madrid',
3'logfile' => '/var/www/nextcloud/nextcloud.log',

Reiniciamos nginx y fail2Ban:

1sudo service nginx restart
2
3sudo service fail2ban restart

Vemos si funciona :

 1sudo fail2ban-client status nextcloud
 2Status for the jail: nextcloud
 3|- filter
 4|  |- File list:        /var/www/nextcloud/nextcloud.log
 5|  |- Currently failed: 0
 6|  `- Total failed:     0
 7`- action
 8  |- Currently banned: 0
 9  |  `- IP list:
10  `- Total banned:     0

Si quieres profundizar mas sobre el uso de fail2ban tienes un manual en español

Referencias: