fail2ban consente di bloccare i tentativi di login bruteforce osservando i log applicativi e modificando dinamicamente iptables per bloccare gli IP che falliscono troppe volte il processo di autenticazione.
Sebbene Nextcloud preveda già un sistema integrato per ridurre i tentativi di login, fail2ban può risultare più performante.
Per configurare fail2ban, bisogna prima installarlo:
sudo apt install fail2ban
Successivamente vanno aggiunti i file che contengono il filtro per i messaggi di log e la definizione della “jail”.
Nella directory /etc/fail2ban/filter.d
aggiungere il file nextcloud.conf
con il seguente contenuto:
[Definition]
_groupsre = (?:(?:,?s*"w+":(?:"[^"]+"|w+))*)
failregex = ^{%(_groupsre)s,?s*"remoteAddr":"<HOST>"%(_groupsre)s,?s*"message":"Login failed:
^{%(_groupsre)s,?s*"remoteAddr":"<HOST>"%(_groupsre)s,?s*"message":"Trusted domain error.
datepattern = ,?s*"time"s*:s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"
Nella directory /etc/fail2ban/jail.d
aggiungere un altro file chiamato nextcloud.conf
con il seguente contenuto:
[nextcloud]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = nextcloud
maxretry = 3
bantime = 86400
findtime = 43200
logpath = /path/to/nextcloud.log
Ovviamente bisogna sostituire /path/to/nextcloud.log
con il path assoluto del file di log di Nextcloud, che in genere si trova nella “data directory” dell’applicazione.
Riavviare fail2ban e controllare che la jail per Nextcloud risulti attiva:
sudo systemctl restart fail2ban
sudo fail2ban-client status
L’output del secondo comando dovrebbe essere qualcosa del tipo:
Status
|- Number of jail: 2
`- Jail list: nextcloud, sshd
Nel file di configurazione generale delle jail (/etc/fail2ban/jail.conf
) è possibile inserire una lista di IP e reti da ignorare nel conteggio dei login falliti, ad esempio si può mettere in white list la propria rete LAN (la modifica necessita il riavvio del servizio fail2ban):
ignoreip = 192.168.1.0/24 192.168.2.0/24
Per osservare le statistiche sugli IP bloccati e sui login falliti per la jail di Nextcloud si può usare il comando fail2ban-client status nextcloud
, il cui output sarà qualcosa del genere:
Status for the jail: nextcloud
|- Filter
| |- Currently failed: 0
| |- Total failed: 3
| `- File list: /var/www/nextcloud/nextcloud_data/nextcloud.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 37.161.13.66
Gli indirizzi IP che falliscono 3 login consecutivi (opzione maxretry
nella configurazione della jail) nell’arco di 43200 secondi (opzione findtime
), vengono bloccati per 86400 secondi (opzione bantime
).
Un riavvio del server o del servizio fail2ban resetta la lista degli IP bloccati.
Per sbloccare un particolare indirizzo IP si può usare il comando:
fail2ban-client unban <IP>
Rieseguendo il comando fail2ban-client status nextcloud
dopo aver sbloccato l’IP, produce un output del genere:
Status for the jail: nextcloud
|- Filter
| |- Currently failed: 0
| |- Total failed: 3
| `- File list: /var/www/nextcloud/nextcloud_data/nextcloud.log
`- Actions
|- Currently banned: 0 <-----
|- Total banned: 1
`- Banned IP list: