Fail2ban en raspberry pi
— Carlos M.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
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

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