Fail2ban en raspberry pi

2017-10-05

Índice

  1. Instalación
  2. Configuración
  3. Nextcloud
  4. Referencias:

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.

img

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

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

Instalamos :

sudo 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:

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

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

sudo nano /etc/fail2ban/jail.local

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

ignoreip = 127.0.0.1/8

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

bantime  = 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

maxretry = 3

Bloqueo los intentos por ssh

[ssh]

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

Y en Nginx

[nginx-http-auth]

enabled = true
filter  = nginx-http-auth
port    = http,https
logpath = /var/log/nginx/error.log

Guardamos los cambios y reiniciamos el servicio :

sudo systemctl restart fail2ban.service

Podemos comprobar que funciona con

sudo fail2ban-client status

Status
|- Number of jail:  2
`- Jail list:       ssh, nginx-http-auth

Si queremos ver un servicio en particular :

sudo fail2ban-client status ssh

Status for the jail: ssh
|- filter
|  |- File list:        /var/log/auth.log
|  |- Currently failed: 0
|  `- Total failed:     0
`- action
   |- Currently banned: 0
   |  `- IP list:
   `- 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

img

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

[INCLUDES]
before = common.conf

[Definition]
failregex = Login failed.*Remote IP.*'<HOST>'
ignoreregex =

Añadimos lo siguiente a nuestro jail.local:

[nextcloud]

enabled  = true
port     = http,https
filter   = nextcloud
logpath  = /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 :

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

Reiniciamos nginx y fail2Ban:

sudo service nginx restart

sudo service fail2ban restart

Vemos si funciona :

sudo fail2ban-client status nextcloud
Status for the jail: nextcloud
|- filter
|  |- File list:        /var/www/nextcloud/nextcloud.log
|  |- Currently failed: 0
|  `- Total failed:     0
`- action
  |- Currently banned: 0
  |  `- IP list:
  `- Total banned:     0

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

Referencias:

Espero que te haya gustado, pasa un buen día. 🐧


Ingrese la dirección de su instancia