Cos'e' Fail2Ban e perché' integrarlo in Plesk
Fail2Ban e' un servizio open source che analizza i log dei servizi (SSH, FTP, posta, pannello Plesk) e blocca automaticamente gli IP che effettuano troppi tentativi falliti in un'intervallo di tempo. E' uno strumento essenziale per proteggere il server da attacchi di tipo brute force, dictionary attack e scanner automatici.
Plesk Obsidian integra Fail2Ban tramite un'estensione che ne semplifica enormemente la configurazione: tutte le impostazioni base sono accessibili da GUI, mentre per le configurazioni avanzate restano disponibili i file di Fail2Ban classici.
Abilitare Fail2Ban
Andare in Tools & Settings → IP Address Banning (Fail2Ban). Se non e' installato, Plesk propone l'installazione automatica.
Una volta attivo, abilitare la spunta Enable intrusion detection e cliccare OK. Plesk avvia il servizio e applica le jail predefinite.
Le jail incluse
Una jail e' un set di regole che monitora un servizio specifico. Le jail predefinite in Plesk sono:
- plesk-panel: tentativi falliti sul pannello (porta 8443/8880)
- plesk-postfix: tentativi SMTP AUTH falliti
- plesk-dovecot: tentativi IMAP/POP3 falliti
- plesk-proftpd: tentativi FTP falliti
- plesk-roundcube: tentativi falliti su RoundCube
- plesk-wordpress: tentativi falliti su wp-login.php (richiede WordPress Toolkit)
- recidive: jail meta che banna a lungo termine chi viene bannato spesso
- ssh: tentativi SSH falliti
Configurare una jail
Cliccando sul nome di una jail si accede ai parametri:
- Find time: intervallo in secondi in cui contare i tentativi (default 600)
- Max retries: numero di tentativi falliti tollerati (default 5)
- Ban time: durata del ban in secondi (default 600)
Per produzione consigliamo: find time 3600, max retries 3, ban time 3600 (un'ora). La jail recidive banna 1 settimana chi viene bannato 5 volte in 1 giorno.
Whitelist degli IP fidati
Per evitare di bloccare per errore IP amministrativi, configurare la whitelist:
- Andare nel tab Trusted IP Addresses
- Aggiungere gli IP dell'ufficio, della VPN aziendale, degli amministratori
- Salvare
Gli IP whitelistati non vengono mai bannati, qualunque sia il numero di tentativi.
Sbloccare un'IP bannato
Dal tab Banned IP Addresses si vede l'elenco degli IP attualmente bloccati. Selezionare l'IP e cliccare Unban.
Da SSH:
plesk bin ip_ban --unban-ip 1.2.3.4 fail2ban-client unban 1.2.3.4
Aggiungere jail custom
Per servizi non gestiti dalle jail predefinite (es. un'applicazione PHP custom), creare un file in /etc/fail2ban/jail.d/custom.conf:
[mio-servizio] enabled = true filter = mio-servizio logpath = /var/log/mio-servizio.log maxretry = 5 findtime = 600 bantime = 3600
Creare anche il filter in /etc/fail2ban/filter.d/mio-servizio.conf con la regex che identifica i tentativi falliti.
Monitorare l'attività'
Statistiche da SSH:
fail2ban-client status fail2ban-client status plesk-panel
Per vedere il log di attività':
tail -f /var/log/fail2ban.log
Notifiche email
Plesk puo' inviare email all'admin quando un'IP viene bannato. Configurazione in Tools & Settings → Notifications → IP Address Banning.
Performance e impatto sul server
Fail2Ban e' molto leggero (~20-40 MB di RAM) ma esegue scanning continuo dei log. Su server con altissimo traffico email, considerare di:
- Limitare il numero di jail attive
- Aumentare il findtime per ridurre la frequenza di analisi
- Usare regex efficienti nei filter custom
- Considerare l'uso di IPSet per gestire grandi liste di IP bannati
Persistenza dei ban tra restart
Di default i ban Fail2Ban si perdono al restart del servizio. Per persistere usare la backend SQLite o MySQL:
[DEFAULT] dbfile = /var/lib/fail2ban/fail2ban.sqlite3 dbpurgeage = 86400
Whitelist Cloudflare
Se i siti sono dietro Cloudflare, gli IP che arrivano al server sono quelli di Cloudflare, non quelli reali dei client. Senza configurazione, Fail2Ban potrebbe bannare Cloudflare stessa. Configurare il modulo mod_remoteip in Apache o usare il filter Fail2Ban dedicato che legge l'header CF-Connecting-IP.
Notifiche personalizzate via webhook
Oltre alle email, Fail2Ban puo' inviare alert verso Slack/Discord/Telegram via webhook custom. Modificare l'action in /etc/fail2ban/action.d/ con uno script che invia POST HTTP al webhook quando un'IP viene bannato.
Audit dei ban storici
Per analizzare quali jail sono più' attive e da dove provengono gli attacchi:
grep -i "ban" /var/log/fail2ban.log | awk '{print $7, $8}' | sort | uniq -c | sort -rn | head -20Questo comando mostra i 20 IP più' bannati. Utile per identificare attacchi persistenti che potrebbero meritare un blocco permanente a livello firewall.
Integrazione con Plesk Action Log
Tutti i ban Fail2Ban sono registrati nel Plesk Action Log accessibile da Tools & Settings → Action Log. Filtrare per "IP banned" per vedere lo storico completo dei ban con timestamp, IP e jail responsabile.
Differenze tra jail SSH di sistema e plesk-panel
La jail ssh protegge il servizio SSH sul server (porta 22), mentre plesk-panel protegge il pannello Plesk (8443/8880). Sono jail indipendenti: un'IP che fa brute force solo su SSH viene bannato dalla prima ma non dalla seconda.
Sblocco massivo
Per resettare tutti i ban (es. dopo configurazione errata che ha bannato molti IP legittimi):
fail2ban-client unban --all
Hai bisogno di aiuto?
Se vuoi gestione Plesk dal team di G Tech Group, scrivici tramite il modulo di contatto.