Se gestisci un server Linux, sai che la sicurezza non è opzionale. Ogni giorno, migliaia di bot scansionano la rete alla ricerca di porte aperte, in particolare la porta 22 (SSH), tentando password casuali tramite brute force o dictionary attacks.
Nel nostro articolo precedente abbiamo visto come mettere in sicurezza l'accesso SSH disabilitando le password; oggi copriremo un altro scudo essenziale: Fail2ban.
La procedura copre installazione di Fail2ban, configurazione delle jail e verifica dei ban effettivamente applicati ai servizi esposti.
Cos'è Fail2ban?
Fail2ban è uno strumento di prevenzione delle intrusioni (IPS) scritto in Python.
Il suo compito è scansionare i file di log di sistema (come /var/log/auth.log o /var/log/secure) alla ricerca di pattern che indicano attività sospette, come ripetuti tentativi di login falliti.
Quando rileva un indirizzo IP che ha superato il numero consentito di tentativi, Fail2ban aggiorna le regole del firewall (tipicamente iptables o nftables) per bannare quell'indirizzo per un periodo di tempo prestabilito.
Come funziona
Funziona basandosi su tre concetti chiave:
Filter
Un'espressione regolare (regex) che identifica i tentativi di intrusione nei log.
Action
L'azione intrapresa quando il filtro trova una corrispondenza (ban, email, ecc.).
Jail
La combinazione di un filter e un 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
CentOS / RHEL / Rocky Linux / AlmaLinux
Abilita prima EPEL:
sudo dnf install epel-release
sudo dnf install fail2ban
Arch Linux / Manjaro
sudo pacman -S fail2ban
Configurazione di base
Non modificare direttamente:
/etc/fail2ban/jail.conf
Viene sovrascritto a ogni aggiornamento.
Usa invece jail.local.
1. Crea 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: massimo tentativi consentiti
Esempio:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
Significato:
5 fallimenti in 10 minuti -> ban di 1 ora.
3. Abilita la protezione per SSH
Sezione [sshd]:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
Nota: su CentOS/RHEL il log è spesso /var/log/secure.
Avvio e gestione di Fail2ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
Controlla lo stato:
sudo systemctl status fail2ban
Comandi utili
Controllare gli IP bannati
sudo fail2ban-client status sshd
Sbloccare un IP
sudo fail2ban-client set sshd unbanip YOUR_PUBLIC_IP
Controllare i log
sudo tail -f /var/log/fail2ban.log
Proteggere altri servizi
Fail2ban può anche proteggere i web server.
Esempio: Nginx
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
Fail2ban è uno dei primi strumenti che vale la pena configurare su un nuovo server.
Riduce drasticamente i tentativi di intrusione e il rumore non necessario.
La sicurezza funziona a strati (defense in depth).
Fail2ban più SSH keys rimane una combinazione difficile da battere.