Proteggere SSH con Fail2ban su Ubuntu 24.04: guida passo-passo
Come installare e configurare Fail2ban su Ubuntu 24.04 per bloccare automaticamente gli attacchi brute force contro SSH: jail dedicata, test del ban e sblocco di un IP.
Chiunque gestisca un server Linux raggiungibile da internet lo sa: appena la porta SSH è esposta, iniziano ad arrivare tentativi di accesso automatizzati da bot che provano combinazioni di username e password a ripetizione. È il classico attacco brute force. Una password robusta o l'autenticazione con chiave riducono già molto il rischio, ma non impediscono ai bot di continuare a bussare, occupando risorse e riempiendo i log. La soluzione più diffusa per arginare il problema si chiama Fail2ban, e in questa guida vediamo come installarla e configurarla passo passo su Ubuntu 24.04 LTS (Noble Numbat).
Cos'è Fail2ban e come funziona
Fail2ban è un servizio (demone) che analizza in tempo reale i file di log del sistema — nel nostro caso quelli relativi agli accessi SSH — alla ricerca di pattern che indicano tentativi di login falliti. Quando lo stesso indirizzo IP supera un certo numero di tentativi falliti in un dato intervallo di tempo, Fail2ban interviene creando automaticamente una regola del firewall che blocca quell'IP per un periodo stabilito. Questo meccanismo di monitoraggio e blocco viene chiamato jail (letteralmente "prigione"): ogni jail è dedicata a un servizio specifico (SSH, un server web, un server di posta, ecc.) e ha le proprie regole.
Su Ubuntu 24.04, Fail2ban è disponibile come pacchetto ufficiale nel repository universe (versione 1.0.2 al momento in cui scriviamo), quindi non serve aggiungere repository esterni: basta che il repository universe sia abilitato, cosa che avviene di default nelle installazioni standard di Ubuntu Server e Desktop.
Prerequisiti
- Un server Ubuntu 24.04 con accesso SSH e un utente con privilegi
sudo. - Accesso alla riga di comando, in locale o via SSH (attenzione a non chiudere la sessione corrente prima di aver verificato che le nuove regole non blocchino anche voi: più avanti vedremo come evitarlo).
- Facoltativo ma consigliato: un firewall attivo (UFW è quello incluso di default su Ubuntu), che Fail2ban userà come "braccio armato" per applicare i blocchi.
1. Installare Fail2ban
Aggiornate l'elenco dei pacchetti e installate Fail2ban con:
sudo apt update
sudo apt install fail2banAl termine dell'installazione, il servizio parte già attivo con la configurazione di default, ma è buona norma verificarne subito lo stato:
sudo systemctl status fail2banSe non è già abilitato all'avvio del sistema, attivatelo con:
sudo systemctl enable fail2ban2. Creare la configurazione personalizzata (jail.local)
Fail2ban legge le sue impostazioni da diversi file. Quello principale, /etc/fail2ban/jail.conf, viene sovrascritto a ogni aggiornamento del pacchetto: per questo motivo non va mai modificato direttamente. Le personalizzazioni vanno invece scritte in un file separato, jail.local, che Fail2ban legge dopo e che ha sempre la precedenza sulle impostazioni di default. Create il file copiando quello originale come base:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.localNella sezione [DEFAULT], che si applica a tutte le jail salvo diversa indicazione, trovate tre parametri chiave che è utile capire prima di modificarli:
- bantime: per quanto tempo un IP resta bloccato una volta superata la soglia di tentativi (es.
10mper dieci minuti,1hper un'ora). - findtime: la finestra temporale entro cui vengono conteggiati i tentativi falliti (di default 10 minuti).
- maxretry: il numero di tentativi falliti consentiti prima del blocco (di default 5).
Per una jail SSH più aggressiva verso i bot, senza rischiare troppi falsi positivi per un utente umano che sbaglia password una volta, valori come maxretry = 4, findtime = 10m e bantime = 1h sono un buon punto di partenza. Se il vostro IP fisso è noto, potete anche escluderlo dai controlli aggiungendolo alla riga ignoreip (già presente nella sezione [DEFAULT]), separandolo dagli altri con uno spazio: questo evita di autoescludervi per errore durante i test.
3. Configurare la jail per SSH
Scorrendo il file trovate la sezione dedicata a SSH, che inizia con [sshd]. Verificate che sia impostata così:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 4
findtime = 10m
bantime = 1hIl parametro enabled = true è quello che effettivamente attiva la protezione per SSH: nella configurazione di default molte jail sono presenti ma disattivate, proprio per lasciare all'amministratore la scelta di quali servizi proteggere. Se avete spostato SSH su una porta diversa dalla 22 (una pratica comune per ridurre il rumore di fondo dei bot), ricordate di indicarla nel campo port.
Salvate il file e riavviate il servizio perché le modifiche abbiano effetto:
sudo systemctl restart fail2ban4. Verificare che la jail sia attiva
Il comando principale per dialogare con Fail2ban è fail2ban-client. Per vedere l'elenco delle jail attualmente attive:
sudo fail2ban-client statusPer i dettagli della jail SSH in particolare — quanti tentativi falliti ha registrato e quali IP sono attualmente bloccati:
sudo fail2ban-client status sshdÈ anche utile tenere d'occhio il log dedicato, soprattutto nei primi giorni dopo l'attivazione, per capire come si comporta la jail nella pratica:
sudo tail -f /var/log/fail2ban.log5. Testare il blocco
Il modo più realistico per testare la jail è provare a collegarsi in SSH da un'altra macchina (o da un altro terminale) inserendo volutamente una password sbagliata più volte di seguito, fino a superare la soglia di maxretry impostata. Dopo l'ultimo tentativo fallito, l'IP da cui provenivano i collegamenti dovrebbe comparire come bandito nell'output di fail2ban-client status sshd, e ulteriori tentativi di connessione da quello stesso indirizzo cadranno nel vuoto fino allo scadere del bantime.
In alternativa, se preferite non rischiare di bloccare per errore la vostra sessione di lavoro, potete forzare manualmente un ban di prova su un IP di test (ad esempio un indirizzo della vostra rete locale non utilizzato):
sudo fail2ban-client set sshd banip 192.0.2.106. Sbloccare un IP
Può capitare che un IP legittimo venga bandito per errore, ad esempio dopo alcuni tentativi di login falliti da parte vostra. Per rimuovere manualmente il blocco senza dover attendere la scadenza del bantime, usate:
sudo fail2ban-client set sshd unbanip 192.0.2.10Sostituendo naturalmente l'indirizzo di esempio con quello reale da sbloccare. Il comando ha effetto immediato: non è necessario riavviare il servizio.
Qualche accorgimento in più
- Non disattivate mai la sessione SSH corrente prima di aver verificato che le nuove regole funzionino: se possibile, testate da un secondo terminale mantenendo aperta una sessione già autenticata, così da poter correggere eventuali errori di configurazione senza perdere l'accesso al server.
- Integrazione con UFW: se usate UFW come firewall, Fail2ban lo rileva automaticamente e vi si appoggia per applicare i blocchi, senza bisogno di configurazioni aggiuntive nella maggior parte dei casi.
- Autenticazione con chiave SSH: Fail2ban riduce l'impatto degli attacchi automatizzati, ma resta un livello di difesa aggiuntivo. Disabilitare il login con password a favore delle sole chiavi SSH, dove possibile, rimane la misura di sicurezza più efficace in assoluto.
- Bantime crescente: per chi vuole un livello di protezione più avanzato, Fail2ban supporta anche un bantime che aumenta progressivamente per gli IP recidivi, tramite l'opzione
bantime.increment: un approfondimento utile una volta presa confidenza con la configurazione di base.
Con questi passaggi avete una protezione di base ma efficace contro i tentativi di accesso automatizzati su SSH, senza dover intervenire manualmente ogni volta che un bot bussa alla porta del vostro server.
Fonti ufficiali
Share
What's Your Reaction?
Like
0
Cancella like
0
Amore
0
Buffo
0
arrabbiato
0
Sad
0
Wow
0