Come configurare Fail2Ban?
Se hai abilitato SSH, controlla la cronologia di accesso del tuo server Linux . Rimarrai sorpreso nel vedere un numero enorme di IP che tentano di accedere al tuo server tramite SSH. Se non disponi di alcun meccanismo per scoraggiare questi tentativi di accesso, il tuo sistema è suscettibile agli attacchi di forza bruta. Fondamentalmente, uno script/bot continuerà a tentare la connessione SSH al tuo sistema provando varie combinazioni di nome utente e password.
È qui che entra in gioco uno strumento come Fail2Ban. Fail2Ban è un software gratuito e open source che aiuta a proteggere il tuo server Linux da accessi dannosi. Fail2Ban vieterà l’IP (per un certo periodo) se si verifica un certo numero di tentativi di accesso falliti.
Fail2Ban funziona immediatamente con le impostazioni di base ma è anche estremamente configurabile. Puoi modificarlo a tuo piacimento e creare filtri e regole secondo le tue necessità.
Installazione di Fail2Ban su Linux
Puoi intuire la popolarità di Fail2Ban dal fatto che è disponibile nei repository ufficiali di tutte le principali distribuzioni Linux. Ciò rende l’installazione di Fail2Ban un compito semplice.
Installa Fail2Ban su CentOS e Red Hat
Devi essere un utente root o sudo per installare il nuovo software sul tuo sistema.
Devi assicurarti che il tuo sistema sia aggiornato e che tu abbia installato il repository EPEL
sudo yum update && sudo yum install epel-release
Ora puoi installare Fail2Ban con il seguente comando:
sudo yum install fail2ban
Installa Fail2Ban su Ubuntu e Debian
Innanzitutto, assicurati che il tuo sistema sia aggiornato:
sudo apt update && sudo apt upgrade -y
Ora installa Fail2Ban con questo comando:
sudo apt install fail2ban
Comprensione del file di configurazione Fail2Ban
Ci sono due file di configurazione principali in Fail2Ban: /etc/fail2ban/fail2ban.conf e /etc/fail2ban/jail.conf. Lasciatemi spiegare cosa fanno.
/etc/fail2ban/fail2ban.conf: questo è il file di configurazione per le impostazioni operative del demone Fail2Ban. Impostazioni come loglevel, file di registro, socket e file pid vengono definite qui.
/etc/fail2ban/jail.conf: è qui che avviene tutta la magia. Questo è il file in cui puoi configurare cose come il tempo di ban predefinito, il numero di reti prima di bannare un IP, gli IP nella whitelist, le informazioni sull’invio della posta ecc. Fondamentalmente controlli il comportamento di Fail2Ban da questo file.
Ora, prima di modificare questi file, Fail2Ban consiglia di crearne una copia con il file .local per questi file di configurazione. È perché i file conf predefiniti possono essere sovrascritti negli aggiornamenti e perderai tutte le tue impostazioni.
sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ora capiamo il file jail.conf. Se usi il comando less per leggere questo file di grandi dimensioni, potrebbe sembrare piuttosto confuso. Il file conf cerca di spiegare tutto con troppi commenti. Quindi, lascia che te lo semplifichi.
Il file jail.conf è diviso in servizi. C’è una sezione [Default] e si applica a tutti i servizi. E poi puoi vedere vari servizi con le rispettive impostazioni (se presenti). Tutti questi servizi sono tra parentesi. Vedrai sezioni come [sshd], [apache-auth], [squid] ecc.
Se rimuovo i commenti, la sezione predefinita appare così:
[DEFAULT] ignorecommand = bantime = 10m findtime = 10m maxretry = 5 backend = auto usedns = warn logencoding = auto enabled = false mode = normal filter = %(name)s[mode=%(mode)s] destemail = root@localhost sender = root@ mta = sendmail protocol = tcp chain = port = 0:65535 fail2ban_agent = Fail2Ban/%(fail2ban_version)s banaction = iptables-multiport banaction_allports = iptables-allports action_abuseipdb = abuseipdb action = %(action_)s
copia
Lascia che ti spieghi il significato di alcuni di questi parametri.
- bantime: imposta la durata del ban. L’impostazione predefinita è 10 minuti.
- findtime: la finestra in cui verrà eseguita l’azione su un IP. L’impostazione predefinita è 10 minuti. Supponiamo che sia stato tentato un accesso errato da un determinato IP alle 10:30. Se lo stesso IP raggiunge il numero massimo di tentativi prima delle 10:40, verrà bannato. In caso contrario, il successivo tentativo fallito dopo le 10:40 verrà conteggiato come primo tentativo fallito.
- maxretry: il numero di tentativi falliti prima che venga eseguita un’azione
- usedns: l’impostazione “avvisa” tenta di utilizzare il DNS inverso per cercare il nome host e vietarlo utilizzando il nome host. Impostandolo su no verranno vietati gli IP, non il nome host.
- destemail: l’indirizzo email a cui verranno inviati gli avvisi (deve essere configurato)
- mittente: il nome del mittente nell’e-mail di notifica
- mta: Mail Transfer Agent utilizzato per le e-mail di notifica
- banaction: questo parametro utilizza il file /etc/fail2ban/action.d/iptables-multiport.conf per impostare l’azione dopo il numero massimo di tentativi falliti
- protocollo: il tipo di traffico che verrà interrotto dopo il divieto
Se vuoi apportare modifiche per qualsiasi jail (o per tutte le jail), come il numero massimo di tentativi, il tempo di ban, il tempo di ricerca ecc., dovresti modificare il file jail.local.
Come utilizzare Fail2Ban per proteggere il server Linux
Lascia che ti mostri alcuni dei modi in cui puoi utilizzare Fail2Ban per rafforzare la sicurezza di Linux. Tieni presente che devi essere un utente root o avere accesso sudo per eseguire i comandi fail2ban.
Abilita Fail2Ban sul tuo server e controlla tutte le jail in esecuzione
Puoi utilizzare i comandi systemd per avviare e abilitare Fail2Ban sul tuo server Linux:
systemctl start fail2ban systemctl enable fail2ban
Una volta abilitato Fail2Ban, puoi vedere lo stato e le jail attive con il comando fail2ban-client:
fail2ban-client status Status |- Number of jail: 1 `- Jail list: sshd
Nel caso te lo stessi chiedendo, sshd jail è abilitato per impostazione predefinita.
Vedi il registro Fail2Ban
Il registro Fail2Ban si trova in /var/log/fail2ban.log. I file di registro sono nel seguente formato:
2019-03-25 07:09:08,004 fail2ban.filter [25630]: INFO [sshd] Found 139.59.69.76 – 2019-03-25 07:09:07 2019-03-25 07:09:36,756 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36 2019-03-25 07:09:36,757 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36 2019-03-25 07:09:36,774 fail2ban.actions [25630]: NOTICE [sshd] Ban 159.89.205.213 2019-03-25 07:09:36,956 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36 2019-03-25 07:09:36,957 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36 2019-03-25 07:09:36,981 fail2ban.actions [25630]: NOTICE [sshd] Ban 182.70.253.202 2019-03-25 07:09:37,247 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37 2019-03-25 07:09:37,248 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37 2019-03-25 07:09:37,589 fail2ban.actions [25630]: NOTICE [sshd] Ban 112.64.214.90
Puoi vedere che identifica gli IP e li vieta quando superano la soglia massima di tentativi.
Vedi gli IP vietati da Fail2Ban
Un modo è verificare lo stato di una determinata prigione. A questo scopo è possibile utilizzare il client Fail2Ban.
fail2ban-client status <jail_name>
Ad esempio, se devi vedere tutti gli accessi ssh errati vietati da Fail2Ban, puoi usarlo nel modo seguente. L’output mostrerebbe il totale dei tentativi falliti e il totale degli IP vietati.
root@test-server:~# fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 14 | |- Total failed: 715 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 7 |- Total banned: 17 `- Banned IP list: 177.47.115.67 118.130.133.110 68.183.62.73 202.65.154.110 106.12.102.114 61.184.247.3 218.92.1.150
Il sistema che tenta di accedere tramite SSH dall’accesso non riuscito dovrebbe ricevere un errore come questo
ssh: connect to host 93.233.73.133 port 22: Connection refused
Come bannare permanentemente un IP con Fail2Ban
Ormai sai che il ban messo su un IP da Fail2Ban è temporaneo. Per impostazione predefinita è per 10 minuti e l’aggressore può provare ad accedere nuovamente dopo 10 minuti.
Ciò rappresenta un rischio per la sicurezza poiché gli aggressori potrebbero utilizzare uno script che tenta di accedere dopo un intervallo di 10 minuti.
Quindi, come si fa a mettere un ban permanente usando Fail2Ban? Non esiste una risposta chiara a questo.
A partire dalla versione 0.11 di Fail2Ban, il tempo di ban verrà calcolato automaticamente e il tempo di ban degli IP persistenti aumenterà in modo esponenziale.
Ma se controlli la tua versione di Fail2Ban, probabilmente stai utilizzando la versione 0.10.
fail2ban-server --version Fail2Ban v0.10.2 Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors Copyright of modifications held by their respective authors. Licensed under the GNU General Public License v2 (GPL).
Nelle versioni precedenti, potevi utilizzare un bantime negativo (bantime = -1) e ciò sarebbe stato equivalente a un ban permanente, ma se provi questo metodo, probabilmente vedrai un errore come ‘Avvio fail2ban: ERROR NOK: (‘ l’immagine del disco del database non è valida’,)’.
Una soluzione non così pulita sarebbe quella di aumentare il bantime a qualcosa come 1 giorno, 1 settimana, 1 mese o 1 anno. Ciò potrebbe aggirare il problema finché la nuova versione non sarà disponibile sul tuo sistema.
Come sbloccare un IP bloccato da Fail2Ban
Per prima cosa controlla se l’IP è bloccato o meno. Poiché Fail2Ban funziona su iptables, puoi esaminare iptable per visualizzare gli IP vietati dal tuo server:
iptables -n -L
Potrebbe essere necessario utilizzare il comando grep se ci sono troppi IP vietati.
Se trovi l’indirizzo IP specificato nell’output, è stato bannato:
Quindi, il passo successivo è scoprire quale “jail” sta vietando il suddetto IP. Dovrai utilizzare il comando Grep con i log fail2ban qui.
Come puoi vedere nell’output seguente, l’IP è stato bandito da sshd jail.
root@test-server:~# grep -E ‘Ban.*61.184.247.3’ /var/log/fail2ban.log 2019-03-14 13:09:25,029 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3 2019-03-14 13:52:56,745 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
copia
Ora che conosci il nome della jail che blocca l’IP, puoi sbloccare l’IP utilizzando il client fail2ban:
fail2ban-client set <jail_name> unbanip <ip_address>
Come autorizzare l’IP in Fail2Ban
Non sarebbe una buona cosa se ti bannassi, vero? Per ignorare che un indirizzo IP venga bannato dalla sessione corrente di Fail2Ban, puoi inserire l’IP nella whitelist utilizzando un comando come questo:
fail2ban-client set <JAIL_NAME> addignoreip <IP_Address>
Puoi trovare facilmente il tuo indirizzo IP in Linux.
sudo fail2ban-client set sshd addignoreip 203.93.83.113 These IP addresses/networks are ignored: `- 203.93.83.113
Se desideri inserire permanentemente l’IP nella whitelist, dovresti modificare il file di configurazione della jail. Vai alla sezione jail e aggiungi la riga ignoreip in questo modo:
ignoreip = 127.0.0.1/8 <IP_TO_BE_WHITELISTED>
Se vuoi inserire nella whitelist un IP da tutte le jail del tuo sistema, sarebbe un’idea migliore modificare il file /etc/fail2ban/jail.local e aggiungere una riga nella sezione DEFAULT come quella che abbiamo visto sopra.
Dovrai riavviare Fail2Ban per rendere effettiva questa modifica.
Come vedere la whitelist degli IP di una jail
Puoi vedere tutti gli IP inseriti nella whitelist di una jail usando questo comando:
fail2ban-client get <JAIL_NAME> ignoreip
Dovrebbe mostrare tutti gli IP ignorati da Fail2Ban per quella jail:
sudo fail2ban-client set sshd addignoreip 203.93.83.113 These IP addresses/networks are ignored: |- 127.0.0.0/8 |- ::1 `- 203.93.83.113
Come rimuovere un IP dalla whitelist di Fail2Ban
Se stai rimuovendo l’IP dalla whitelist di una determinata jail, puoi utilizzare questo comando:
fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>
Se vuoi rimuovere permanentemente l’IP, dovresti modificare il file /etc/fail2ban/jail.local. Puoi fare molte più cose con Fail2Ban. Questa guida ti fornisce le nozioni di base per iniziare con Fail2Ban. Non ho toccato argomenti come azioni, notifiche email, filtri ecc.
Una volta che conosci le nozioni di base di Fail2Ban, puoi iniziare a esplorarne di più. Per il momento, giocaci e aggiungi un ulteriore livello di sicurezza a SSH sul tuo server Linux.