Linux13 luglio 2026 3 visualizzazioni

Come installare e configurare Fail2ban nel 2026

Come installare e configurare Fail2ban nel 2026

Stai cercando come installare Fail2ban per proteggere SSH su un VPS Linux? Fail2ban monitora i log del server, rileva i tentativi di accesso falliti e chiede al firewall di bloccare temporaneamente l'indirizzo IP responsabile.

Questo tutorial spiega passo dopo passo come installare e configurare Fail2ban su Debian 12, Debian 13 e Ubuntu 24.04. Imparerai anche a verificare il suo funzionamento, visualizzare gli IP bannati, sbloccare un indirizzo, creare una whitelist e proteggere Nginx.

Per installare rapidamente Fail2ban su Debian o Ubuntu:

sudo apt update
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status

La configurazione completa consiste poi in:

  1. creare /etc/fail2ban/jail.local ;
  2. attivare la jail sshd ;
  3. definire maxretry, findtime e bantime ;
  4. testare la configurazione con fail2ban-client -t ;
  5. verificare i ban con fail2ban-client status sshd.

Le sezioni seguenti dettagliano ogni passaggio e le peculiarità di systemd sulle versioni recenti di Debian.

Prima di iniziare: evita di bloccarti

Una cattiva configurazione di Fail2ban può interrompere il tuo accesso SSH. Prima di qualsiasi modifica:

  • apri la console web o noVNC del tuo VPS ;
  • mantieni aperta la tua sessione SSH attuale ;
  • prendi nota del tuo indirizzo IP pubblico se è fisso ;
  • verifica la porta realmente utilizzata da SSH ;
  • non testare il ban dal tuo unico mezzo di accesso al server.

Per conoscere la porta SSH configurata:

sudo sshd -T | grep '^port '

Se il comando restituisce ad esempio port 2222, dovrai indicare port = 2222 nella jail SSH invece di port = ssh.

Come funziona Fail2ban?

Fail2ban si basa su tre elementi:

  1. un filtro riconosce i fallimenti di autenticazione nei log grazie a espressioni regolari ;
  2. una jail conta i fallimenti provenienti da ogni indirizzo IP ;
  3. un azione applica il ban con il firewall disponibile, ad esempio nftables o iptables.

Immagine

Tre parametri controllano principalmente l'attivazione di un ban:

  • maxretry : numero di fallimenti consentiti prima del ban ;
  • findtime : periodo durante il quale questi fallimenti vengono conteggiati ;
  • bantime : durata iniziale del ban.

Con la configurazione maxretry = 5, findtime = 10m e bantime = 1h, un indirizzo che produce cinque fallimenti in dieci minuti viene bloccato per un'ora.

ImmagineFail2ban non sostituisce l'autenticazione SSH tramite chiave, un firewall correttamente configurato o gli aggiornamenti di sicurezza. Costituisce uno strato aggiuntivo destinato a ridurre i tentativi ripetuti.

Come installare Fail2ban su Debian 12/13 o Ubuntu 24.04?

Installa il pacchetto fornito dalla tua distribuzione:

sudo apt update
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban

Visualizza poi la versione installata e verifica che il servizio risponda:

fail2ban-client --version
sudo fail2ban-client ping
sudo fail2ban-client status

Un'installazione funzionante deve restituire Server replied: pong.

Su Debian e Ubuntu, il pacchetto attiva generalmente la jail sshd. Non presumere però che SSH sia già protetto: controlla esplicitamente il suo stato.

sudo fail2ban-client status sshd

Se la jail non esiste, se il servizio rifiuta di avviarsi o se non viene trovato alcun log, prosegui con la configurazione qui sotto.

Caso particolare di Debian 12 e Debian 13

Su un'installazione fresca di Debian 12 o 13, /var/log/auth.log potrebbe essere assente, poiché rsyslog non è più installato per impostazione predefinita. Gli eventi SSH vengono quindi conservati nel log di systemd. Su un server aggiornato o su cui rsyslog è stato installato, il file potrebbe comunque esistere.

Controlla la fonte disponibile:

test -f /var/log/auth.log && echo "auth.log presente" || echo "Log di systemd probabilmente utilizzati"
sudo journalctl -u ssh --since "10 minutes ago" --no-pager

Se Fail2ban mostra l'errore Have not found any log file for sshd jail, utilizza il backend systemd presentato nella sezione successiva.

Come configurare Fail2ban per proteggere SSH?

Non modificare direttamente /etc/fail2ban/jail.conf. Questo file appartiene al pacchetto e potrebbe evolvere durante un aggiornamento. Inserisci solo le tue personalizzazioni in /etc/fail2ban/jail.local o in un file .local sotto /etc/fail2ban/jail.d/.

L'ordine principale di caricamento è il seguente:

  1. jail.conf ;
  2. jail.d/*.conf ;
  3. jail.local ;
  4. jail.d/*.local.

I parametri letti per ultimi sostituiscono i valori precedenti.

Crea il file locale:

sudo nano /etc/fail2ban/jail.local

Ecco una base adatta a un VPS Linux classico che utilizza il log di systemd:

[DEFAULT]
# Durata iniziale del ban
bantime = 1h

# Contare i fallimenti su un periodo di 10 minuti
findtime = 10m
maxretry = 5

# Allungare la durata quando un stesso IP recidiva
bantime.increment = true
bantime.factor = 1
bantime.maxtime = 1w

# Indirizzi che non devono mai essere bannati
ignoreip = 127.0.0.1/8 ::1

[sshd]
enabled = true
backend = systemd
port = ssh

Se SSH ascolta su una porta personalizzata, sostituisci port = ssh:

[sshd]
enabled = true
backend = systemd
port = 2222

Importante: con backend = systemd, non aggiungere il parametro logpath nella jail. Fail2ban interroga direttamente il log di systemd.

Perché utilizzare ban progressivi?

Con bantime.increment = true, Fail2ban conserva la cronologia dei ban nella sua base locale e aumenta progressivamente la loro durata. Con i valori sopra, le recidive possono portare a ban di un'ora, poi due ore, quattro ore, ecc., senza superare una settimana.

Questo meccanismo riduce l'interesse dei tentativi ripetuti evitando un ban permanente causato da un semplice errore umano. La sua efficacia dipende comunque dal comportamento degli attaccanti: un botnet che utilizza molti indirizzi diversi non sarà fermato dall'allungamento del ban di un solo IP.

Come verificare che Fail2ban funzioni?

Testa sempre il caricamento della configurazione prima di applicarla:

sudo fail2ban-client -t

Se non viene restituito alcun errore, ricarica Fail2ban e controlla la jail SSH:

sudo fail2ban-client reload
sudo fail2ban-client status sshd
sudo journalctl -u fail2ban -n 50 --no-pager

Il test fail2ban-client -t verifica la configurazione, ma non prova da solo che il filtro riconosce i tuoi log né che il firewall blocca realmente gli IP. Per testare il filtro SSH con systemd:

sudo fail2ban-regex --print-all-matched systemd-journal sshd

Se il tuo server utilizza /var/log/auth.log:

sudo fail2ban-regex --print-all-matched /var/log/auth.log sshd

Eseguire un test funzionale senza perdere l'accesso

Utilizza una seconda connessione Internet, ad esempio la condivisione della connessione di un telefono, e provoca volontariamente diversi fallimenti SSH. Mantieni aperte la tua sessione di amministrazione e la console web.

Controlla poi il risultato:

sudo fail2ban-client status sshd
sudo fail2ban-client banned

Verifica anche che il firewall contenga una regola Fail2ban. A seconda del tuo sistema:

sudo nft list ruleset | grep -iE 'f2b|fail2ban'
sudo iptables -S | grep -i f2b

Una di queste comandi potrebbe non restituire nulla se il server utilizza solo l'altro sistema di firewall.

Come vedere gli IP bannati da Fail2ban?

Vedere le jail attive

sudo fail2ban-client status

Vedere gli IP bannati dalla jail SSH

sudo fail2ban-client status sshd

Vedere tutti gli IP bannati

sudo fail2ban-client banned 

ImmagineCome sbloccare un IP con Fail2ban?

Se il tuo indirizzo è stato bloccato dopo diversi errori di password, utilizza la console web del VPS o un'altra connessione autorizzata per eseguire i seguenti comandi.

Sbloccare un IP da una jail specifica

sudo fail2ban-client set sshd unbanip 203.0.113.42

Sbloccare un IP da tutte le jail

sudo fail2ban-client unban 203.0.113.42

Sbloccare tutti gli IP

Questo comando svuota i ban di tutte le jail. Usalo solo se è realmente necessario:

sudo fail2ban-client unban --all

Bannare manualmente un IP

sudo fail2ban-client set sshd banip 198.51.100.17

Come aggiungere un IP alla whitelist di Fail2ban?

Il parametro ignoreip contiene gli indirizzi che Fail2ban non deve mai bannare. Accetta indirizzi IPv4, IPv6, intervalli CIDR e nomi DNS.

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 203.0.113.42 192.0.2.0/24

Ricarica poi la configurazione:

sudo fail2ban-client -t
sudo fail2ban-client reload

Aggiungi il tuo indirizzo personale solo se è fisso e realmente controllato. Evita di mettere in whitelist un intervallo troppo ampio appartenente a un operatore o a un VPN pubblico: un attaccante che utilizza lo stesso intervallo non potrebbe più essere bannato.

Per ignorare temporaneamente un IP nella jail SSH:

sudo fail2ban-client set sshd addignoreip 203.0.113.42

Questa modifica viene applicata in memoria e non è una configurazione persistente. Per mantenerla dopo un riavvio o un ricaricamento, aggiungi l'indirizzo in un file .local.

Come proteggere Nginx con Fail2ban?

Fail2ban fornisce diversi filtri Nginx. Due jail sono particolarmente utili:

  • nginx-http-auth, per i fallimenti ripetuti di autenticazione HTTP Basic ;
  • nginx-limit-req, per le richieste rifiutate dalla limitazione di velocità di Nginx.

Aggiungi le jail necessarie in /etc/fail2ban/jail.local:

[nginx-http-auth]
enabled = true
port = http,https

[nginx-limit-req]
enabled = true
port = http,https
maxretry = 10

La jail nginx-limit-req non crea la limitazione di velocità al tuo posto. Nginx deve già utilizzare le direttive limit_req_zone e limit_req, e i rifiuti devono apparire nel suo log degli errori.

Controlla la configurazione di Nginx e testa il filtro prima di attivare la jail:

sudo nginx -T | grep -E 'limit_req(_zone)?'
sudo fail2ban-regex /var/log/nginx/error.log nginx-limit-req
sudo nginx -t

Ricarica poi i due servizi:

sudo systemctl reload nginx
sudo fail2ban-client -t
sudo fail2ban-client reload
sudo fail2ban-client status nginx-limit-req

Se Nginx si trova dietro Cloudflare, un reverse proxy o un load balancer, configura prima il ripristino dell'indirizzo IP reale del visitatore. Altrimenti, i log potrebbero contenere l'indirizzo del proxy e Fail2ban rischia di bloccare quest'ultimo invece del cliente responsabile.

Se il tuo server web non è ancora installato, consulta la nostra guida per installare Nginx e PHP-FPM su un VPS.

Per Windows, il principio equivalente è presentato nella nostra guida dedicata alle attacchi brute-force RDP su un VPS Windows.

Perché Fail2ban non funziona o non banna alcun IP?

1. Verifica che il servizio funzioni

sudo systemctl --no-pager --full status fail2ban
sudo fail2ban-client ping
sudo journalctl -u fail2ban -n 100 --no-pager

2. Verifica che la jail sia attiva

sudo fail2ban-client status
sudo fail2ban-client status sshd

3. Controlla la fonte dei log

sudo journalctl -u ssh -n 50 --no-pager
sudo tail -n 50 /var/log/auth.log

Il secondo comando fallirà normalmente se /var/log/auth.log non esiste. In tal caso, utilizza il backend systemd.

4. Testa il filtro

sudo fail2ban-regex systemd-journal sshd

Se i contatori rimangono a zero nonostante i veri fallimenti di connessione, verifica il servizio registrato, il filtro selezionato, il backend e la porta SSH.

5. Verifica l'azione del firewall

sudo fail2ban-client get sshd actions
sudo nft list ruleset | grep -iE 'f2b|fail2ban'
sudo iptables -S | grep -i f2b

Fail2ban può utilizzare nftables o iptables a seconda della distribuzione, della versione del pacchetto e della tua configurazione. Non forzare un'azione diversa senza aver identificato il firewall attualmente utilizzato.

Gli errori più frequenti

Auto-bannarsi

Cinque password errate possono bloccare il tuo IP per tutta la durata definita da bantime. Tieni disponibile una console web e inserisci solo i tuoi IP fissi di fiducia in ignoreip.

Modificare direttamente jail.conf

I file .conf sono distribuiti con il pacchetto. Usa un file .local per mantenere una configurazione leggibile e facilitare gli aggiornamenti.

Dimenticare la porta SSH personalizzata

Fail2ban può rilevare i fallimenti senza bloccare la porta giusta se la jail e il servizio non sono coerenti. Confronta l'output di sshd -T con il parametro port.

Presumere che il test di sintassi sia sufficiente

fail2ban-client -t non sostituisce un test del filtro e una verifica delle regole del firewall. Controlla i tre livelli: configurazione, rilevamento e ban.

Bannare l'indirizzo di un reverse proxy

Senze una corretta configurazione degli IP reali, Fail2ban può vedere solo l'indirizzo di Cloudflare o del proxy. Correggi prima i log di Nginx prima di attivare le jail HTTP.

Credere che Fail2ban blocchi gli attacchi DDoS

Fail2ban agisce dopo l'arrivo delle connessioni sul server. Può ridurre la forza bruta applicativa, ma non può impedire a un attacco volumetrico di saturare il collegamento di rete upstream.

Rafforzare realmente la sicurezza del VPS

Per una difesa coerente, associa Fail2ban a diverse misure:

  • usa chiavi SSH e disabilita l'autenticazione tramite password quando possibile — consulta la nostra guida per configurare una chiave SSH su un VPS Linux ;
  • rifiuta la connessione SSH diretta da root ;
  • esponi solo le porte necessarie con un firewall ;
  • installa regolarmente gli aggiornamenti di sicurezza ;
  • monitora i log e gli avvisi del server ;
  • mantieni un accesso di emergenza alla console ;
  • attiva HTTPS per i servizi web.

La nostra guida Certbot: installare un certificato SSL Let's Encrypt completa questa configurazione. Puoi anche trovare i nostri altri tutorial nella documentazione Linux.

Fail2ban e la protezione anti-DDoS rispondono a due rischi diversi. Fail2ban blocca comportamenti identificati nei log del server, mentre l'anti-DDoS filtra il traffico volumetrico upstream. I VPS Linux OuiHeberg includono una protezione anti-DDoS e accesso root che consente di applicare le impostazioni di questa guida.

FAQ su Fail2ban

Fail2ban funziona con UFW, nftables o iptables?

Sì, ma l'azione utilizzata dipende dal pacchetto e dalla configurazione del server. Verificala con sudo fail2ban-client get sshd actions, poi controlla le regole con nft list ruleset o iptables -S. Evita di affermare che un sistema è utilizzato per impostazione predefinita senza verificarlo sulla macchina interessata.

Fail2ban protegge contro gli attacchi DDoS?

No. Si occupa principalmente di comportamenti ripetitivi visibili nei log, come i fallimenti SSH o HTTP. Un attacco volumetrico deve essere filtrato dall'infrastruttura di rete dell'host.

È necessario cambiare la porta SSH?

Cambiare la porta SSH riduce generalmente il rumore delle scansioni automatiche, ma non costituisce una protezione forte: una scansione completa può trovare la nuova porta. Le chiavi SSH, la disabilitazione delle password e il filtraggio della rete rimangono prioritari.

Perché Fail2ban non banna alcun IP?

Le cause più comuni sono una jail inattiva, un backend errato, un log assente, un filtro che non corrisponde ai log o un'azione di firewall errata. Controlla successivamente status, fail2ban-regex, i log del servizio e le regole del firewall.

Fonti e metodo di verifica

Questa guida è stata verificata a partire dalle seguenti risorse ufficiali:

I comandi devono sempre essere controllati sul server di destinazione, poiché una porta SSH personalizzata, un firewall sostituito o una registrazione modificata possono cambiare il risultato.

Conclusione

Una configurazione Fail2ban affidabile non si limita a installare il pacchetto. È necessario verificare che la jail sia attiva, che il filtro riconosca effettivamente i fallimenti e che il firewall applichi il divieto.

Per un VPS Debian o Ubuntu classico, una jail SSH con cinque tentativi in dieci minuti, un divieto iniziale di un'ora e durate progressive costituisce una base ragionevole. Adattate però questi valori ai vostri utenti, mantenete un accesso di emergenza e associate Fail2ban a chiavi SSH, un firewall rigoroso e aggiornamenti regolari.

Fail2ban è un software libero e funziona presso tutti gli host compatibili. Se cercate un ambiente Linux con accesso root e protezione anti-DDoS, scoprite i VPS Linux NVMe OuiHeberg.