Se gestisci un server Linux, sai che la sicurezza non è un'opzione. Ogni giorno, migliaia di bot scansionano la rete alla ricerca di porte aperte, in particolare la porta 22 (SSH), tentando password casuali in attacchi Brute Force o Dictionary Attack.
Mentre nel nostro articolo precedente abbiamo visto come proteggere l'accesso SSH disattivando le password, oggi parliamo di un altro scudo fondamentale: Fail2ban.
In questa guida vedremo cos'è, come installarlo su Linux e come configurarlo per proteggere i tuoi servizi.
Cos'è Fail2ban?
Fail2ban è uno strumento di prevenzione delle intrusioni (IPS) scritto in Python.
La sua funzione è scansionare i file di log del sistema (come /var/log/auth.log o /var/log/secure) alla ricerca di pattern che indicano attività sospette, come ripetuti tentativi di accesso falliti.
Quando rileva un indirizzo IP che ha superato la soglia di tentativi permessi, Fail2ban aggiorna le regole del firewall (tipicamente iptables o nftables) per bannare quell'indirizzo per un periodo di tempo determinato.
Come funziona
Il funzionamento si basa su tre concetti chiave:
Filter
Espressione regolare (regex) che identifica i tentativi di intrusione nei log.
Action
Azione eseguita quando il filtro trova un match (ban, email, ecc.).
Jail
Combinazione di filter e action. La prigione per gli IP ostili.
Installazione su Linux
Fail2ban è disponibile nei repository ufficiali della maggior parte delle distribuzioni.
Debian / Ubuntu / Kali Linux
sudo apt update
sudo apt install fail2ban
sudo apt install fail2ban
CentOS / RHEL / Rocky Linux / AlmaLinux
Abilitare prima EPEL:
sudo dnf install epel-release
sudo dnf install fail2ban
sudo dnf install fail2ban
Arch Linux / Manjaro
sudo pacman -S fail2ban
Configurazione di base
Non modificare direttamente:
/etc/fail2ban/jail.conf
Viene sovrascritto ad ogni aggiornamento.
Usa invece jail.local.
1. Creare il file di configurazione locale
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Apri il file:
sudo nano /etc/fail2ban/jail.local
2. Impostazioni generali
Sezione [DEFAULT]:
- bantime: durata del ban in secondi
- findtime: finestra temporale di osservazione
- maxretry: tentativi massimi consentiti
Esempio:
[DEFAULT]
bantime = 3600
bantime = 3600
findtime = 600
maxretry = 5
Significato:
5 errori in 10 minuti → ban di 1 ora.
3. Attivare la protezione per SSH
Sezione [sshd]:
[sshd]
enabled = true
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
Nota: su CentOS/RHEL il log è spesso /var/log/secure.
Avviare e gestire Fail2ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
sudo systemctl enable fail2ban
Verifica stato:
sudo systemctl status fail2ban
Comandi utili
Verificare IP bannati
sudo fail2ban-client status sshd
Sbloccare un IP
sudo fail2ban-client set sshd unbanip TUA_IP_PUBBLICA
Controllare i log
sudo tail -f /var/log/fail2ban.log
Proteggere altri servizi
Fail2ban può proteggere anche server web.
Esempio: Nginx
[nginx-http-auth]
enabled = true
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
Fail2ban è uno dei primi strumenti da configurare su un server nuovo.
Riduce drasticamente tentativi di intrusione e rumore inutile.
La sicurezza funziona a strati (defense in depth).
Fail2ban + chiavi SSH resta una combinazione difficile da battere.