User Tools

Site Tools


doc:appunti:linux:sa:fail2ban

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:fail2ban [2020/10/30 11:58] – [Integrazione con Shorewall] niccolodoc:appunti:linux:sa:fail2ban [2023/10/30 10:32] (current) – [Integrazione con shorewall] niccolo
Line 5: Line 5:
 Appena si installa il pacchetto vengono automaticamente abilitate delle regole, ad esempio per bloccare gli IP che falliscono l'accesso ssh. Appena si installa il pacchetto vengono automaticamente abilitate delle regole, ad esempio per bloccare gli IP che falliscono l'accesso ssh.
  
-Esiste un demone in esecuzione che può essere avviato/fermato con:+Con Debian che utilizza Systemd (cioè dalla release 8 Jessie), è possibile avviare (o fermare, o disabilitare) il servizio con comandi del tipo:
  
 <code> <code>
-/etc/init.d/fail2ban {start|stop}+systemctl start fail2ban.service
 </code> </code>
 +
 +===== Integrazione con shorewall =====
 +
 +La configurazione predefinita del pacchetto Debian prevede che l'azione di bloccare un determinato indirizzo IP venga effettuato con una opportuna regola **iptables** aggiunta a runtime. Se si è installato un gestore di iptables, come ad esempio **Shorewall**, è necessario cambiare la configurazione di fail2ban in modo che l'azione di ban e unban sia coerente con il sistema Shorewall.
 +
 +Le impostazioni predefinite sono generalmente in ''/etc/fail2ban/jail.conf''. La personalizzazione può essere fatta in un file **/etc/fail2ban/jail.d/custom.local**. L'estensione .local fa sì che il file venga letto dopo i file .conf e che le sue impostazioni sostituiscano i default (a parità di estensione viene considerato anche l'ordine alfabetico). In questo file si possono configurare alcune delle impostazioni generali che vanno a 
 +
 +<file>
 +[DEFAULT]
 +ignoreip = 185.211.173.7 127.0.0.1/8 ::1
 +bantime  = 3600
 +findtime  = 60
 +maxretry = 10
 +destemail = sysadmin@rigacci.org
 +sender = sysadmin@rigacci.org
 +banaction = shorewall
 +banaction_allports = shorewall
 +</file>
 +
 +====== fail2ban-client 0.11 ======
 +
 +Il programma di controllo del servizio è **fail2ban-client**. La versione **0.11.2** fornita da Debian 11 Bullseye supporta la seguente sintassi (che è notevolmente diversa ad esempio dalla versione 0.9.6 fornita con Debian 9 Stretch).
 +
 +<code>
 +fail2ban-client status
 +fail2ban-client banned
 +fail2ban-client unban 172.105.41.121
 +</code>
 +
 +Per vedere lo stato di un jail:
 +
 +<code>
 +fail2ban-client status sshd
 +Status for the jail: sshd
 +|- Filter
 +|  |- Currently failed: 9
 +|  |- Total failed:     18338
 +|  `- File list:        /var/log/auth.log
 +`- Actions
 +   |- Currently banned: 6
 +   |- Total banned:     413
 +   `- Banned IP list:   182.72.235.172 41.226.27.59 45.88.8.95 94.23.149.231
 +</code>
 +
 +È possibile anche entrare nel dettaglio delle azioni configurate per un certo //jail// (il servizio monitorato che può essere bloccato). Ad esempio per il servizio sshd si scopre che è stata configurata l'azione **iptables-multiport**:
 +
 +<code>
 +fail2ban-client get sshd actions
 +The jail sshd has the following actions:
 +iptables-multiport
 +</code>
 +
 +È possibile anche sapere quale azione effettiva corrisponde ad esempio ad //actionban// se l'action è //iptables-multiport//:
 +
 +<code>
 +fail2ban-client get sshd action iptables-multiport actionban
 +<iptables> -I f2b-sshd 1 -s <ip> -j <blocktype>
 +</code>
 +
 +====== fail2ban-client 0.9 ======
 +
 +:!: **ATTENZIONE**! Questa sintassi è obsoleta, dalla versione 0.10 di Fail2ban (fornita con Debian 10 Buster) si deve usare la nuova sintassi.
  
 Il demone si controlla tramite **''fail2ban-client''** (che usa il socket ''/var/run/fail2ban/fail2ban.sock''). Per vedere quali servizi sono monitorati e lo **stato di ciascun servizio**: Il demone si controlla tramite **''fail2ban-client''** (che usa il socket ''/var/run/fail2ban/fail2ban.sock''). Per vedere quali servizi sono monitorati e lo **stato di ciascun servizio**:
Line 135: Line 197:
 ^ filter     | Nome del filtro da usare, cioè del file in **''/etc/fail2ban/filter.d/''** (senza l'estensione ''.conf'' o ''.local'').  | ^ filter     | Nome del filtro da usare, cioè del file in **''/etc/fail2ban/filter.d/''** (senza l'estensione ''.conf'' o ''.local'').  |
 ^ port       | Porta o elenco di porte separate da virgola da bloccare. Porte multiple richiedono l'azione **iptables-multiport**.  | ^ port       | Porta o elenco di porte separate da virgola da bloccare. Porte multiple richiedono l'azione **iptables-multiport**.  |
-banaction  | Azione usata per bloccare l'aggressore, cioè il file in **''/etc/fail2ban/action.d/''** (senza l'estensione ''.conf''). Una delle azioni più utili è ''iptables-multiport'' |+action     | Azione usata per bloccare l'aggressore, cioè il file in **''/etc/fail2ban/action.d/''** (senza l'estensione ''.conf''). Una delle azioni più utili è ''iptables-multiport'' |
 ^ logpath    | File di log da osservare.  | ^ logpath    | File di log da osservare.  |
 ^ maxretry   | Numero di corrispondenze che fanno scattare il ban.  | ^ maxretry   | Numero di corrispondenze che fanno scattare il ban.  |
Line 141: Line 203:
 ^ bantime    | Durata del ban in secondi.  | ^ bantime    | Durata del ban in secondi.  |
  
-===== Integrazione con Shorewall ===== +===== Reference configurazione predefinita =====
- +
-La configurazione predefinita di fail2ban in Debian ...FIXME+
  
 ^ Nome  ^ Contesto  ^ Note  ^ ^ Nome  ^ Contesto  ^ Note  ^
-^ banaction            | Usato durante la sostituzione(?) del parametro **action**. Secondo la configurazione predefinita, il valore nella sezione **[DEFAULT]** è **iptables-multiport**.   | +^ action              | Jail  |Indica quale script eseguire quando si deve bloccare o sbloccare un aggressore. Gli script sono quelli presenti in **/etc/fail2ban/action.d/** e vanno indicati senza l'estensione .conf o .local. Ogni jail può avere una o più //action// da eseguire. In generale non si indica direttamente lo script, ma una variabile del tipo **%%%(var_name)s%%**. Nella configurazione predefinita si utilizza la variabile **action_**.  | 
-^ banaction_allports  |  | Secondo la configurazione predefinita, il valore nella sezione **[DEFAULT]** è **iptables-allports**. +^ action_*            | Jail  | Variabili che definisco varie azioni possibili, da utilizzare quando necessario. Nella configurazione predefinita troviamo alcune definizioni:\\ **action_**: solo ban\\ **action_mw**: ban, mail con whois\\ **action_mwl**: ban, mail con whois e log\\ **action_xarf**: ban, mail to abuse contact\\ ...\\ Nella configurazione predefinita queste variabili non fanno direttamente riferimento agli script da eseguire, ma ad altre variabili.    
-^ action              | Jail  |Indica quale script eseguire tra quelli presenti in **/etc/fail2ban/action.d/** (senza l'estensione .conf o .local). Ogni jail può avere una o più //action//+^ banaction           | Jail  | Nella configurazione predefinita è una variabile utilizzata dalle varie **%%action_*%%** e contiene finalmente il nome effettivo dello script da eseguire. Secondo la configurazione predefinita, il valore nella sezione **[DEFAULT]** è **iptables-multiport**.   | 
-^ action_*            | Jail  | Variabili che definisco le varie azioni possibili:\\ **action_**: solo ban\\ **action_mw**: ban, mail con whois\\ **action_mwl**: ban, mail con whois e log\\ **action_xarf**: ban, mail to abuse contact\\ ...    | +^ banaction_allports  | Jail  | Altra variabile utilizzata nella catena di sostituzioni della **action**. Secondo la configurazione predefinita, il valore nella sezione **[DEFAULT]** è **iptables-allports**.  
-^ actionban           | Action +^ actionban           | Action  | È la sezione di uno script ti tipo //action// (nella directory **/etc/fail2ban/action.d/**) che definisce le azioni da intraprendere per bloccare un IP.  | 
-^ actionunban         | Action  |+^ actionunban         | Action  | Azioni che sbloccano in indirizzo IP, annullando l'effetto di //actionban// |
  
-Per modificare la configurazione predefinita si può aggiungere un file nella directory **/etc/fail2ban/jail.d/**, ad esempio **99_custom.local**Oltre all'ordine alfabetico, i file con estensione **.local** sono processati dopo quelli con estensione **.conf**; i parametri definiti **dopo hanno la precedenza** su quelli definiti prima.+ 
 +===== Esempio per WordPress wp-login.php ===== 
 + 
 +Un caso tipico di attacco a forza bruta è quello contro il login di WordPress, nei file di log Apache si legge il tentativo che può essere in GET oppure in POST: 
 + 
 +<code> 
 +185.120.86.118 - - [21/Jul/2022:11:00:25 +0200] "GET /wp/wp-login.php HTTP/1.1" 200 7004 ... 
 +185.120.86.118 - - [21/Jul/2022:11:00:26 +0200] "POST /wp/wp-login.php HTTP/1.1" 200 7373 ... 
 +</code> 
 + 
 +In questo caso si agisce sull'accesso al file **wp-login.php** indipendentemente dal fatto che il login abbia successo o meno (i due casi non sono distinguibili nei log). Si definisce anzitutto una regola di controllo log creando il file **/etc/fail2ban/filter.d/wordpress-local.conf**:
  
 <file> <file>
-[DEFAULT+[Definition
-banaction shorewall +failregex ^<HOST> .* "POST .*wp-login.php 
-banaction_allports shorewall+            ^<HOST> .* "POST .*xmlrpc.php 
 +            ^<HOST> .* "GET .*wp-login.php 
 +            ^<HOST> .* "GET .*xmlrpc.php 
 +ignoreregex =
 </file> </file>
 +
 +Come si vede si approfitta per bloccare anche gli accessi a **xmlrpc.php**, un altro vettore comune di attacco a WordPress (fra l'altro il protocollo XML-RPC è da considerarsi obsoleto e rimpiazzato dalle API native di WordPress).
 +
 +Quindi si definisce la regola di ban creando il file **/etc/fail2ban/jail.d/wordpress-local.conf**:
 +
 +<file>
 +[wordpress]
 +enabled = true
 +usedns = no
 +port = http,https
 +filter = wordpress-local
 +logpath = /var/log/apache2/*/access.log
 +maxretry = 4
 +findtime = 120
 +bantime = 7200
 +</file>
 +
 +Dopo aver fatto il reload del servizio fail2ban, chi accede a ''wp-login.php'' per più di 4 volte in 2 minuti verrà bloccato per 2 ore.
  
doc/appunti/linux/sa/fail2ban.1604055505.txt.gz · Last modified: 2020/10/30 11:58 by niccolo