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à.
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.
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
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
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.
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.
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.
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.
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.
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
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.
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>
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.
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
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.