Fail2ban: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
21 816 byte aggiunti ,  11 feb 2018
(59 versioni intermedie di 12 utenti non mostrate)
Riga 1: Riga 1:
{{stub}}
{{Versioni compatibili|Squeeze|Wheezy|Jessie|Stretch}}
== Introduzione ==
'''Fail2ban''' ([http://www.fail2ban.org Sito ufficiale]) è un software che è nato per permettere di bloccare gli host che stanno tentando di effettuare un attacco di [[brute force]] via [[SSH]].


'''Fail2ban''' è un software che è nato per permettere di bloccare gli host che stanno tentando di effettuare un attacco di [[brute force]] via [[ssh]].  
Questo genere di attacco si basa su continui tentativi di accesso, provando o l'username [[root]] con password probabili (come ''password'', ''root'', ''toor'' e così via) oppure tramite coppie di username/password conosciute (create, ad esempio, da [[malware]] o da [[rootkit]]).


Questo genere di attacco si basa su continui tentativi di accesso, provando o l'username [[root]] con password probabili (come ''password'', ''root'', ''toor'' e così via..) oppure tramite coppie di username/password conosciute (create, ad esempio, da [[malware]] o da [[rootkit]]...).
Con le ultime versioni, però, si è ampliato ed è in grado di coprire svariati servizi (che andranno, però, configurati manualmente), come ad esempio apache, vsftpd, postfix, etc.
 
Con le ultime versioni, però, si è ampliato ed è in grado di coprire svariati servizi (che andranno, però, configurati manualmente), come ad esempio apache, vsftpd, postfix, etc...


== 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 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).
 


{{Warningbox|Quando si dice che l'IP viene bloccato su un determinato servizio, la macchina resta aperta sugli altri.
'''esempio'''  : se fail2ban blocca un attacco su FTP, blocca all'IP l'accesso alla  porta 21 lasciando aperte le altre sessioni possibili come SSH, HTTP o  altre porte aperte alla comunicazione.}}


== Installazione ==
== Installazione ==
Riga 17: Riga 18:
# apt-get install fail2ban
# apt-get install fail2ban
</pre>
</pre>
A questo punto, lanciando il comando:
<pre>
# iptables -L
</pre>
dovreste vedere una nuova chain relativa a fail2ban.


== Configurazione ==
== Configurazione ==
Il file di configurazione è <tt>/etc/fail2ban/jail.local</tt> e contiene i parametri necessari al funzionamento del software


Il file di configurazione è diviso per sezioni: Ogni sezione inizia ha una struttura simile a:
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.conf</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 <code>/etc/fail2ban/jail.conf</code> è diviso per sezioni; ogni sezione inizia ha una struttura simile a:
<pre>
<pre>
[nomesezione]
[nomesezione]
Riga 29: Riga 36:
</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.<br/>
Per attivare un filtro è quindi necessario solamente portarsi nella sezione del filtro da attivare e variare il valore della direttiva di abilitazione da:
<pre>
enabled = false
</pre>
a
<pre>
enabled = true
</pre>
 
== Attivazione di nuovi filtri (Da Debian Stretch) ==
Fail2ban utilizza una directory apposita per l'attivazione e la gestione di filtri personalizzati. Tutti i file inseriti in questa directory e aventi estensione <tt>.conf</tt> vengono letti e processati all'avvio del demone.
<br/>
Per attivare dei filtri su demoni diversi da SSH è sufficiente quindi creare un nuovo file di configurazione, inserendolo nella directory <tt>/etc/fail2ban/jail.d</tt>:
<pre>
# nano /etc/fail2ban/jail.d/custom.conf
</pre>
Un contenuto per il file, che ci garantisca un buon numero di filtri attivi può essere il seguente:
<pre>
[DEFAULT]
bantime = 14400
ignoreip = 127.0.0.1/8
maxretry = 5
 
[sshd]
enabled = true
port    = 2293
logpath = %(sshd_log)s
backend = %(sshd_backend)s
 
[sshd-ddos]
enabled = true
port    = 2293
logpath = %(sshd_log)s
backend = %(sshd_backend)s
 
[dropbear]
enabled = true
port    = 2293
logpath  = %(dropbear_log)s
backend  = %(dropbear_backend)s
 
[apache-auth]
enabled = true
port    = http,https
logpath  = %(apache_error_log)s
 
[apache-badbots]
enabled = true
port    = http,https
logpath  = %(apache_access_log)s
bantime  = 172800
maxretry = 1
 
[apache-noscript]
enabled = true
port    = http,https
logpath  = %(apache_error_log)s
 
[apache-overflows]
enabled = true
port    = http,https
logpath  = %(apache_error_log)s
maxretry = 2
 
[apache-nohome]
enabled = true
port    = http,https
logpath  = %(apache_error_log)s
maxretry = 2
 
[apache-botsearch]
enabled = true
port    = http,https
logpath  = %(apache_error_log)s
maxretry = 2
 
[apache-fakegooglebot]
port    = http,https
logpath  = %(apache_access_log)s
maxretry = 1
ignorecommand = %(ignorecommands_dir)s/apache-fakegooglebot <ip>
 
[apache-modsecurity]
enabled = true
port    = http,https
logpath  = %(apache_error_log)s
maxretry = 2
 
[apache-shellshock]
enabled = true
port    = http,https
logpath = %(apache_error_log)s
maxretry = 1
 
[php-url-fopen]
enabled = true
port    = http,https
logpath = %(nginx_access_log)s
          %(apache_access_log)s
 
[suhosin]
enabled = true
port    = http,https
logpath = %(suhosin_log)s
 
[roundcube-auth]
[roundcube-auth]
#enabled = true
port    = http,https
logpath  = %(roundcube_errors_log)s
 
[drupal-auth]
enabled = true
port    = http,https
logpath  = %(syslog_daemon)s
backend  = %(syslog_backend)s
 
[monit]
#enabled = true
port = 2812
logpath  = /var/log/monit
 
[webmin-auth]
enabled = true
port    = 10000
logpath = %(syslog_authpriv)s
backend = %(syslog_backend)s
 
[froxlor-auth]
enabled = true
port    = http,https
logpath  = %(syslog_authpriv)s
backend  = %(syslog_backend)s
 
[vsftpd]
enabled = true
port    = ftp,ftp-data,ftps,ftps-data
logpath  = %(vsftpd_log)s
 
[postfix]
#enabled = true
port    = smtp,465,submission
logpath  = %(postfix_log)s
backend  = %(postfix_backend)s
 
[postfix-rbl]
#enabled = true
port    = smtp,465,submission
logpath  = %(postfix_log)s
backend  = %(postfix_backend)s
maxretry = 1
 
[postfix-sasl]
#enabled = true
port    = smtp,465,submission,imap3,imaps,pop3,pop3s
logpath  = %(postfix_log)s
backend  = %(postfix_backend)s
 
[squirrelmail]
#enabled = true
port = smtp,465,submission,imap2,imap3,imaps,pop3,pop3s,http,https,socks
logpath = /var/lib/squirrelmail/prefs/squirrelmail_access_log
 
[recidive]
enabled = true
logpath  = /var/log/fail2ban.log
banaction = %(banaction_allports)s
bantime  = 604800  ; 1 week
findtime = 86400  ; 1 day
 
[pam-generic]
enabled = true
banaction = %(banaction_allports)s
logpath  = %(syslog_authpriv)s
backend  = %(syslog_backend)s
 
[xinetd-fail]
enabled = true
banaction = iptables-multiport-log
logpath  = %(syslog_daemon)s
backend  = %(syslog_backend)s
maxretry  = 2
</pre>
 
== Attivazione di nuovi filtri (Fino a Debian Jessie) ==
=== Server di posta Dovecot ===
Creare il file di filtro <code>/etc/fail2ban/filter.d/dovecot-pop3imap.conf</code>:
<pre>
[Definition]
failregex = (?: pop3-login|imap-login): (?:Authentication failure|Aborted login \(auth failed|Disconnected \(auth failed).*rip=(?P<host>\S*),.*
ignoreregex =
</pre>
Aggiungere questa sezione al file <code>/etc/fail2ban/jail.conf</code>:
<pre>
[dovecot-pop3imap]
 
enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,imap", protocol=tcp]
logpath = /var/log/maillog
maxretry = 10
findtime = 1200
bantime = 1200
</pre>
 
=== Server di Posta Postfix ===
Creare il file di filtro <code>/etc/fail2ban/filter.d/postfix-auth.conf</code>:
<pre>
[Definition]
failregex = (?i): warning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD$
ignoreregex =
</pre>
Aggiungere questa sezione al file <code>/etc/fail2ban/jail.conf</code>:
<pre>
[postfix-auth]
 
enabled  = true
port    = smtp,ssmtp
filter  = postfix-auth
logpath  = /var/log/syslog
</pre>
Creare il file di filtro <code>/etc/fail2ban/filter.d/postfix-sasl.conf</code>:
<pre>
[Definition]
failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGE$
ignoreregex =
</pre>
Aggiungere questa sezione al file <code>/etc/fail2ban/jail.conf</code>:
<pre>
[postfix-sasl]
 
enabled  = true
port    = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
filter  = postfix-sasl
logpath  = /var/log/mail.log
</pre>
 
=== Apache ===
Aggiungere in <code>/etc/fail2ban/jail.d/jail.local i seguenti filtri:
<pre>
##To block failed login attempts use the below jail.
[apache]
enabled  = true
port    = http,https
filter  = apache-auth
logpath  = /var/log/apache2/*error.log
maxretry = 3
bantime = 600
##To block the remote host that is trying to request suspicious URLs, use the below jail.
[apache-overflows]
enabled  = true
port    = http,https
filter  = apache-overflows
logpath  = /var/log/apache2/*error.log
maxretry = 3
bantime = 600
##To block the remote host that is trying to search for scripts on the website to execute, use the below jail.
[apache-noscript]
enabled  = true
port    = http,https
filter  = apache-noscript
logpath  = /var/log/apache2/*error.log
maxretry = 3
bantime = 600
##To block the remote host that is trying to request malicious bot, use below jail.
[apache-badbots]
enabled  = true
port    = http,https
filter  = apache-badbots
logpath  = /var/log/apache2/*error.log
maxretry = 3
bantime = 600
##To stop DOS attack from remote host.
[http-get-dos]
enabled = true
port = http,https
filter = http-get-dos
logpath  = /var/log/apache*/access.log
maxretry = 400
findtime = 400
bantime = 600
action = iptables[name=HTTP, port=http, protocol=tcp]
</pre>
Dovremo quindi creare la regola dell'unico filtro mancante nel pacchetto installato dai repository:
<pre>
# nano /etc/fail2ban/filter.d/http-get-dos.conf
</pre>
con questo contenuto:
<pre>
# Fail2Ban configuration file
[Definition]
# Option: failregex
# Note: This regex will match any GET entry in your logs, so basically all valid and not valid entries are a match.
# You should set up in the jail.conf file, the maxretry and findtime carefully in order to avoid false positives.
failregex = ^<HOST> -.*"(GET|POST).*
# Option: ignoreregex
ignoreregex =
</pre>
Salviamo e riavviamo:
<pre>
# systemctl restart fail2ban
</pre>
 
=== Server FTP===
All'interno del file /etc/fail2ban/jail.conf è presente una sezione FTP in cui basta abilitare quello che si desidera.
<pre>
# FTP servers
#
 
[vsftpd]
 
enabled  = false
port    = ftp,ftp-data,ftps,ftps-data
filter  = vsftpd
logpath  = /var/log/vsftpd.log
# or overwrite it in jails.local to be
# logpath = /var/log/auth.log
# if you want to rely on PAM failed login attempts
# vsftpd's failregex should match both of those formats
maxretry = 6
 
[proftpd]
 
enabled  = true
port    = ftp,ftp-data,ftps,ftps-data
filter  = proftpd
logpath  = /var/log/secure.log
maxretry = 3
 
[wuftpd]
 
enabled  = false
port    = ftp,ftp-data,ftps,ftps-data
filter  = wuftpd
logpath  = /var/log/auth.log
maxretry = 6</pre>
Nel caso di proftpd e wuftpd sono già presenti i filtri in <code>/etc/fail2ban/filter.d</code>
 
Si può aggiungere al filtro di proftpd questa stringa in caso di ban non effettuati su tentativi di accesso non consentito:
<pre>USER S+: no such user found from S* ?[] to S+s*$</pre>
 
=== SSH ===
 
All'interno del file <code>/etc/fail2ban/jail.conf</code> è presente una sezione SSH in cui basta abilitare quello che si desidera.
 
<pre>
[ssh]
 
enabled  = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 3
 
[ssh-ddos]
 
enabled  = true
port    = ssh
filter  = sshd-ddos
logpath  = /var/log/auth.log
maxretry = 3
</pre>
 
Per ciò che riguarda la riga:
<pre>
port    = ssh
</pre>
"ssh" va sostituito con la porta effettivamente usata dall'utente. Nel caso si lasci "ssh", il ban avverrà sulla porta di default di SSH (porta 22).
 
=== Altri filtri consigliati ===
Alcuni filtri utili da inserire in <code>jail.local</code>:
<pre>
[pam-generic]
enabled  = true
banaction = iptables-allports
 
[apache-nohome]
enabled  = true
port      = http,https
filter    = apache-nohome
banaction = iptables-multiport
action    = %(action_mwl)s
logpath  = /var/log/apache*/*access.log
maxretry  = 1
 
[php-url-fopen]
enabled  = true
port      = http,https
filter    = php-url-fopen
logpath  = /var/log/apache*/*access.log
maxretry  = 1
</pre>
 
=== Attivazione dei nuovi filtri ===
Dopo ogni modifica del file di configurazione <code>/etc/fail2ban/jail.conf</code> occorre riavviare il demone di fail2ban:
<pre>
# /etc/init.d/fail2ban reload
</pre>


== 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
; <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;
 


== Gestione di Fail2ban ==
Esistono due comandi accessori che permettono la programmazione del servizio o la visualizzazione dello status di jailing (monitoraggio) dei servizi:
<pre>
# fail2ban-client status
Status
|- Number of jail: 3
`- Jail list: proftpd, ssh, apache-multiport
</pre>
ci elenca il numero di Jail attive.
<br/>
Per listare lo stato di una JAIL specifica si utilizzi il comando:
<pre>
# fail2ban-client status ssh
Status for the jail: ssh
|- filter
| |- Currently failed: 0
| `- Total failed: 8
`- action
|- Currently banned: 0
| `- IP list: []
`- Total banned: 1
</pre>
Per disabilitare dinamicamente una JAIL, ad esempio ssh, si usi il comando:
<pre>
# fail2ban-client set ssh idle off
False
</pre>
Per attivare una nuova jail:
<pre>
# fail2ban-client add apache
Added jail apache
# fail2ban-client start apache
Jail started
</pre>
== Esempi di Azioni ==
== Esempi di Azioni ==
=== Filtraggio semplice ===
=== Filtraggio semplice ===
Riga 52: Riga 495:


=== 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 64: Riga 507:
</pre>
</pre>


== Conclusioni ==
Una volta installato, il software è automaticamente attivo e gira in background come servizio. In caso di modifica del file di configurazione, è necessario effettuare un restart del servizio tramite il comando
<pre>
# /etc/init.d/fail2ban restart
</pre>
== Analisi dei file di log ==
Per verificare se il nostro host è sottoposto ad attacchi sulle password, ad esempio sulla porta di ssh, possiamo usare questo comodo comando:
<pre>
# cat /var/log/auth.log* | grep 'Authentication failure' | grep sshd | awk '{print $1,$2}' |
sort | uniq -c
2 Mar 6
21 Mar 8
</pre>
Se si vuole invece tenere sottocontrollo il sistema di banning si possono usare un paio di comandi che opportunamente redirezionati possono generarci una mail:
<pre>
# grep "Ban " /var/log/fail2ban.log | awk -F[\ \:] '{print $10,"("$7")"}' | sort | uniq -c | sort
10 Set (INFO)
5 192.168.0.10 (WARNING)
</pre>
Questo comando elenca IP attaccante e numero di tentativi falliti.
== Sbloccare IP bloccati ==
I blocchi IP di fail2ban sono solo temporanei, ma è comunque importante sapere come sbloccare un indirizzo IP bannato da fail2ban. Lanciando il comando:
<pre>
# iptables -L
</pre>
è possibile vedere gli indirizzi IP attualmente bloccati:
<pre>
ferdy-hp:~# iptables -L
Chain INPUT (policy ACCEPT)
target    prot opt source              destination
fail2ban-ssh  tcp  --  anywhere            anywhere            tcp dpt:ssh
Chain FORWARD (policy ACCEPT)
target    prot opt source              destination
Chain OUTPUT (policy ACCEPT)
target    prot opt source              destination
Chain fail2ban-ssh (1 references)
target    prot opt source              destination
DROP      0    --  ferdy-sony.casa.local  anywhere
RETURN    0    --  anywhere            anywhere
</pre>
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>
iptables -D <rulename> <rule line>
</pre>
Per sbloccare il PC <code>ferdy-sony.casa.local</code> basterà quindi digitare:
<pre>
# iptables -D fail2ban-ssh 1
</pre>
Possiamo verificare l'effettivo sblocco digitando ancora:
<pre>
# iptables -L
</pre>
== Prova di funzionamento ==
=== Prova 1 ===
Per iniziare possiamo semplicemente provare a collegarci via SSH alla nostra macchina protetta da Fail2ban, sbagliando apposta a digitare nome utente e password. Supponendo che l'indirizzo IP della macchina da proteggere sia <code>192.168.1.10</code> eseguiamo:
<pre>
$ ssh ferdyy@192.168.1.10
</pre>
per un numero di volte sufficiente a far scattare Fail2ban.<br/>
Controlliamo poi di aver ricevuto l'email di avvertimento:
<pre>
From fail2ban@ITSecurity  Thu Jul 16 04:59:24 2009
Subject: [Fail2Ban] ssh: banned 192.168.1.13
Hi,
The ip 1192.168.1.13 has just been banned by Fail2Ban after
5 attempts against ssh.
Here are more information about 192.168.1.13:
{whois info}
Lines containing IP:192.168.1.13 in /var/log/auth.log
Jul 16 04:59:16 example.com sshd[10390]: Failed password for root from 192.168.1.13 port 46023 ssh2
Jul 16 04:59:18 example.com sshd[10390]: Failed password for root from 192.168.1.13 port 46023 ssh2
Jul 16 04:59:20 example.com sshd[10390]: Failed password for root from 192.168.1.13 port 46023 ssh2
Jul 16 04:59:21 example.comsshd[10394]: reverse mapping checking getaddrinfo for 192.168.1.13.example.com [192.168.1.13] failed - POSSIBLE BREAK-IN ATTEMPT!
Jul 16 04:59:22 example.com sshd[10394]: Failed password for root from 192.168.1.13 port 46024 ssh2
Regards,
Fail2Ban
</pre>
Ottimo! Fail2ban funziona.<br/>
Se ora controlliamo la coda di iptables, dovremmo trovare una nuova regola:
<pre>
# iptables -L
Chain fail2ban-ssh (1 references)
target    prot opt source              destination
DROP      all  --  192.168.1.13.example.com  anywhere
</pre>
In alternativa è possibile controllare che fail2ban riesca a leggere dal file di log, con il comando
<pre># fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf</pre>
=== Prova 2 ===
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:
<pre>
# fail2ban-regex "file di log" "filtro prescelto"
</pre>
Ad esempio:
<pre>
# fail2ban-regex /var/log/secure.log /etc/fail2ban/filter.d/proftpd.conf
</pre>
Si noti che il comando va eseguito con sudo o con i permessi di su.<br/>
L'output di questo comando sarà una cosa del genere:
<pre>
barabba@server:~$ fail2ban-regex /var/log/secure.log /etc/fail2ban/filter.d/proftpd.conf
Running tests
Use regex file : /etc/fail2ban/filter.d/proftpd.conf
Use log file : /var/log/secure.log
Results
Failregex
|- Regular expressions:
| [1] (S+[])[: -]+ USER S+: no such user found from S+ [[0-9.]+] to S+:S+s+$
| [2] (S+[])[: -]+ USER S+ (Login failed): Incorrect password.$
| [3] (S+[])[: -]+ SECURITY VIOLATION: S+ login attempted.$
| [4] (S+[])[: -]+ Maximum login attempts (d+) exceeded$
| [5] USER S+: no such user found from S* ?[] to S+s*$
|
`- Number of matches:
[1] 0 match(es)
[2] 6 match(es)
[3] 0 match(es)
[4] 0 match(es)
[5] 28 match(es)
Ignoreregex
|- Regular expressions:
|
`- Number of matches:
Summary
Addresses found:
[1]
[2]
xxx.xxx.xxx.88 (Mon Jun 30 22:09:54 2008)
xxx.xxx.xxx.88 (Mon Jun 30 22:10:15 2008)
xxx.xxx.xxx.88 (Mon Jun 30 22:10:31 2008)
xxx.xxx.xxx.253 (Tue Jul 01 10:43:51 2008)
xxx.xxx.xxx.253 (Tue Jul 01 11:10:58 2008)
xxx.xxx.xxx.253 (Tue Jul 01 11:14:12 2008)
[3]
[4]
[5]
xxx.xxx.xxx.253 (Tue Jul 01 09:26:54 2008)
xxx.xxx.xxx.253 (Tue Jul 01 09:27:09 2008)
xxx.xxx.xxx.253 (Tue Jul 01 09:27:24 2008)
xxx.xxx.xxx.253 (Tue Jul 01 10:43:08 2008)
xxx.xxx.xxx.253 (Tue Jul 01 10:43:22 2008)
xxx.xxx.xxx.253 (Tue Jul 01 11:14:34 2008)
xxx.xxx.xxx.193 (Tue Jul 01 13:02:16 2008)
xxx.xxx.xxx.193 (Tue Jul 01 13:02:47 2008)
xxx.xxx.xxx.193 (Tue Jul 01 13:03:05 2008)
xxx.xxx.xxx.99 (Tue Jul 01 14:19:12 2008)
xxx.xxx.xxx.99 (Tue Jul 01 14:19:14 2008)
Date template hits:
734 hit(s): Month Day Hour:Minute:Second
0 hit(s): Weekday Month Day Hour:Minute:Second Year
0 hit(s): Weekday Month Day Hour:Minute:Second
0 hit(s): Year/Month/Day Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/Month/Year:Hour:Minute:Second
0 hit(s): Year-Month-Day Hour:Minute:Second
0 hit(s): Day-Month-Year Hour:Minute:Second[.Millisecond]
0 hit(s): TAI64N
0 hit(s): Epoch
Success, the total number of match is 19
However, look at the above section 'Running tests' which could contain important
information.
</pre>
Come potete vedere ho aggiunto una regola (numero 5 ) al filtro proftpd.conf:
<pre>
USER S+: no such user found from S* ?[] to S+s*$
</pre>
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/>
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/>
Per finire vi lascio alla mail che vi arriva in caso un IP venga bannato:
<pre>
Subject: [Fail2Ban] proftpd: banned 58.252.70.99
From: Fail2Ban
Hi,
The IP 58.252.70.99 has just been banned by Fail2Ban after
3 attempts against proftpd.
Here are more information about 58.252.70.99:
% [whois.apnic.net node-2]
% Whois data copyright terms    http://www.apnic.net/db/dbcopyright.html
inetnum:      58.252.70.0 - 58.252.70.255
netname:      haidatong
country:      CN
descr:        haidatong, Foshan, Guangdong province
admin-c:      CG272-AP
tech-c:      CG272-AP
status:      ASSIGNED NON-PORTABLE
changed:      wangjj238@cnc.cn 20071221
mnt-by:      MAINT-CNCGROUP-GD
source:      APNIC
route:        58.252.0.0/17
descr:        CNC Group CHINA169 Guangdong Province Network
country:      CN
origin:      AS4837
mnt-by:      MAINT-CNCGROUP-RR
changed:      abuse@cnc-noc.net 20080620
source:      APNIC
Lines containing IP:58.252.70.99 in /var/log/secure.log
Jul 01 14:19:09 kserver proftpd[25566] localhost.localdomain      (::ffff:58.252.70.99[::ffff:58.252.70.99]): FTP session opened.
Jul 01 14:19:12 kserver proftpd[25566] localhost.localdomain (::ffff:58.252.70.99[::ffff:58.252.70.99]): no such user 'Administrator'
Jul 01 14:19:12 kserver proftpd[25566] localhost.localdomain  (::ffff:58.252.70.99[::ffff:58.252.70.99]): USER Administrator: no such user found  from ::ffff:58.252.70.99 [::ffff:58.252.70.99] to ::ffff:192.168.0.50:21
Jul 01 14:19:14 kserver proftpd[25566] localhost.localdomain  (::ffff:58.252.70.99[::ffff:58.252.70.99]): no such user 'Administrator'
Jul 01 14:19:14 kserver proftpd[25566] localhost.localdomain  (::ffff:58.252.70.99[::ffff:58.252.70.99]): USER Administrator: no such user found  from ::ffff:58.252.70.99 [::ffff:58.252.70.99] to ::ffff:192.168.0.50:21
Jul 01 14:19:16 kserver proftpd[25566] localhost.localdomain  (::ffff:58.252.70.99[::ffff:58.252.70.99]): no such user 'Administrator'
Jul 01 14:19:16 kserver proftpd[25566] localhost.localdomain  (::ffff:58.252.70.99[::ffff:58.252.70.99]): USER Administrator: no such user found  from ::ffff:58.252.70.99 [::ffff:58.252.70.99] to ::ffff:192.168.0.50:21
Jul 01 14:19:16 kserver proftpd[25566] localhost.localdomain  (::ffff:58.252.70.99[::ffff:58.252.70.99]): Maximum login attempts (3) exceeded, connection refused
Jul 01 14:19:16 kserver proftpd[25566] localhost.localdomain  (::ffff:58.252.70.99[::ffff:58.252.70.99]): FTP session closed.
Regards,
Fail2Ban
</pre>
== Sitografia ==
[http://www.sistemistiindipendenti.org Sistemisti Indipendenti]


[[Categoria:Sicurezza]]
{{Autori
[[Categoria:Networking]]
|Autore = [[User:Maxer|Maxer]]
|Verificata_da=
:[[Utente:porkyhttp|porkyhttp]] 17:04, 06 mag 2012 (CEST)
: lula  12 gen 2017 (CET)
|Numero_revisori=2
|Estesa_da =
: [[Utente : mm-barabba|mm-barabba]] 06-04-2013
}}
[[Categoria:SSH server e amministrazione remota]]
[[Categoria:Firewall]]
[[Categoria:Monitoraggio]]

Menu di navigazione