Guida a Fail2Ban: proteggere il server da attacchi bruteforce

Gli attacchi brute force, o attacchi di forza bruta in italiano, sono attacchi che mirano a provare tutte le combinazioni di username e password possibili al fine di trovare quella corretta e garantirsi l’accesso al server vittima.

Data la latenza di un attacco brute force remoto, molte volte gli hackers preferiscono avviare attacchi wordlist, ovvero attacchi che si limitano a testare una lista di parole contenute in un file di testo anziché generare tutte le combinazioni possibili.

Chi gestisce un server è continuamente sotto attacco da parte di software che tentano di craccare la password di amministratore ed a volte ci riescono, in quanto purtroppo sono ancora in molti a non utilizzare autenticazioni con password robuste o con chiave asimmetrica.

Chi effettua un attacco di questo tipo genera moltissime richieste di accesso non riuscito. Lo scopo è dunque bannare gli indirizzi IP che effettuano continui tentativi di accesso fallito. Uno dei software più appropriati per farlo è Fail2ban.

Indice dei Contenuti

Funzionamento di Fail2ban

Il software non fa altro che effettuare una scansione dei file di log dei servizi configurati, ad esempio ssh, proftpd, apache, ecc.., e quando trova un numero di tentativi di accesso falliti superiore a quelli configurati, banna l’indirizzo IP inserendo una semplice regola sul firewall iptables per un periodo di tempo prestabilito.

Limiti di Fail2ban

Fail2ban è sicuramente in grado di ridurre il numero di tentativi di autenticazione falliti tuttavia non può eliminare il rischio derivato dall’utilizzo di password deboli o vulnerabilità software che consentono il bypass dell’autenticazione.

A tal proposito è vivamente consigliato utilizzare servizi che utilizzano l’autenticazione a due fattori o mediante chiavi pubbliche e private.

Si ricorda inoltre che un utente locale del server è in grado di iniettare messaggi su syslog e quindi potrebbe potenzialmente effettuare attacchi DoS contro un qualsiasi indirizzo IP.

Installazione di Fail2ban su Ubuntu e Debian

Installare Fail2ban su un server linux Ubuntu o Debian è semplice come bere un bicchier d’acqua. Prima di tutto aggiornate l’indice dei pacchetti in modo da essere sicuri di installare l’ultima versione di fail2ban disponibile, dopodiché procedete con l’installazione di fail2ban:

$ sudo apt-get update && sudo apt-get install fail2ban

Ad installazione terminata occorre passare alla configurazione.

Configurazione di Fail2ban

Fail2ban ha quattro file di configurazione:

  1. fail2ban.conf: contiene le configurazioni globali;
  2. filter.d/*.conf: filtri che specificano come identificare gli errori di autenticazione per i diversi servizi;
  3. action.d/*.conf: azioni predefinite che contengono i comandi per bannare o sbannare indirizzi IP;
  4. jail.conf o jail.d/*.conf: regole che combinano filtri e azioni.

Quindi le regole di Fail2ban si chiamano jail e si trovano all’interno del file /etc/fail2ban/jail.conf. Il file è suddiviso in sezioni di cui una di default globale le cui regole generiche possono essere sovrascritte dalle sezioni più specifiche.

Il nome di ogni sezione è racchiuso tra parentesi quadre e contiene alcuni parametri, esempio:

[ssh]
enabled   = true
port      = 2222
filter    = sshd
maxretry  = 3
bantime   = 24h
findtime  = 1h
logpath   = /var/log/auth.log
destemail = miaemail@gmail.com
sendername = 'Fail2Ban Server 1'
action = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"] %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s", sendername="%(sendername)s"]

Di seguito la spiegazione dei vari parametri:

  • enabled: può essere true o false e serve per stabilire se la jail è da considerarsi attiva o non attiva.
  • port: specifica l’insieme di porte di rete separate da virgola sulle quali è in ascolto il servizio da monitorare.
  • filter: indica il filtro da usare contenuto all’interno della directory /etc/fail2ban/filter.d. Sarebbe il nome del file ma senza l’estensione
  • logpath: path al file di log del servizio da analizzare.
  • maxretry: numero massimo di tentativi di accesso non riusciti da tollerare, oltre i quali scatta il ban.
  • ignoreip: permette di indicare l’IP o una classe di indirizzi IP da ignorare.
  • bantime: tempo del ban espresso in secondi (se negativo è per sempre). È possibile specificare anche minuti, ore e giorni, mesi, anni con stringhe del tipo 10m, 10h, 10d, 10mo, 10y (10 minuti, 10 ore, 10 giorni, 10 mesi, 10 anni).
  • findtime: un host viene bannato se supera maxretry tentativi di accesso non riusciti in findtime secondi di tempo. È possibile usare lo stesso formato di bantime.
  • destemail: indirizzo email a cui inviare una email in caso di ban di un nuovo host.
  • action: l’azione da eseguire quando si verifica la condizione di ban. L’azione di default è quella di bannare l’indirizzo IP con una regola di iptables. Può essere anche un’azione definita all’interno di /etc/fail2ban/action.d e come per la filter sarebbe il nome del file ma senza l’estensione.
  • sendername: nome mittente della email.
  • chain: catena di iptables da usare per l’inserimento della regola del ban (di default è INPUT).
  • protocol: il protocollo di rete (di default è tcp).
  • banaction: software di default per effettuare il ban. Può essere iptables, iptables-new, iptables-multiport, shorewall, ecc..

È vivamente sconsigliato modificare il file jail.conf. Le regole personalizzate occorre scriverle all’interno della directory jail.d affinché jail.conf possa essere sovrascritto in caso di aggiornamenti senza perdere le regole.

Quindi creare all’interno di jail.d un file con estensione .conf ed inserire al suo interno le regole Fail2Ban. Salvare e verificare con fail2ban-server che non siano presenti errori di configurazione:

$ sudo fail2ban-server -t
OK: configuration test is successful

Se tutto va bene, riavviare il servizio per rendere le modifiche effettive:

$ sudo service fail2ban restart

Sbannare un indirizzo IP

Per togliere il ban ad uno specifico indirizzo IP occorre utilizzare il seguente comando avendo l’accortezza di sostituire il nome della jail e l’indirizzo IP:

sudo fail2ban-client set nome-jail unbanip indirizzo-ip

Se ad esempio volessimo togliere il ban per la jail sshd all’indirizzo IP 99.88.77.66, lanceremo il seguente comando:

sudo fail2ban-client set sshd unbanip 99.88.77.66

Esempio di azioni

Vi sono principalmente tre tipi di azioni: ban semplice, ban con notifica e ban con notifica avanzata.

Ban semplice

La seguente azione si limita a bannare semplicemente l’indirizzo IP sul protocollo e sulla porta specificata nella chain di default.

action = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]

Ban con notifica

Oltre a bannare come nella regola precedente, invia il whois dell’indirizzo IP bannato all’indirizzo email specificato in destemail.

action = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
 %(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s", sendername="%(sendername)s"]

Ban con notifica avanzata

Come la regola precedente ma oltre al whois invia anche le linee di file di log interessate che hanno fatto scattare il ban.

action = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
 %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s", sendername="%(sendername)s"]

Monitoraggio

Per monitorare lo status dei servizi analizzati, esiste il comando fail2ban-client. Per visualizzare le jail attive basta lanciare il seguente comando:

$ sudo fail2ban-client status
Status
|- Number of jail: 3
`- Jail list: vsftpd, ssh, ssh-ddos

Se volessimo monitorare una jail nello specifico, basta far seguire il nome della regola a status:

$ sudo fail2ban-client status ssh
Status for the jail: ssh
|- filter
| |- File list: /var/log/auth.log 
| |- Currently failed: 0
| `- Total failed: 5
`- action
 |- Currently banned: 0
 | `- IP list:
 `- Total banned: 1

Una volta configurate tutte le jail del caso ed eseguito i vari test, il server può ritenersi al sicuro da attacchi brute force e wordlist da parte di utenti malintenzionati.

Visualizza Commenti

  • Modificando /etc/fail2ban/jail.conf e successivo sudo service fail2ban restart fail2ban non funziona più.....
    Con sudo fail2ban-client status non trova il server..... come se non fosse installato
    Se non faccio alcuna modifica a jail.conf allora funziona solo però con ssh jail
    Come mai ?
    Io abilito solo alcuni jail.....
    Hai info in merito ^
    Grazie

Articoli pubblicati di recente

Come avere tanti Mi Piace su Facebook

Come aumentare i Mi Piace su Facebook? È uno dei bisogni primari di chi si…

15 Marzo 2020

Facebook Pixel: cos’è e come crearne uno

L'utilizzo del Pixel di Facebook è fondamentale per l'ottimizzazione di una campagna pubblicitaria Facebook ma…

17 Febbraio 2020

Social network più famosi: lista aggiornata al 2024

Quali sono i social network più famosi? Ormai i social network a disposizione del pubblico…

28 Gennaio 2020

Google BERT update: tutto quello che c’è da sapere

Google BERT è l'algoritmo di Google entrato in funzione il 25 Ottobre del 2019. A…

24 Gennaio 2020

Analisi SWOT: come si fa ed esempio pratico

L'analisi SWOT è parte integrante e importantissima di un piano marketing efficace. Grazie a questo…

22 Gennaio 2020

Come apparire su Google Maps

Apparire su Google Maps è estremamente importante per un'attività locale. Consente non solo di ottenere…

2 Gennaio 2020