Server sicuro con Fail2Ban

Fail2ban

 

Un server web è una delle macchine che maggiormente possono essere esposte ad attacchi informatici. Anche solo piccole falle di sicurezza possono degenerare in problemi talvolta molto gravi.
Uno dei metodi migliori per avere una protezinoe a 360 gradi è quella di installare File2Ban.

 

 

CHE COSA È FAIL2BAN
Per definizione Fail2Ban è un software di Intrusion Detection System (IDS) ossia un programma che resta in ascolto sulla nostra macchina e “banna” tutti gli ip che non si comportano in modo conforme a determinate regole.
L'idea che sta dietro questo programma è molto semplice: su Linux tutto ciò che è eseguito lascia una traccia all'interno dei file di log. Ecco allora che Fail2Ban si occupa di leggerli tutti e mettere in atto tutte le operazioni per mantenere in sicurezza il sistema.
Ma come fa? Semlicemente analizza tutti i file di log del sistema operativo, e identifica gli ip che possono creare danni.
Un semplice esempio è l'attacco a forza bruta su ssh. Per come funziona questo programma, ogni volta che viene cercato di fare un login, sia che fallisca che abbia successo, il programma ssh scrive su un file di log l'evento. A questo punto Fail2Ban legge la stringa e, se è tante volte che questo ip cerca senza successo di accedere, allora lo inserisce in una blacklist a tempo. La blacklist è comune a tutti i programmi che Fail2Ban monitora. Di qonsegueza se un ip maligno è bannato per troppi accessi a ssh, allora sarà bannato anche per tutti i programmi monitorati.

 

 

INSTALLAZIONE
Fail2ban si trova già nei repository ufficiali. Apriamo quindi il terminale e diamo:

sudo apt-get install fail2ban gamin

Installiamo due pacchetti. Il primo è ovviamente fail2ban, mentre il secondo è utilizzato dal primo per leggere i file di log.

 

 

CONFIGURAZIONE
Fail2Ban genera automaticamente un file di configurazione chiamato jail.conf. Gli stessi siluppatori non consigliano di editarlo, ma di effettuarne una copia. Dobbiamo quindi crearlo noi sulla falsa riga di quello principale. Lo creeremo, dando il comando:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Adesso andiamo a editare il file che abbiamo appena creato utilizzando il comando nano.

sudo nano /etc/fail2ban/jail.local

Noi vi presentiamo la configurazione che abbiamo inserito su un nostro piccolo server di cui ne facciamo un utilizzo prettamente privato. A seconda dell'utilizzo che fate della vostra macchina, lavorate di conseguenza.

Il file di configurazione è molto esteso, e per questo è suddiviso in sezioni. Iniziamo dalla prima che è [DEFAULT]. Questa racchiude sono le configurazioni generali.
La prima stringa che troviamo riguarda gli ip da non bannare. Inseriamo tutti quelli che ci servono e li separiamo da uno spazio:

ignoreip = 127.0.0.1/24 192.168.1.1/24

Come la maggior parte di tutti i programmi, anche questo accetta le cosiddette espressioni regolari.
Come abbiamo detto in precedenza, ogni volta che il sistema identifica un host “maligno” questo viene bannato per un certo tempo, che possiamo indicare noi editando la seguente riga:

bantime = 2592000

Attenzione solo al fatto che sono secondi. Quindi se la matematica non è un opinione indichiamo di bannare per un mese tutti gli ip maligni.
Un host viene bannato quando fa molti tentativi durante un certo lasso di tempo. Andiamo a editare le seguenti due linee in modo da impostare la sensibilità del programma:

findtime = 300 maxretry = 3

Maxretry sono il numero di tentativi massimi che un host può fare in un lasso di tempo pari a findtime espresso in secondi. Quindi se un ip cerca di accedere e fallisce per più di 3 volte in circa 5 minuti, fail2ban lo inserisce in blacklist.
Editiamo ancora la seguente linea inserendo gamin (il programma che abbiamo installato precedentemente) per il monitoring dei file di log:

backend = gamin

Verifichiamo che la seguente riga sia uguale alla seguente:

usedns = warn

Impostiamo ora la mail a cui il sistema deve notificare eventuali problemi o eventi in genere, andando a inserire la nostra mail nella seguente linea:

destemail = miaemail@example.com

e

sendermail = miamail@example.com

Attenzione per impostare l'invio delle mail va configurato un servizio di invio mail associato al nostro sistema. Noi utilizziamo con successo ssmtp, e lo abbiamo configurato seguendo questa guida.
Finalmente arriviamo alla sezione JAILS, in cui modificare le regole specifiche per i programmi che vogliamo monitorare.
Iniziamo da ssh, trovando la sezione [ssh] e modificando come segue

  [ssh]
  enabled  = true
  port     = ssh
  filter   = sshd
  logpath  = /var/log/auth.log
  maxretry = 6

Per prevenire attacchi di tipo DDoS proteggiamo il nostro server apache, cercando la sezione [apache] e editiando le seguenti sezioni, fino a farle diventare simili a queste.

  [apache]
  enabled  = true
  port     = http,https
  filter   = apache-auth
  logpath  = /var/log/apache2/*error.log
  maxretry = 3

  [apache-noscript]
  enabled  = true
  port     = http,https
  filter   = apache-noscript
  logpath  = /var/log/apache2/*error.log
  maxretry = 3

  [apache-overflows]
  enabled  = true
  port     = http,https
  filter   = apache-overflows
  logpath  = /var/log/apache2/*error.log
  maxretry = 2
   
  [apache-modsecurity]
  enabled  = true
  port     = http,https
  filter   = apache- modsecurity
  logpath  = /var/log/apache2/*error.log
  maxretry = 2

Come detto prima il file di configurazione risulta molto lungo. Lo scorriamo tutto e abilitiamo fail2ban a ogni programma che abbiamo installato.
Una volta soddisfatti, salviamo e facciamo ripartire il demone con:

sudo /etc/init.d/fail2ban start

 

 

VERIFICHIAMO LO STATO DI FAIL2BAN
Arrivati a questo punto dobbiamo accertarci se il software sta lavorando a dovere. Iniziamo dando:

sudo fail2ban-client status

dove possiamo vedere quali jail (regole) sono abilitate.

 

fail2banstatus

Possiamo vedere in dettaglio tutte le informazioni rigurdanti le singole regole dando:

sudo fail2ban-client status ‹jail›

dove al post di ‹jail› inseriremo la regola che vogliamo.

 

 

BANNARE E DEBANNARE MANUALMENTE
Ovviamente è possibile bannare manualmente una serie di ip, dando semplicemente il comando:

sudo fail2ban-client set [jail] banip ‹ip da bannare›

Viceversa, possiamo debannare un ip (perchè magari lo abbiamo bannato per sbaglio o per test) con il comando:

sudo fail2ban-client set [jail] unbanip ‹ip da de-bannare›

In tutti e due i comandi è possibile bannare o debanare anche da un singolo servizio con il parametro opzionale [jail]. Se non lo mettiamo, una volta dati i comandi, banneremo o debanneremo l'ip da tutti i servizi coperti da fail2ban.

 

 

CONCLUSIONI
Vi abbiamo presentato in modo veloce un esempio di configurazione che potete utilizzare sui vostri server. Ovviamente va calibrato a seconda di che servizi girano sulla vostra macchina, e non è neanche molto difficile da fare.
Per convincervi ancora meglio ecco una chicca. Quando abbiamo installato fail2ban sul nostro piccolo server (uso personale e con ip dinamico), lo abbiamo configurato per monitorare ssh. Dopo solo qualche ora che era online, guardate quanti simpaticoni hanno provato a accedere?!?!?

 

fail

 

Con questo direi che vi abbiamo convinto. Al prossimo post! 😉

 

FONTI

Dottore in Informatica. Appassionato di computer fin dal primo PC Olivetti con Windows 95 e la bellezza di 8 MB di RAM.
Utilizzatore Linux da 5 anni, credo profondamente nella filosofia open source.
Dopo tante distro provate sul mio fidato Toshiba, uso Fedora per lo studio e il divertimento.

Lascia un commento