Fail2ban: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 8: Riga 8:


= Il funzionamento =
= Il funzionamento =
Il funzionamento è semplice: il software si occupa di effettuare il parsing di alcuni file di log (nel caso di ssh, <tt>/var/log/auth.log</tt>) che contengono le informazioni relative agli accessi falliti. Se vengono contati un numero di tentativi maggiori ad una soglia, l'indirizzo IP viene bloccato, attraverso una regola di iptables, per un tempo impostato e non potrà più accedere al servizio in ascolto su quella porta (ma potrà ancora accedere a quelli sulle altre, cosa molto importante nel caso di indirizzi IP condivisi, come avviene per Fastweb o all'interno delle reti aziendali).
Il funzionamento è semplice: il software si occupa di effettuare il parsing di alcuni file di log (nel caso di ssh, <code>/var/log/auth.log</code>) che contengono le informazioni relative agli accessi falliti. Se vengono contati un numero di tentativi maggiori ad una soglia, l'indirizzo IP viene bloccato, attraverso una regola di iptables, per un tempo impostato e non potrà più accedere al servizio in ascolto su quella porta (ma potrà ancora accedere a quelli sulle altre, cosa molto importante nel caso di indirizzi IP condivisi, come avviene per Fastweb o all'interno delle reti aziendali).


= Installazione =
= Installazione =
Riga 15: Riga 15:
# apt-get install fail2ban
# apt-get install fail2ban
</pre>
</pre>
A questo punto, lanciando il comando
A questo punto, lanciando il comando:
<pre>
<pre>
# iptables -L
# iptables -L
Riga 23: Riga 23:
= Configurazione =
= Configurazione =


Fail2ban è già configurato e pronto all'uso, ma alcuni punti hanno bisogno di piccole modifiche. I file di configurazione sono <tt>/etc/fail2ban/fail2ban.conf</tt> e <tt>/etc/fail2ban/jail.local</tt>: il primo contiene i parametri di configurazione globali (ad esempio potrete specificare in quale file di log verranno registrati gli avvisi di fail2ban), mentre il secondo contiene i parametri necessari al funzionamento del software.
Fail2ban è già configurato e pronto all'uso, ma alcuni punti hanno bisogno di piccole modifiche. I file di configurazione sono <code>/etc/fail2ban/fail2ban.conf</code> e <code>/etc/fail2ban/jail.local</code>: il primo contiene i parametri di configurazione globali (ad esempio potrete specificare in quale file di log verranno registrati gli avvisi di fail2ban), mentre il secondo contiene i parametri necessari al funzionamento del software.


Il file di configurazione <tt>/etc/fail2ban/jail.local</tt> è diviso per sezioni; ogni sezione inizia ha una struttura simile a:
Il file di configurazione <code>/etc/fail2ban/jail.local</code> è diviso per sezioni; ogni sezione inizia ha una struttura simile a:
<pre>
<pre>
[nomesezione]
[nomesezione]
Riga 33: Riga 33:
</pre>
</pre>


Ogni sezione, quindi, identificherà un controllo da eseguire. Fa eccezione la prima: <tt>[DEFAULT]</tt>, in quanto contiene i valori di default che verranno usati nelle sezioni successive; ovviamente potranno essere ridefiniti per adattarli ai propri gusti.
Ogni sezione, quindi, identificherà un controllo da eseguire. Fa eccezione la prima: <code>[DEFAULT]</code>, in quanto contiene i valori di default che verranno usati nelle sezioni successive; ovviamente potranno essere ridefiniti per adattarli ai propri gusti.


= I Parametri =
= I Parametri =
I parametri più importanti sono:
I parametri più importanti sono:


; <tt>ignoreip = 127.0.0.1</tt> : permette di indicare un elenco di ip su cui non verrà fatto il controllo. Utile per non ''tagliare fuori'' accidentalmente l'ufficio. Esempio: 192.168.1.0/24 consente l'accesso a tutta la lan 192.168.1.XXX;
; <code>ignoreip = 127.0.0.1</code> : permette di indicare un elenco di IP su cui non verrà fatto il controllo. Utile per non ''tagliare fuori'' accidentalmente l'ufficio. Esempio: 192.168.1.0/24 consente l'accesso a tutta la lan 192.168.1.XXX;
; <tt>bantime  = 600</tt> : il tempo, in secondi, per cui un host verrà bannato;
; <code>bantime  = 600</code> : il tempo, in secondi, per cui un host verrà bannato;
; <tt>maxretry = 3</tt> : il numero massimo di tentativi dopo cui effettuare il ban dell'host;
; <code>maxretry = 3</code> : il numero massimo di tentativi dopo cui effettuare il ban dell'host;
; <tt>destemail = root@localhost</tt> : l'indirizzo e-mail a cui inviare la mail di notifica;
; <code>destemail = root@localhost</code> : l'indirizzo e-mail a cui inviare la mail di notifica;
; <tt>action = iptables[name=%(__name__)s, port=%(port)s]</tt> : l'azione da prendere. Quella di default blocca semplicemente l'accesso alla porta del servizio all'ip che ha sforato il numero di tentativi massimo;
; <code>action = iptables[name=%(__name__)s, port=%(port)s]</code> : l'azione da prendere. Quella di default blocca semplicemente l'accesso alla porta del servizio all'ip che ha sforato il numero di tentativi massimo;
; <tt>enabled = true</tt> : abilita i controlli all'interno della sezione;
; <code>enabled = true</code> : abilita i controlli all'interno della sezione;
; <tt>port    = ssh</tt> : indica la porta da bloccare;
; <code>port    = ssh</code> : indica la porta da bloccare;
; <tt>filter  = sshd</tt> : indica il filtro da utilizzare (contenuto all'interno della directory <tt>/etc/fail2ban/filter.d</tt> );
; <code>filter  = sshd</code> : indica il filtro da utilizzare (contenuto all'interno della directory <code>/etc/fail2ban/filter.d</code> );
; <tt>logpath  = /var/log/auth.log</tt> : il file contenente il log da controllare;
; <code>logpath  = /var/log/auth.log</code> : il file contenente il log da controllare;


= Esempi di Azioni =
= Esempi di Azioni =
Riga 55: Riga 55:


== Filtraggio con Notifica ==
== Filtraggio con Notifica ==
Questa regola amplia quella precedente, in quanto manda una mail contenente l'ip ed il [[whois]] dell'ip dell'host che ha fatto scattare l'allarme
Questa regola amplia quella precedente, in quanto manda una mail contenente l'IP ed il [[whois]] dell'IP dell'host che ha fatto scattare l'allarme
<pre>
<pre>
action = iptables[name=%(__name__)s, port=%(port)s]
action = iptables[name=%(__name__)s, port=%(port)s]
Riga 96: Riga 96:
RETURN    0    --  anywhere            anywhere
RETURN    0    --  anywhere            anywhere
</pre>
</pre>
Da questo output si nota che il PC chiamato <tt>ferdy-sony.casa.local</tt> è attualmente bloccato da fail2ban. Invece di aspettare il tempo stabilito per lo sblocco automatico, è possibile dire a iptables di ignorare la regola creata da fail2ban, con questa sintassi:
Da questo output si nota che il PC chiamato <code>ferdy-sony.casa.local</code> è attualmente bloccato da fail2ban. Invece di aspettare il tempo stabilito per lo sblocco automatico, è possibile dire a iptables di ignorare la regola creata da fail2ban, con questa sintassi:
<pre>
<pre>
iptables -D <rulename> <rule line>
iptables -D <rulename> <rule line>
</pre>
</pre>
Per sbloccare il PC <tt>ferdy-sony.casa.local</tt> basterà quindi digitare:
Per sbloccare il PC <code>ferdy-sony.casa.local</code> basterà quindi digitare:
<pre>
<pre>
# iptables -D fail2ban-ssh 1  
# iptables -D fail2ban-ssh 1  
</pre>
</pre>
Possiamo verificare l'effettivo sblocco digitando ancora
Possiamo verificare l'effettivo sblocco digitando ancora:
<pre>
<pre>
# iptables -L
# iptables -L
Riga 111: Riga 111:
=Prova di funzionamento=
=Prova di funzionamento=


Ora volendo potete testare <tt>fail2ban</tt>.<br>  
Ora volendo potete testare <code>fail2ban</code>.<br>  
Come esempio ho cercato di accedere al servizio FTP inserendo nome utente e/o password sbagliate con il comando:
Come esempio ho cercato di accedere al servizio FTP inserendo nome utente e/o password sbagliate con il comando:
<pre>
<pre>
Riga 191: Riga 191:
Con questa riga aggiunta il sistema riesce a bannare gli IP che provano a loggarsi con nome utente sbagliato, cosa che prima non avveniva, e infatti il test non rilevava alcun errore dal file di log.
Con questa riga aggiunta il sistema riesce a bannare gli IP che provano a loggarsi con nome utente sbagliato, cosa che prima non avveniva, e infatti il test non rilevava alcun errore dal file di log.
<br/>
<br/>
Grazie a questo semplice test potete già testare se fail2ban è in grado di rilevare possibili errori dai vostri file di log, altrimenti non vi resta che modificare i vari filtri in <tt>/etc/fail2ban/filter.d/</tt>, oppure cercarne uno che funzioni e aggingerlo alla lista come ho fatto io per il mio file <tt>/etc/fail2ban/filter.d/proftpd.conf</tt>.
Grazie a questo semplice test potete già testare se fail2ban è in grado di rilevare possibili errori dai vostri file di log, altrimenti non vi resta che modificare i vari filtri in <code>/etc/fail2ban/filter.d/</code>, oppure cercarne uno che funzioni e aggiungerlo alla lista come ho fatto io per il mio file <code>/etc/fail2ban/filter.d/proftpd.conf</code>.
<br/>
<br/>
Per finire vi lascio alla mail che vi arriva in caso un IP venga bannato:
Per finire vi lascio alla mail che vi arriva in caso un IP venga bannato: