Introduzione

Tutti i server esposti a Internet sono a rischio di attacchi di malware. Ad esempio, se si dispone di un software connesso a una rete pubblica, gli aggressori possono utilizzare tentativi di forza bruta per ottenere l'accesso all'applicazione.

Fail2ban è uno strumento open source che aiuta a proteggere la tua macchina Linux dal brute force e da altri attacchi automatici monitorando i log dei servizi per attività dannose. Utilizza espressioni regolari per analizzare i file di registro. Vengono conteggiate tutte le voci che corrispondono ai patterns e quando il loro numero raggiunge una certa soglia predefinita, Fail2ban banna l'IP offensivo per un periodo di tempo specifico. Il firewall di sistema predefinito viene utilizzato come azione di esclusione. Quando il periodo di divieto scade, l'indirizzo IP viene rimosso dall'elenco dei ban.

Questo articolo spiega come installare e configurare Fail2ban su CentOS 8.

Se desideri installare Fail2ban su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Installare Fail2ban su CentOS

Il pacchetto Fail2ban dipende dai pacchetti disponibili solo nel repository software EPEL. Se il repository non è abilitato sul tuo sistema, abilitalo inserendo il seguente comando come root o utente con privilegi sudo:

sudo yum install epel-release

Adesso è possibile installare Fail2ban, scrivi il seguente comando:

sudo dnf install fail2ban

Una volta completata l'installazione, abilita e avvia il servizio Fail2ban:

sudo systemctl enable --now fail2ban

Per verificare se il server Fail2ban è in esecuzione, digita:

sudo systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
   Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-09-12 13:05:53 CEST; 5s ago
     Docs: man:fail2ban(1)
  Process: 1844 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
 Main PID: 1845 (f2b/server)
    Tasks: 3 (limit: 12210)
   Memory: 11.0M
   CGroup: /system.slice/fail2ban.service
           └─1845 /usr/bin/python3.6 -s /usr/bin/fail2ban-server -xf start
...

Questo è tutto. A questo punto, hai Fail2Ban in esecuzione sul tuo server CentOS.

Configurare Fail2ban

L'installazione predefinita di Fail2ban viene fornita con due file di configurazione /etc/fail2ban/jail.conf e /etc/fail2ban/jail.d/00-firewalld.conf. Questi file non devono essere modificati in quanto potrebbero essere sovrascritti quando il pacchetto viene aggiornato.

Fail2ban legge i file di configurazione nel seguente ordine:

  • /etc/fail2ban/jail.conf
  • /etc/fail2ban/jail.d/*.conf
  • /etc/fail2ban/jail.local
  • /etc/fail2ban/jail.d/*.local

Ogni file .local sovrascrive le impostazioni del file .conf.

Il modo più semplice per configurare Fail2ban è quello di copiare il contenuto del file jail.conf in jail.local e modificare il file .local. Gli utenti più avanzati possono creare un file .local di configurazione da zero. Il file .local non deve includere tutte le impostazioni del file .conf corrispondente, solo quelle che si desidera sovrascrivere.

Crea un file .local di configurazione dal file jail.conf predefinito:

sudo cp /etc/fail2ban/jail.{conf,local}

Per iniziare a configurare il server Fail2ban, apri il file jail.local con il tuo editor di testo. In questo tutorial utilizziamo nano altrimenti puoi utilizzare qualsiasi altro editor come vi/vim:

sudo yum install nano
sudo nano /etc/fail2ban/jail.local

Il file include commenti che descrivono cosa fa ciascuna opzione di configurazione. In questo esempio, cambieremo le impostazioni di base.

Indirizzi IP in whitelist

È possibile aggiungere alla direttiva ignoreip indirizzi IP, intervalli IP o host che si desidera escludere dal divieto. Qui dovresti aggiungere l'indirizzo IP del tuo PC locale e tutte le altre macchine che desideri inserire nella whitelist.

Rimuovi il commento dalla riga che inizia con ignoreip e aggiungi i tuoi indirizzi IP separati da uno spazio:

ignoreip = 127.0.0.1/8 ::1 122.122.122.122 192.168.1.0/24
/etc/fail2ban/jail.local

Impostazioni divieto

I valori di bantime, findtime e le opzioni maxretry definiscono l'orario e le condizioni di divieto.

bantime è la durata per la quale l'IP è vietato. Quando non viene specificato alcun suffisso, il valore predefinito è secondi. Per impostazione predefinita, il valore bantime è impostato su 10 minuti. In generale, la maggior parte degli utenti vorrà impostare un periodo di divieto più lungo. Modifica il valore a tuo piacimento:

bantime  = 1d
/etc/fail2ban/jail.local

Per bannare definitivamente l'IP, usa un numero negativo.

bantime = -1
/etc/fail2ban/jail.local

findtime è la durata tra il numero di errori prima che venga impostato un divieto. Ad esempio, se Fail2ban è impostato per escludere un IP dopo cinque errori (maxretry, vedi sotto), tali errori devono verificarsi entro la durata findtime.

findtime  = 10m
/etc/fail2ban/jail.local

maxretry è il numero di errori prima che un IP venga bannato. Il valore predefinito è impostato su cinque, che dovrebbe andare bene per la maggior parte degli utenti.

maxretry = 5
/etc/fail2ban/jail.local

Notifiche di posta elettronica

Fail2ban può inviare avvisi e-mail quando un IP è stato bannato. Per ricevere messaggi di posta elettronica, è necessario disporre di un SMTP installato sul server e modificare l'azione predefinita, che vieta solo l'IP %(action_mw)s, come mostrato di seguito:

action = %(action_mw)s
/etc/fail2ban/jail.local

%(action_mw)s metterà al bando l'IP incriminato e invierà un'e-mail con un rapporto whois. Se desideri includere i log pertinenti nell'e-mail, imposta l'azione su %(action_mwl)s.

Puoi anche modificare gli indirizzi di posta elettronica di invio e ricezione:

destemail = [email protected]
sender = [email protected]
/etc/fail2ban/jail.local

Fail2ban Jails

Fail2ban utilizza un concetto di jail. Una jail descrive un servizio e include filtri e azioni. Le voci di registro che corrispondono al modello di ricerca vengono conteggiate e quando viene soddisfatta una condizione predefinita, vengono eseguite le azioni corrispondenti.

Fail2ban viene fornito con una serie di jail per diversi servizi. Puoi anche creare le tue configurazioni jail.

Per impostazione predefinita, su CentOS 8, nessuna jail è abilitata. Per abilitare una jail, è necessario aggiungere enabled = true dopo il titolo della jail. L'esempio seguente mostra come abilitare la jail sshd:

[sshd]
enabled   = true
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
/etc/fail2ban/jail.local

Le impostazioni che abbiamo discusso nella sezione precedente possono essere impostate per jail.

I filtri si trovano nella directory /etc/fail2ban/filter.d, archiviati in un file con lo stesso nome della jail. Se disponi di una configurazione personalizzata ed esperienza con le espressioni regolari, puoi ottimizzare i filtri.

Ogni volta che il file di configurazione viene modificato, il servizio Fail2ban deve essere riavviato affinché le modifiche abbiano effetto:

sudo systemctl restart fail2ban

Client Fail2ban

Fail2ban viene fornito con uno strumento della riga di comando denominato fail2ban-client che è possibile utilizzare per interagire con il servizio Fail2ban.

Per visualizzare tutte le opzioni disponibili del comando fail2ban-client, richiamalo con l'opzione -h:

fail2ban-client -h

Questo strumento può essere utilizzato per vietare/sbloccare indirizzi IP, modificare le impostazioni, riavviare il servizio e altro ancora. Ecco alcuni esempi:

Controlla lo stato di una jail:

sudo fail2ban-client status sshd

Annulla esclusione di un IP:

sudo fail2ban-client set sshd unbanip 23.34.45.56

Ban un IP:

sudo fail2ban-client set sshd banip 23.34.45.56

Conclusione

Ti abbiamo mostrato come installare e configurare Fail2ban su CentOS 8. Per ulteriori informazioni sulla configurazione di Fail2ban, visita la documentazione ufficiale.