Fail2ban en raspberry pi
2017-10-05
Índice
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.
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
Referencias:
- https://www.eduardocollado.com/2017/08/02/podcast-38-fail2ban/
- http://www.fail2ban.org
- https://miraspberrypi.wordpress.com/2016/07/28/nextcloud-en-raspbian/
Espero que te haya gustado, pasa un buen día. 🐧