Apr 29, 2022 | News, Cyber Security | 0 commenti

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: