Installare e configurare Fail2ban
Come proteggere il tuo server SSH dagli attacchi brute-force con Fail2ban.
Fail2ban è un daemon che monitora i file di log e blocca automaticamente gli indirizzi IP con comportamento sospetto — troppi tentativi di accesso falliti, scansioni di porte e pattern simili. È uno dei metodi più semplici ed efficaci per proteggere il tuo server SSH dagli attacchi brute-force.
Installazione
Ubuntu / Debian:
apt-get install fail2ban
CentOS:
yum install fail2ban
Struttura della configurazione
Fail2ban ha due file di configurazione principali:
/etc/fail2ban/fail2ban.conf— controlla come il processo Fail2ban si avvia e funziona/etc/fail2ban/jail.conf— definisce le regole di protezione per servizi specifici, incluso SSH
Il file jail.conf è suddiviso in sezioni chiamate jail — ognuna punta a un servizio specifico e a un tipo di attacco:
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 600
maxretry = 3
banaction = iptables-multiport
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
Le impostazioni nella sezione [DEFAULT] si applicano a tutte le jail, a meno che non vengano esplicitamente sovrascritte in una sezione specifica.
La jail [ssh] gestisce la protezione contro i tentativi di accesso falliti ripetuti — il classico brute-force.
Descrizione dei parametri principali
ignoreip— indirizzi IP che non verranno mai bloccati. Accetta un elenco di IP, maschere di sottorete o nomi DNS separati da spazi.bantime— durata (in secondi) per cui un IP rimane bloccato prima di essere rilasciato automaticamente.maxretry— numero di eventi corrispondenti che attiva un blocco. Per[ssh], corrisponde al numero di tentativi di accesso falliti.findtime— la finestra temporale (in secondi) entro cui devono verificarsimaxretryeventi perché scatti il blocco. Il valore predefinito è 600 secondi (10 minuti).enabled— impostare sutrueper attivare una jail,falseper disattivarla.port— la porta su cui il tuo servizio è in ascolto. Per SSH è22o l'aliasssh.filter— il nome del file di filtro contenente i pattern regex che Fail2ban usa per rilevare eventi sospetti. Il filtrosshdsi trova in/etc/fail2ban/filter.d/sshd.conf.logpath— il file di log monitorato da Fail2ban. Tutta l'attività di accesso (riuscita e fallita) viene registrata per impostazione predefinita in/var/log/auth.log.
Buone pratiche di configurazione
Non modificare mai jail.conf direttamente. Fail2ban è progettato per essere personalizzato tramite file .local — vengono caricati automaticamente e hanno la precedenza sui valori predefiniti. In questo modo le tue modifiche sopravvivono agli aggiornamenti del pacchetto.
Crea il tuo file di override:
nano /etc/fail2ban/jail.local
Ecco una configurazione di partenza solida:
[DEFAULT]
# L'IP statico del tuo server — evita di bloccarti accidentalmente.
# Se non imposti ignoreip qui, commentalo in jail.conf.
ignoreip = 57.66.158.131
[ssh]
# Se nell'arco di 1 ora...
findtime = 3600
# ...si registrano 6 tentativi di accesso falliti...
maxretry = 6
# ...quell'IP viene bloccato per 24 ore.
bantime = 86400
Perché dovresti modificare
ignoreip: il valore predefinito127.0.0.1/8è una falla di sicurezza sui server condivisi. Se un attaccante compromette qualsiasi account shell sulla macchina, può eseguire uno strumento di brute-force in locale — e Fail2ban lo ignorerà, perché il traffico sembra provenire da localhost.
Perché dovresti aumentare
findtime: le botnet che usano attacchi «brute-force lento» sono progettate appositamente per aggirare la finestra predefinita di 10 minuti. Conmaxretry = 6, un attaccante può provare 5 password, aspettare 10 minuti, provarne altre 5 e ripetere all'infinito senza mai venire bloccato. Aumentarefindtimea un'ora o più chiude questa lacuna.
Riavvio di Fail2ban
Una volta applicata la configurazione, riavvia il servizio:
service fail2ban restart
Aiuto
Hai domande o ti serve una mano? Scrivici tramite il sistema di ticket — siamo sempre qui per aiutarti!