• 0510217318
  • [email protected]
SqueezeMindSqueezeMindSqueezeMindSqueezeMind
  • Home
  • Servizi
  • Collaborazioni b2b
  • Ci hanno scelto
  • Blog
Contattaci Adesso
✕

Home » Blog » Guide tecniche » Guida a Fail2Ban: proteggere il server da attacchi bruteforce

Guida a Fail2Ban: proteggere il server da attacchi bruteforce

22 Aprile 2016
attacco-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 = [email protected]
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.

Fail2ban Notifica

Questo articolo ti è tornato utile? Condividilo su

Ti consigliamo di leggere anche:

come creare una macchina virtuale
26 Novembre 2019

Come creare una macchina virtuale


Leggi l'articolo
come fare un backup
29 Luglio 2019

Come fare un backup: guida definitiva


Leggi l'articolo
convertire da kindle a pdf o epub
20 Luglio 2019

Come convertire online libri Kindle in pdf o epub


Leggi l'articolo
Come scegliere un hosting web
15 Luglio 2019

Web Hosting: guida alla scelta di un hosting per siti web


Leggi l'articolo
Abbinamento colori sito web
8 Luglio 2019

Guida all’abbinamento dei colori per un sito web


Leggi l'articolo
fail2ban per Wordpress
1 Luglio 2019

Proteggere WordPress da attacchi bruteforce con Fail2ban


Leggi l'articolo

Cerca sul sito

✕

Iscriviti alla Newsletter

Ricevi i prossimi articoli comodamente via email. Non riceverai mail pubblicità o spam.

La nostra web agency

SqueezeMind è un’agenzia web specializzata nella realizzazione di siti web professionali ed in strategie di web marketing. Il nostro obiettivo è portare le aziende online con strumenti in grado di aumentare i fatturati analiticamente. Per farlo ci serviamo solo dei migliori professionisti in grado di offrire un servizio di eccellente qualità e risultati garantiti.

Entra in contatto con noi

Hai un progetto web e vuoi parlarne con noi? Contattaci ad uno dei seguenti recapiti:
  • 0510217318
  • [email protected]

Categorie del blog

  • Guide Web Marketing
  • Guide SEO
  • Guide E-commerce
  • Guide tecniche
  • Marketing Ristorazione
  • Guide Social Media Marketing

Le nostre certificazioni

google-partner
© SqueezeMind srl - P. IVA 06334160824
capitale sociale € 10.000 i.v. - Tutti i diritti riservati
  • Lavora con noi
  • Mappa del sito
  • Dove siamo
  • Contatti
  • Informativa Privacy
  • Cookie Policy
Contattaci Adesso
Gestisci Consenso
Per fornire le migliori esperienze, utilizziamo tecnologie come i cookie per memorizzare e/o accedere alle informazioni del dispositivo. Il consenso a queste tecnologie ci permetterà di elaborare dati come il comportamento di navigazione o ID unici su questo sito. Non acconsentire o ritirare il consenso può influire negativamente su alcune caratteristiche e funzioni.
Funzionale Sempre attivo
L'archiviazione tecnica o l'accesso sono strettamente necessari al fine legittimo di consentire l'uso di un servizio specifico esplicitamente richiesto dall'abbonato o dall'utente, o al solo scopo di effettuare la trasmissione di una comunicazione su una rete di comunicazione elettronica.
Preferenze
L'archiviazione tecnica o l'accesso sono necessari per lo scopo legittimo di memorizzare le preferenze che non sono richieste dall'abbonato o dall'utente.
Statistiche
L'archiviazione tecnica o l'accesso che viene utilizzato esclusivamente per scopi statistici. L'archiviazione tecnica o l'accesso che viene utilizzato esclusivamente per scopi statistici anonimi. Senza un mandato di comparizione, una conformità volontaria da parte del vostro Fornitore di Servizi Internet, o ulteriori registrazioni da parte di terzi, le informazioni memorizzate o recuperate per questo scopo da sole non possono di solito essere utilizzate per l'identificazione.
Marketing
L'archiviazione tecnica o l'accesso sono necessari per creare profili di utenti per inviare pubblicità, o per tracciare l'utente su un sito web o su diversi siti web per scopi di marketing simili.
  • Gestisci opzioni
  • Gestisci servizi
  • Gestisci {vendor_count} fornitori
  • Per saperne di più su questi scopi
Visualizza le preferenze
  • {title}
  • {title}
  • {title}