fail2ban: protezione SSH e servizi
fail2ban e un demone Python che analizza i log alla ricerca di pattern di attacco (brute force, scan, tentativi di SQL injection) e banna gli IP responsabili a livello firewall. E una difesa attiva fondamentale, leggera e altamente personalizzabile, presente nei repository di ogni distribuzione Linux.
Come funziona
fail2ban definisce jail: insiemi di filtri (regex) applicati a uno o più file di log. Quando un'IP supera un numero massimo di errori (maxretry) in una finestra temporale (findtime) viene bannato per un tempo (bantime) tramite azioni configurabili (iptables, ufw, nftables, hostsdeny, abuseipdb). Esistono jail pronte per SSH, Apache, Nginx, Postfix, Dovecot, ProFTPD, WordPress.
Installazione e file principali
Su Debian/Ubuntu: apt install fail2ban. La configurazione di default e in /etc/fail2ban/jail.conf, ma le personalizzazioni vanno in /etc/fail2ban/jail.local. Per i filtri usa /etc/fail2ban/filter.d/. Riavvio con systemctl restart fail2ban, stato dei jail con fail2ban-client status e dettagli con fail2ban-client status sshd.
Procedura passo-passo
- Installa fail2ban e copia jail.conf in jail.local.
- Imposta parametri globali:
bantime = 1h,findtime = 10m,maxretry = 5. - Abilita la jail sshd e personalizza per la tua porta SSH.
- Aggiungi jail per nginx-botsearch, nginx-http-auth, postfix-sasl secondo i servizi attivi.
- Configura l'action per usare ufw se già in uso:
banaction = ufw. - Definisci ignoreip con i tuoi IP fissi per non bannarti per errore.
- Riavvia il servizio e verifica i log in
/var/log/fail2ban.log. - Imposta notifiche email per i ban (action_mwl).
- Monitora regolarmente i jail e affina maxretry/findtime in base ai falsi positivi.
Filtri custom
Per applicazioni che non hanno filtri pronti (gestionali PHP, WordPress, pannelli vari) puoi creare un filtro in /etc/fail2ban/filter.d/myapp.conf con una regex failregex = ^.*Failed login from <HOST>.*$ e una jail corrispondente. Il logpath punta al file di log dell'applicazione.
Errori comuni e come risolverli
- Modificare jail.conf invece di jail.local: jail.conf viene sovrascritto dagli upgrade; usa sempre jail.local.
- Banlist troppo aggressiva: rischi di bloccare utenti legittimi NAT condiviso; tara
maxretry. - Banaction errata: se usi UFW imposta
banaction = ufw, altrimenti le regole iptables si scontrano. - Ignorare i ban permanenti: per IP recidivi usa
recidivejail per ban prolungati.
Domande frequenti
D: fail2ban funziona con IPv6?
R: Si, dalla versione 0.10. Verifica che la versione installata sia recente.
D: Posso integrarlo con AbuseIPDB?
R: Si, esiste un'action plugin che segnala automaticamente IP bannati alla community.
D: Quanto dura un ban tipico?
R: 10-60 minuti per SSH e jail standard; per recidivi anche giorni o settimane.
Approfondimento tecnico: filtri custom e abuseipdb
Un filtro custom di fail2ban consiste in una regex che cattura le righe di log dei tentativi falliti, marcando l'IP con il placeholder <HOST>. Esempio per un'endpoint API con autenticazione fallita: failregex = ^.*Authentication failed for IP <HOST>.*$. Il file va in /etc/fail2ban/filter.d/myapi.conf con una sezione [Definition]; la jail corrispondente in /etc/fail2ban/jail.d/.
L'integrazione con AbuseIPDB permette due cose: segnalare IP malevoli alla community (action abuseipdb) e bloccare preventivamente IP già segnalati da altri (via lista importata). E un meccanismo di collective defense molto efficace, gratuito fino a 1000 segnalazioni/giorno.
Scenari d'uso reali
Un server di posta con Postfix e Dovecot usa jail dedicate per SASL fail, accessi IMAP errati, brute force SMTP: gli attaccanti vengono bloccati dopo 3-5 tentativi.
Un WordPress multi-sito con jail su wp-login.php blocca i bot che tentano password comuni: dopo 5 errori, ban di 1 ora.
Un pannello Plesk/cPanel integra fail2ban nativamente per proteggere accessi amministrativi.
Checklist operativa fail2ban
- Configurazioni in jail.local, mai modificare jail.conf.
- IP fissi del team in ignoreip per evitare lockout.
- banaction coerente con il firewall in uso (ufw/iptables).
- Recidive jail per ban prolungati.
- Monitoring dei ban con notifica solo per eventi anomali.
- Filtri custom per applicazioni proprietarie.
- Integrazione con AbuseIPDB per defense collettiva.
Risorse e riferimenti
fail2ban.org e il sito ufficiale; wiki include esempi per molti servizi. AbuseIPDB.com aggrega segnalazioni globali. Alternative o complementari: CrowdSec con database collaborativo moderno, SSHGuard più leggero. Per WordPress, plugin come Wordfence integrano protezione applicativa.
Considerazioni economiche e organizzative
Implementare correttamente quanto descritto in questo articolo su fail2ban richiede tempo, formazione e talvolta investimenti hardware o software. La buona notizia e che il ritorno e quasi sempre positivo: meno incidenti, meno tempo speso in troubleshooting reattivo, maggiore predicibilita dei servizi. Stima sempre il costo del downtime per il tuo business: anche poche ore l'anno di indisponibilita possono giustificare investimenti che a prima vista sembrano sovradimensionati.
Sul piano organizzativo, la documentazione e il fattore decisivo. Un sistema brillantemente configurato ma non documentato e una bomba a orologeria: il giorno in cui il sysadmin originale lascia l'azienda, ogni intervento diventa archeologia. Mantieni runbook aggiornati, versionali in git, fai pratica di lettura nei momenti di calma e non solo durante gli incidenti.
Glossario rapido dei termini chiave
RTO (Recovery Time Objective): tempo massimo entro cui un servizio deve tornare operativo dopo un'incidente. RPO (Recovery Point Objective): perdita massima accettabile di dati misurata nel tempo (es. 1 ora di transazioni). SLA (Service Level Agreement): contratto formale che definisce livelli di servizio e penali. SLO/SLI (Service Level Objective/Indicator): metriche interne di qualità usate per misurare e mantenere lo SLA. MTBF/MTTR: tempo medio tra guasti e tempo medio di ripristino, indicatori di affidabilità. Idempotenza: proprietà di un'operazione che, applicata più volte, produce lo stesso risultato della singola applicazione (fondamentale per automazione).
Hai bisogno di aiuto?
Se hai dubbi sulla gestione server, il team di G Tech Group puo aiutarti. Contattaci tramite il modulo di contatto.