{"id":3289,"date":"2023-03-10T16:54:38","date_gmt":"2023-03-10T15:54:38","guid":{"rendered":"https:\/\/www.gcportal.com\/wordpress\/?p=3289"},"modified":"2023-03-11T20:04:42","modified_gmt":"2023-03-11T19:04:42","slug":"fail2ban-installazione-e-configurazione-su-ubuntu","status":"publish","type":"post","link":"https:\/\/www.gcportal.com\/wordpress\/archives\/3289","title":{"rendered":"Fail2ban: Installazione e configurazione su Ubuntu"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Definizione di Fail2ban e Utilizzo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fail2ban<\/strong>&nbsp;(<a href=\"http:\/\/www.fail2ban.org\/\">Sito ufficiale<\/a>) \u00e8 un software che \u00e8 nato per permettere di bloccare gli host che stanno tentando di effettuare un attacco di&nbsp;<a href=\"https:\/\/guide.debianizzati.org\/index.php?title=Brute_force&amp;action=edit&amp;redlink=1\" target=\"_blank\" rel=\"noreferrer noopener\">brute force<\/a>&nbsp;via&nbsp;<a href=\"https:\/\/guide.debianizzati.org\/index.php\/SSH\" target=\"_blank\" rel=\"noreferrer noopener\">SSH<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questo genere di attacco si basa su continui tentativi di accesso, provando o lo username&nbsp;<a href=\"https:\/\/guide.debianizzati.org\/index.php\/Root\">root<\/a>&nbsp;con password probabili (come&nbsp;<em>password<\/em>,&nbsp;<em>root<\/em>,&nbsp;<em>toor<\/em>&nbsp;e cos\u00ec via) oppure tramite coppie di username\/password conosciute (create, ad esempio, da&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/guide.debianizzati.org\/index.php?title=Malware&amp;action=edit&amp;redlink=1\" target=\"_blank\">malware<\/a>&nbsp;o da&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/guide.debianizzati.org\/index.php?title=Rootkit&amp;action=edit&amp;redlink=1\" target=\"_blank\">rootkit<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con le ultime versioni, per\u00f2, si \u00e8 ampliato ed \u00e8 in grado di coprire svariati servizi (che andranno, per\u00f2, configurati manualmente), come ad esempio apache, vsftpd, ngix, postfix, etc.<br><br>Fail2Ban \u00e8 in grado di ridurre il tasso di tentativi di autenticazione errati, tuttavia non pu\u00f2 eliminare il rischio che presenta un&#8217;autenticazione debole.&nbsp;Configurare i servizi in modo che utilizzino solo meccanismi di autenticazione a due fattori o pubblici\/privati ??se si desidera davvero proteggere i servizi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban funziona modificando dinamicamente le regole del firewall per vietare gli indirizzi che hanno tentato invano di accedere in un certo numero di volte. Come impostazione di base fail2ban configura&nbsp;<em>iptables<\/em>&nbsp;ma vedremo pu\u00f2 essere facilmente impostato per lavorare con UFW.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con fail2ban possiamo rendere il nostro server ancora pi\u00f9 sicuro, potr\u00e0 infatti riconoscere e bannare automaticamente gli IP troppo invadenti. Fail2ban \u00e8 un software sviluppato in Python che esegue la scansione dei file di log (ad esempio \/var\/ log\/nginx\/access.log) e banna gli IP che mostrano comportamenti pericolosi o dannosi: troppi tentativi falliti di login, ricerca di exploit, ecc. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I tentativi di accessi brute force sono piuttosto frequenti contro un server SSH e altri servizi Internet protetti da password (come ftp, pop, \u2026). Gli script automatici provano pi\u00f9 combinazioni di nome utente\/password (attacco brute force) e a volte la modifica della porta rispetto a quella predefinita non pu\u00f2 essere eseguita.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 importante mantenere sicura la propria macchina installando continuamente tutti gli aggiornamenti che vengono proposti dal produttore e bloccare tutte le richieste che potrebbero rallentarla o addirittura danneggiarla.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cosa fare per mitigare i tentativi di intrusione<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Fail2ban <\/strong>tenta di alleviare questi problemi fornendo un modo automatico di identificare non solo i possibili tentativi di intrusione, ma di agire su di essi in modo rapido e semplice in modo definibile dall\u2019utente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I log, i file di registro contengono informazioni interessanti, in particolare sugli accessi non riusciti. Questa informazione pu\u00f2 essere utilizzata in tempo reale per bloccare un client indesiderato ed \u00e8 esattamente quello che fa Fail2ban. Il software esegue la scansione dei file di registro e rileva i modelli che corrispondono a possibili tentativi di intrusione o attacco, quindi esegue azioni di risposta. La maggior parte delle volte l\u2019azione consiste nell\u2019aggiungere una nuova regola nel firewall e inviare una notifica via e-mail all\u2019amministratore di sistema.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Di seguito un elenco delle funzionalit\u00e0 pi\u00f9 importanti disponibili in Fail2ban:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Client\/server<\/li>\n\n\n\n<li>Multithreaded<\/li>\n\n\n\n<li>Supporto Gamin<\/li>\n\n\n\n<li>Rilevamento automatico del formato data\/ora<\/li>\n\n\n\n<li>Supporto jolly \u2013 wildcard in opzione logpath<\/li>\n\n\n\n<li>Supporto per molti servizi (sshd, nginx, apache, qmail, proftpd, sasl, wildcard, ecc.)<\/li>\n\n\n\n<li>Supporto per diverse azioni (iptables, tcp-wrapper, ufw, shorewall, notifiche di posta, ecc.)<\/li>\n\n\n\n<li>Monitoraggio dei file di registro<\/li>\n\n\n\n<li>Prevenzione delle intrusioni<\/li>\n\n\n\n<li>Protezione dictionary attack<\/li>\n\n\n\n<li>Protezione attacchi DoS<\/li>\n\n\n\n<li>Aggiorna le regole del firewall Netfilter \/ iptables o PF<\/li>\n\n\n\n<li>Protegge contro un attacco di brute-force distribuito<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Funzionamento di fail2ban<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019idea alla base di fail2ban \u00e8 monitorare i registri dei servizi comuni per individuare gli schemi nei fallimenti di autenticazione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando fail2ban \u00e8 configurato per monitorare i log di un servizio, esamina un filtro che \u00e8 stato configurato specifico per quel servizio. Il filtro \u00e8 progettato per identificare i fallimenti di autenticazione attraverso l\u2019uso di&nbsp;espressioni regolari&nbsp;complesse. Fail2ban definisce questi modelli di espressioni regolari in una variabile chiamata&nbsp;<strong>failregex<\/strong>. che trovi archiviati nella cartella \/etc\/fail2ban\/filter.d\/.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fortunatamente, fail2ban include diversi filtri precompilati per i servizi e web server pi\u00f9 comuni. Quando una riga nel file di registro del servizio corrisponde a failregex nel suo filtro, l\u2019azione definita viene eseguita per quel servizio. L\u2019azione \u00e8 una variabile che pu\u00f2 essere configurata per fare molte cose diverse, a seconda delle preferenze dell\u2019amministratore.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019azione predefinita consiste nel bannare l\u2019host\/l\u2019indirizzo IP offensivo modificando le regole del firewall iptables oppure, se presente, con UFW. \u00c8 possibile espandere questa azione per inviare anche una e-mail all\u2019amministratore con il rapporto whois dell\u2019aggressore o le linee di log che hanno attivato l\u2019azione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per impostazione predefinita, verr\u00e0 intrapresa un\u2019azione quando tre errori di autenticazione sono stati rilevati in 10 minuti e il tempo di ban predefinito \u00e8 di 10 minuti. L\u2019impostazione predefinita per il numero di errori di autenticazione necessari per attivare un ban \u00e8 sovrascritta nella parte SSH del file di configurazione predefinito per consentire 6 errori prima che il blocco abbia luogo. Questo \u00e8 interamente configurabile dall\u2019amministratore.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando si utilizza la destinazione iptables predefinita per il traffico SSH, fail2ban crea una nuova catena all\u2019avvio del servizio. Aggiunge una nuova regola alla catena INPUT che invia tutto il traffico TCP diretto alla porta 22 alla nuova catena. Nella nuova catena, inserisce una singola regola che ritorna alla catena INPUT.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questo fa solo saltare il traffico verso la nuova catena per poi tornare indietro, non ha alcun effetto sul traffico all\u2019inizio. Tuttavia, quando un IP raggiunge la soglia per i fallimenti di autenticazione, viene aggiunta una regola in cima alla nuova catena per eliminare il traffico da quell\u2019IP. Quando il periodo di divieto \u00e8 scaduto, la regola di iptables viene rimossa. La catena e le regole associate vengono rimosse quando termina il servizio fail2ban.<a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Requisiti<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un server linux (nel mio caso <a href=\"https:\/\/linuxmint.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Linux Mint 21.1<\/a>)<\/li>\n\n\n\n<li>Un account utente non root con privilegio sudo impostato sul tuo server.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installazione di fail2ban<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aggiornare l\u2019indice del pacchetto locale e installare fail2ban digitando i comandi: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo apt-get update\n$ sudo apt-get upgrade\n$ sudo apt-get install fail2ban -y<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Questo installer\u00e0 il software. Per impostazione predefinita, fail2ban \u00e8 configurato per bloccare solo i tentativi di accesso SSH non riusciti. Dobbiamo abilitare alcune regole che lo configureranno per controllare i nostri log di Nginx per i pattern che indicano attivit\u00e0 dannose.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A questo punto va riavviato il servizio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo service fail2ban restart<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">E contestualmente va controllato lo stato del servizio riavviato:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo service fail2ban status<\/mark><\/strong>\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1143\" height=\"744\" src=\"https:\/\/www.gcportal.com\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-10_151717.png\" alt=\"\" class=\"wp-image-3302\" srcset=\"https:\/\/www.gcportal.com\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-10_151717.png 1143w, https:\/\/www.gcportal.com\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-10_151717-300x195.png 300w, https:\/\/www.gcportal.com\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-10_151717-800x521.png 800w, https:\/\/www.gcportal.com\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-10_151717-100x65.png 100w, https:\/\/www.gcportal.com\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-10_151717-768x500.png 768w\" sizes=\"auto, (max-width: 1143px) 100vw, 1143px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><br>Configurazione di fail2ban<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fail2ban \u00e8 configurato attraverso una variet\u00e0 di file situati all\u2019interno di una gerarchia sotto la directory \/etc\/fail2ban\/.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il file&nbsp;<strong>fail2ban.conf<\/strong>&nbsp;configura alcune impostazioni operative di base come il modo in cui il daemon registra le informazioni e il socket e il file pid che utilizzer\u00e0. La configurazione principale ha luogo nei file che definiscono le \u201cjail\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per impostazione predefinita, fail2ban viene fornito con un file jail.conf. Tuttavia, questo file pu\u00f2 essere sovrascritto negli aggiornamenti futuri, quindi ti consiglio di copiare questo file in un nuovo file&nbsp;<strong>jail.local<\/strong>&nbsp;e apportare modifiche l\u00ec.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crea un file jail.local:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ touch \/etc\/fail2ban\/jail.local<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Oppure copia quello di default:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color has-black-color\">$ sudo cp \/etc\/fail2ban\/jail.conf \/etc\/fail2ban\/jail.local<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ora va editato il nuovo file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo nano \/etc\/fail2ban\/jail.local<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dovremmo iniziare valutando i valori predefiniti impostati all\u2019interno del file per vedere se soddisfano i nostri bisogni. Questi si troveranno nella sezione [DEFAULT] all\u2019interno del file. Questi elementi impostano la politica generale e possono essere sovrascritti in specifiche jail.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uno dei primi elementi da esaminare \u00e8 l\u2019elenco di client che non sono soggetti alle politiche fail2ban. Questo \u00e8 impostato dalla direttiva&nbsp;<strong>ignoreip<\/strong>. A volte \u00e8 una buona idea aggiungere il proprio indirizzo IP o la propria rete all\u2019elenco delle eccezioni per evitare di bloccarsi. \u00c8 possibile aggiungere ulteriori indirizzi IP o reti delimitate da uno spazio all\u2019elenco esistente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;DEFAULT]\nignoreip = 127.0.0.1\/8 192.168.188.25 10.12.10.10\/30\nbantime = 3600\nfindtime = 600\nmaxretry = 5\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">[sshd]<br>enabled = true<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un altro elemento che potresti voler aggiustare \u00e8 il&nbsp;<strong>bantime<\/strong>, che controlla quanti secondi per cui un IP \u00e8 bannato. \u00c8 ideale impostarlo su un tempo sufficientemente lungo per disturbare il malintenzionato, ma anche abbastanza breve da consentire agli utenti legittimi di correggere gli errori. Per impostazione predefinita, questo \u00e8 impostato su 600 secondi (10 minuti). Aumenta o diminuisci questo valore come meglio credi. Impostare il bantime a -1 comporter\u00e0 un divieto permanente di tale indirizzo IP. Considera attentamente questa opzione!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I due elementi successivi determinano l\u2019ambito delle righe di registro utilizzate per determinare un client incriminato. Il&nbsp;<strong>findtime&nbsp;<\/strong>specifica una quantit\u00e0 di tempo in secondi e la direttiva&nbsp;<strong>maxretry&nbsp;<\/strong>indica il numero di tentativi da tollerare entro quel tempo. Se un cliente effettua pi\u00f9 di un tentativo di maxretry entro il tempo impostato dal findtime, verr\u00e0 bannato.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Riavvia fail2ban per rendere affettive le modifiche:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ service fail2ban restart<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ogni volta che riavvii fail2ban, il software rilegge il file di configurazione. Nel caso dovessero esserci errori di configurazione, la shell mostra un avvertimento. Correggi il problema e prova di nuovo a riavviare. Se Fail2ban non si avvia correttamente dopo aver creato il file di configurazione, \u00e8 possibile che sia un errore di battitura nel file di configurazione \/etc\/fail2ban\/jail.local. Controlla i contenuti del file e riprova!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verifica lo stato di fail2ban:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ service fail2ban status<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verifica la \u201ccella\u201d delle connessioni SSH:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ fail2ban-client status sshd<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Aggiungere un IP in&nbsp;<em>white list<\/em><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per evitare di essere bannati \u00e8 opportuno inserire il proprio IP in white list in modo che venga ignorato dal servizio fail2ban. Per aggiunge un IP in white list devi editare uno dei due file a scelta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># opzione 1\n\/etc\/fail2ban\/jail.conf\n\n# opzione 2\n\/etc\/fail2ban\/jail.local<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Non serve editarli entrambi, io ad esempio ho modificato solo il file jail.local. Se decidi di editare il file jail.conf aprilo e cerca la riga che inizia cos\u00ec:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ignoreip =<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ora aggiungi l\u2019IP che vuoi ignorare:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ignoreip = 192.168.188.25 192.168.120.0\/32<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Invece per riavviare semplicemente il servizio senza arrestarlo, ad esempio per abilitare la nuova configurazione, digita il seguente comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ service fail2ban restart<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configurazione di Fail2Ban per monitorare i registri Nginx<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ora che disponiamo di alcune delle impostazioni generali di fail2ban, possiamo concentrarci sull\u2019attivazione di alcune jail specifiche di Nginx che monitoreranno i registri del web server per specifici modelli di comportamento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ogni&nbsp;<em>prigione&nbsp;<\/em>all\u2019interno del file di configurazione \u00e8 contrassegnata da un\u2019intestazione contenente il nome della prigione in parentesi quadre. Per impostazione predefinita, solo la [ssh] jail \u00e8 abilitata.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Abilitiamo altre jail custom modificando il file jail.local.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>[nginx-http-auth]<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per abilitare il monitoraggio dei log per i tentativi di accesso a Nginx, abiliteremo la jail [nginx-http-auth]. Modifica nel file \/etc\/fail2ban\/jail.local la direttiva abilitata all\u2019interno di questa sezione in modo che il parametro&nbsp;<em>enabled<\/em>&nbsp;sia \u201ctrue\u201d:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;nginx-http-auth]\nenabled  = true\nfilter   = nginx-http-auth\nport     = http,https\nlogpath  = \/var\/log\/nginx\/error.log\n. . .<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Questa potrebbe essere l\u2019unica jail specifica per Nginx inclusa nel pacchetto fail2ban di Ubuntu, dipende da quale versione hai installato. Tuttavia, possiamo creare le nostre jail custom per aggiungere funzionalit\u00e0 aggiuntive. Puoi trovare ispirazione partendo da&nbsp;<a href=\"https:\/\/snippets.aktagon.com\/snippets\/554-how-to-secure-an-nginx-server-with-fail2ban\" target=\"_blank\" rel=\"noreferrer noopener\">qui<\/a>&nbsp;e&nbsp;<a href=\"http:\/\/www.fail2ban.org\/wiki\/index.php\/NginX\" target=\"_blank\" rel=\"noreferrer noopener\">qui<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>[nginx-noscript]<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Possiamo creare un jail [nginx-noscript] per escludere i client che stanno cercando script eseguibili sul sito web di cui sfruttare vulnerabilit\u00e0. Attenzione perch\u00e8 questa jail&nbsp;<strong>individua richieste HTTP a file con estensioni php, asp, exe|, pl, cgi e scgi<\/strong>&nbsp;quindi non attivarla se le pagine del tuo sito web usano queste estensioni.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puoi aggiungere nel file \/etc\/fail2ban\/jail.local questa jail per vietare a chi richiede questi tipi di risorse:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;nginx-noscript]\nenabled  = true\nport     = http,https\nfilter   = nginx-noscript\nlogpath  = \/var\/log\/nginx\/access.log\nmaxretry = 6\n. . .<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>[wordpress]<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nel mio server ho aggiunto una regola per proteggere la pagina di login di WordPress, il filtro banna IP che falliscono tre volte l\u2019autenticazione. Aggiungi questa sezione al tuo file jail.local:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;wordpress]\nenabled = true\nport = http,https\nfilter = wordpress\naction = iptables-multiport&#91;name=wordpress, port=\"http,https\", protocol=tcp]\nlogpath = \/var\/log\/nginx\/access.log\nmaxretry = 3<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>[nginx-badbots]<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Possiamo aggiungere una sezione chiamata [nginx-badbots] per fermare alcuni modelli di richieste di bot malevoli noti:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;nginx-badbots]\nenabled  = true\nport     = http,https\nfilter   = nginx-badbots\nlogpath  = \/var\/log\/nginx\/access.log\nmaxretry = 2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>[nginx-noproxy]<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Perch\u00e9 non bannare i client che tentano di utilizzare il nostro server Nginx come open proxy? Aggiungiamo una jail [nginx-noproxy] per soddisfare queste richieste:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;nginx-noproxy]\nenabled  = true\nport     = http,https\nfilter   = nginx-noproxy\nlogpath  = \/var\/log\/nginx\/access.log\nmaxretry = 2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Quando hai finito di apportare le modifiche necessarie al file jail.local, salva e chiudi il file.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ora dobbiamo&nbsp;<strong>aggiungere i filtri custom per le jail<\/strong>&nbsp;che abbiamo creato. Spostiamoci nella cartella filter.d e creiamo i file necessari:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color has-black-color\">$ cd \/etc\/fail2ban\/filter.d<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In questa cartella troviamo tutti i filtri precompilati, qui dovremo aggiungere quelli che invece vogliamo creare noi e che abbiamo richiamato nel file jail.local. Partiamo dal primo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>[nginx-noscript]<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creiamo il primo filtro custom [nginx-noscript]:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo nano nginx-noscript.conf<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Incolla la seguente definizione all\u2019interno del nuovo file \/etc\/fail2ban\/filter.d\/nginx-noscript.conf. Sentiti libero di modificare o aggiungere i suffissi dello script:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Definition]\nfailregex = ^&lt;HOST&gt; -.*GET.*(\\.php|\\.asp|\\.exe|\\.pl|\\.cgi|\\.scgi)\nignoreregex =<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>[wordpress]<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Adesso creiamo il filtro custom per WordPress:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo nano wordpress.conf<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Inserisci questo filtro che bloccher\u00e0 tutti gli IP che tentano successivamente di accedere alla pagina di login:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Definition]\nfailregex = ^&lt;HOST&gt; .* \"POST .*wp-login.php\n            ^&lt;HOST&gt; .* \"POST .*xmlrpc.php\nignoreregex =<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>[nginx-badbots]<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ora, se non \u00e8 presente, dobbiamo creare il filtro [nginx-badbots]. In alcune versioni di fail2ban \u00e8 gi\u00e0 presente, altrimenti basta copiare il filtro di Apache \u2013&nbsp;<strong>apache-badbots.conf<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo cp apache-badbots.conf nginx-badbots.conf<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>[nginx-noproxy]<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019ultimo filtro da creare \u00e8 [nginx-noproxy]:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color has-black-color\">$ sudo nano nginx-noproxy.conf<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Questa definizione di filtro corrisponder\u00e0 ai tentativi di utilizzare il server come proxy:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Definition]\nfailregex = ^&lt;HOST&gt; -.*GET http.*\nignoreregex =<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Salva tutti i file quando hai finito e riavvia fail2ban:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo service fail2ban restart<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Integrazione con UFW<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se nel tuo server hai attivato il firewall UFW e vuoi integrare fail2ban, nella sezione DEFAULT del file jail.local aggiungi questa azione:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>banaction = ufw<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La versione pi\u00f9 recente di fail2ban contiene gi\u00e0 un\u2019azione pre-configurata per UFW, puoi controllare dentro la cartella \/etc\/fail2ban\/action.d e cercare il file&nbsp;<strong>ufw.conf<\/strong>. Nel caso non ci fosse, crealo ed incolla questo codice:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Definition]\nactionstart = \nactionstop = \nactioncheck = \nactionban = &#91; -n \"&lt;application&gt;\" ] &amp;&amp; app=\"app &lt;application&gt;\"\n            ufw insert &lt;insertpos&gt; &lt;blocktype&gt; from &lt;ip&gt; to &lt;destination&gt; $app\n\nactionunban = &#91; -n \"&lt;application&gt;\" ] &amp;&amp; app=\"app &lt;application&gt;\"\n              ufw delete &lt;blocktype&gt; from &lt;ip&gt; to &lt;destination&gt; $app\n&#91;Init]\ninsertpos = 1\nblocktype = reject\ndestination = any\napplication = <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ottenere informazioni sulle jail abilitate<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Puoi vedere tutte le tue jail abilitate usando il comando fail2ban-client:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo fail2ban-client status<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 possibile controllare iptables per vedere quali regole sono state modificate da fail2ban. Anche senza regole firewall precedenti, ora avresti un framework abilitato che consente a fail2ban di escludere selettivamente i client aggiungendoli a catene appositamente create:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo iptables -S<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Se vuoi vedere i dettagli dei divieti che vengono applicati da qualsiasi jail, \u00e8 probabilmente pi\u00f9 facile usare di nuovo il client fail2ban:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo fail2ban-client status nginx-http-auth<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Test delle politiche Fail2Ban<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 importante testare le policy di fail2ban per assicurarsi che blocchino il traffico come previsto. Ad esempio, per la richiesta di autenticazione Nginx, \u00e8 possibile fornire credenziali errate un numero di volte. Dopo aver superato il limite, dovresti essere bannato e non riuscire ad accedere al sito. Se imposti le notifiche email, dovresti visualizzare i messaggi relativi al divieto nell\u2019account email che hai fornito.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se guardi lo stato con il comando fail2ban-client, dovresti vedere il tuo indirizzo IP bannato dal sito (se non hai messo il tuo IP in whitelist):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo fail2ban-client status nginx-http-auth<\/mark><\/strong>\n\n# Output\nStatus for the jail: nginx-http-auth\n|- filter\n|  |- File list:        \/var\/log\/nginx\/error.log \n|  |- Currently failed: 0\n|  `- Total failed:     12\n`- action\n   |- Currently banned: 1\n   |  `- IP list:       111.111.111.111\n   `- Total banned:     1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Monitorare fail2ban in tempo reale<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se sei un NERD come me sono sicuro che ti piace monitorare tutto con la shell SSH. Fail2ban pu\u00f2 essere facilmente monitorato in tempo reale con il comando&nbsp;<em>tail<\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ tail -f \/var\/log\/fail2ban.log<\/mark><\/strong><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1342\" height=\"588\" src=\"https:\/\/www.gcportal.com\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-10_152330.png\" alt=\"\" class=\"wp-image-3304\" srcset=\"https:\/\/www.gcportal.com\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-10_152330.png 1342w, https:\/\/www.gcportal.com\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-10_152330-300x131.png 300w, https:\/\/www.gcportal.com\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-10_152330-800x351.png 800w, https:\/\/www.gcportal.com\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-10_152330-100x44.png 100w, https:\/\/www.gcportal.com\/wordpress\/wp-content\/uploads\/2023\/03\/2023-03-10_152330-768x337.png 768w\" sizes=\"auto, (max-width: 1342px) 100vw, 1342px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Se non vedi nulla che significa che la configurazione \u00e8 errata oppure non c\u2019\u00e8 niente di cui preoccuparti.<a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Arrestare e riavviare fail2ban<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nel caso tu avessi bisogno di disattivare e riattivare fail2ban ti baster\u00e0 digitare i seguenti comandi<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># arrestare il servizio fail2ban\n<strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ sudo service fail2ban stop<\/mark><\/strong>\n\n# avviare il servizio fail2ban\n<strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ sudo service fail2ban start<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Per riavviare fail2ban puoi scegliere se riavviare il processo oppure ricaricare le opzioni:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># riavviare il servizio fail2ban\n<strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ sudo systemctl restart fail2ban<\/mark><\/strong>\n\n# ricaricare le opzioni\n<strong><mark style=\"background-color:#fcb900\" class=\"has-inline-color\">$ sudo fail2ban-client reload<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">OMG mi sono bannato!<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Capita, anche a me \u00e8 successo svariate volte prima di mettere il mio IP in white list \ud83d\ude42 Se a casa hai un IP fisso cerca di cambiarlo temporaneamente (con una VPN ad esempio) e accedi via SSH al server. Digita il seguente comando per eliminare il tuo IP dalla lista di ban (cambia l\u2019IP dell\u2019esempio con il tuo):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo fail2ban-client set nginx-noscript unba<\/mark><\/strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">nip <\/mark><strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">192.168.188.123<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Come vedi, nel comando devi specificare in quale jail si trova l\u2019IP, quindi, se non sai in quale jail sei finito, dovrai passarle tutte in rassegna e verificare con il comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#verificare lo stato di specifiche jail\n<strong><mark style=\"background-color:#8ed1fc\" class=\"has-inline-color\">$ sudo fail2ban-client status sshd\n$ sudo fail2ban-client status nginx-botsearch\n$ sudo fail2ban-client status nginx-noscript\n$ sudo fail2ban-client status nginx-http-auth\n$ sudo fail2ban-client status wordpress<\/mark><\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><a><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Esempio di file jail.local<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per riferimento lascio una copia del mio file jail.local, magari servir\u00e0 a qualcuno, magari servir\u00e0 a me \ud83d\ude42<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;DEFAULT] \nignoreip = 127.0.0.1\/8 192.168.188.2\/120\nbantime = 3600\nfindtime = 600\nmaxretry = 2\nbanaction = ufw\n\n&#91;sshd]\nenabled = true\n\n&#91;nginx-botsearch]\nenabled = true\nport = http,https\nfilter = nginx-botsearch\nlogpath = \/var\/log\/nginx\/access.log\nfindtime = 120\n\n&#91;nginx-noscript]\nenabled = true\nport = http,https\nfilter = nginx-noscript\nlogpath = \/var\/log\/nginx\/access.log\nfindtime = 120\nignoreip = 127.0.0.1\/8 1.2.3.4 5.6.7.8\n\n&#91;wordpress]\nenabled = true\nport = http,https\nfilter = wordpress\naction = iptables-multiport&#91;name=wordpress, port=\"http,https\", protocol=tcp]\nlogpath = \/var\/log\/nginx\/access.log<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusione<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019impostazione di default di fail2ban per proteggere il server Nginx \u00e8 abbastanza semplice. Tuttavia, questo software offre una grande flessibilit\u00e0 per la costruzione di politiche che si adattino alle varie esigenze di sicurezza specifiche. Dando un\u2019occhiata alle variabili e ai pattern all\u2019interno del file \/etc\/fail2ban\/jail.local, e ai file dei filtri nella directory \/etc\/fail2ban\/filter.d e \/etc\/fail2ban\/action.d, \u00e8 possibile trovare molti&nbsp;<em>pezzi da modificare<\/em>&nbsp;man mano che le tue esigenze evolvono. Imparare le nozioni di base su come proteggere il server con fail2ban pu\u00f2 fornire una buona sicurezza di base con il minimo sforzo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bibliografia<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a rel=\"noreferrer noopener\" href=\"https:\/\/guide.debianizzati.org\/index.php\/Fail2ban\" target=\"_blank\">Guide Debianizzati.org<\/a><br><a href=\"https:\/\/www.evemilano.com\/fail2ban\/\">Installazione e configurazione fail2ban su Ubuntu e Nginx (Giovanni Sacheli)<\/a>   <strong><em>(<a rel=\"noreferrer noopener\" href=\"https:\/\/www.evemilano.com\/\" target=\"_blank\">EveMilano.com<\/a>)<\/em><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Definizione di Fail2ban e Utilizzo Fail2ban&nbsp;(Sito ufficiale) \u00e8 un software che \u00e8 nato per permettere di bloccare gli host che stanno tentando di effettuare un attacco di&nbsp;brute force&nbsp;via&nbsp;SSH. Questo genere [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":3378,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[5,86,93,96],"tags":[102,101,99,100],"class_list":["post-3289","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gcportal-links","category-guide-tutorial","category-linux","category-network","tag-auth-log","tag-brute-force","tag-fail2ban","tag-ssh"],"_links":{"self":[{"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/posts\/3289","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/comments?post=3289"}],"version-history":[{"count":23,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/posts\/3289\/revisions"}],"predecessor-version":[{"id":3335,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/posts\/3289\/revisions\/3335"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/media\/3378"}],"wp:attachment":[{"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/media?parent=3289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/categories?post=3289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gcportal.com\/wordpress\/wp-json\/wp\/v2\/tags?post=3289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}