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.