Ricerca nel sito web

Come proteggere SSH con Fail2Ban su CentOS 7


introduzione

Sebbene la connessione al tuo server tramite SSH possa essere molto sicura, il demone SSH stesso è un servizio che deve essere esposto a Internet per funzionare correttamente. Ciò comporta alcuni rischi intrinseci e offre un vettore di attacco per potenziali aggressori.

Qualsiasi servizio esposto alla rete è un potenziale obiettivo in questo modo. Se presti attenzione ai registri delle applicazioni per questi servizi, vedrai spesso tentativi di accesso ripetuti e sistematici che rappresentano attacchi di forza bruta da parte di utenti e bot.

Un servizio chiamato Fail2ban può mitigare questo problema creando regole che alterano automaticamente la configurazione del firewall iptables in base a un numero predefinito di tentativi di accesso non riusciti. Ciò consentirà al tuo server di rispondere a tentativi di accesso illegittimi senza alcun intervento da parte tua.

In questa guida, tratteremo come installare e utilizzare Fail2ban su un server CentOS 7.

Installa Fail2ban su CentOS 7

Sebbene Fail2ban non sia disponibile nel repository di pacchetti CentOS ufficiale, è confezionato per il progetto EPEL. EPEL, che sta per Extra Packages for Enterprise Linux, può essere installato con un pacchetto di rilascio che è disponibile da CentOS:

  1. sudo yum install epel-release

Ti verrà chiesto di continuare: premi y, seguito da Invio:

yum prompt
Transaction Summary ============================================================================ Install 1 Package Total download size: 14 k Installed size: 24 k Is this ok [y/d/N]: y

Ora dovremmo essere in grado di installare il pacchetto fail2ban:

  1. sudo yum install fail2ban

Di nuovo, premi y e Invio quando ti viene chiesto di continuare.

Una volta terminata l'installazione, usa systemctl per abilitare il servizio fail2ban:

  1. sudo systemctl enable fail2ban

Configura impostazioni locali

Il servizio Fail2ban mantiene i propri file di configurazione nella directory /etc/fail2ban. Qui puoi trovare un file con valori predefiniti chiamato jail.conf. Poiché questo file potrebbe essere sovrascritto dagli aggiornamenti del pacchetto, non dovremmo modificarlo sul posto. Invece, scriveremo un nuovo file chiamato jail.local. Tutti i valori definiti in jail.local sovrascriveranno quelli in jail.conf.

jail.conf contiene una sezione [DEFAULT], seguita da sezioni per i singoli servizi. jail.local può sovrascrivere qualsiasi di questi valori. Inoltre, i file in /etc/fail2ban/jail.d/ possono essere usati per sovrascrivere le impostazioni in entrambi questi file. I file vengono applicati nel seguente ordine:

  1. /etc/fail2ban/jail.conf
  2. /etc/fail2ban/jail.d/*.conf, in ordine alfabetico
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local, in ordine alfabetico

Qualsiasi file può contenere una sezione [DEFAULT], eseguita per prima, e può anche contenere sezioni per le singole jail. L'ultimo vavalue impostato per un determinato parametro ha la precedenza.

Iniziamo scrivendo una versione molto semplice di jail.local. Apri un nuovo file usando nano (o il tuo editor preferito):

  1. sudo nano /etc/fail2ban/jail.local

Incolla quanto segue:

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

[sshd]
enabled = true

Questo sovrascrive tre impostazioni: imposta un nuovo bantime predefinito per tutti i servizi, assicura che stiamo usando iptables per la configurazione del firewall e abilita sshd carcere.

Esci e salva il nuovo file (in nano, premi Ctrl-X per uscire, y per salvare e Invio per confermare il nome del file). Ora possiamo riavviare il servizio fail2ban usando systemctl:

  1. sudo systemctl restart fail2ban

Il comando systemctl dovrebbe terminare senza alcun output. Per verificare che il servizio sia in esecuzione, possiamo utilizzare fail2ban-client:

  1. sudo fail2ban-client status
Output
Status |- Number of jail: 1 `- Jail list: sshd

Puoi anche ottenere informazioni più dettagliate su una prigione specifica:

  1. sudo fail2ban-client status sshd

Esplora le impostazioni disponibili

La versione di jail.local che abbiamo definito sopra è un buon inizio, ma potresti voler regolare una serie di altre impostazioni. Apri jail.conf ed esamineremo alcune delle impostazioni predefinite. Se decidi di modificare uno qualsiasi di questi valori, ricorda che dovrebbero essere copiati nella sezione appropriata di jail.local e regolati lì, piuttosto che modificati sul posto.

  1. sudo nano /etc/fail2ban/jail.conf

Impostazioni predefinite per tutte le jail

Per prima cosa, scorri la sezione [DEFAULT].

ignoreip = 127.0.0.1/8

Puoi regolare gli indirizzi di origine che Fail2ban ignora aggiungendo un valore al parametro ignoreip. Attualmente, è configurato per non vietare alcun traffico proveniente dalla macchina locale. Puoi includere altri indirizzi da ignorare aggiungendoli alla fine del parametro, separati da uno spazio.

bantime = 600

Il parametro bantime imposta il periodo di tempo durante il quale un client verrà bannato quando non è riuscito ad autenticarsi correttamente. Questo è misurato in secondi. Per impostazione predefinita, questo è impostato su 600 secondi o 10 minuti.

findtime = 600
maxretry = 3

I prossimi due parametri a cui prestare attenzione sono findtime e maxretry. Questi lavorano insieme per stabilire le condizioni alle quali un client dovrebbe essere bannato.

La variabile maxretry imposta il numero di tentativi che un client deve autenticare entro una finestra di tempo definita da findtime, prima di essere bannato. Con le impostazioni predefinite, Fail2ban bannerà un client che tenta senza successo di accedere 3 volte in una finestra di 10 minuti.

destemail = root@localhost
sendername = Fail2Ban
mta = sendmail

Se desideri configurare gli avvisi e-mail, potresti dover sovrascrivere le impostazioni destemail, sendername e mta. Il parametro destemail imposta l'indirizzo email che dovrebbe ricevere i messaggi di divieto. Il sendername imposta il valore del campo \Da nell'e-mail. Il parametro mta configura quale servizio di posta verrà utilizzato per inviare la posta.

action = $(action_)s

Questo parametro configura l'azione intrapresa da Fail2ban quando vuole istituire un ban. Il valore action_ è definito nel file poco prima di questo parametro. L'azione predefinita consiste semplicemente nel configurare il firewall in modo da rifiutare il traffico dall'host offensivo fino allo scadere del tempo di divieto.

Se desideri configurare gli avvisi e-mail, puoi sovrascrivere questo valore da action_ a action_mw. Se desideri che l'email includa le righe di registro pertinenti, puoi modificarla in action_mwl. Ti consigliamo di assicurarti di aver configurato le impostazioni di posta appropriate se scegli di utilizzare gli avvisi di posta.

Impostazioni per le singole prigioni

Dopo [DEFAULT], incontreremo sezioni che configurano le singole jail per diversi servizi. Questi in genere includono una porta da bannare e un logpath da monitorare per tentativi di accesso dannoso. Ad esempio, la jail SSH che abbiamo già abilitato in jail.local ha le seguenti impostazioni:

[sshd]

port    = ssh
logpath = %(sshd_log)s

In questo caso, ssh è una variabile predefinita per la porta SSH standard, e %(sshd_log)s usa un valore definito altrove nella configurazione standard di Fail2ban (questo aiuta a mantenere jail.conf portabile tra diversi sistemi operativi).

Un'altra impostazione che potresti incontrare è il filtro che verrà utilizzato per decidere se una riga in un registro indica un'autenticazione fallita.

Il valore filter è in realtà un riferimento a un file che si trova nella directory /etc/fail2ban/filter.d, con la sua estensione .conf rimossa . Questo file contiene le espressioni regolari che determinano se una riga nel registro è errata. Non tratteremo questo file in modo approfondito in questa guida, perché è abbastanza complesso e le impostazioni predefinite corrispondono bene alle righe appropriate.

Tuttavia, puoi vedere che tipo di filtri sono disponibili esaminando quella directory:

  1. ls /etc/fail2ban/filter.d

Se vedi un file che sembra essere correlato a un servizio che stai utilizzando, dovresti aprirlo con un editor di testo. La maggior parte dei file è commentata abbastanza bene e dovresti essere in grado di dire da quale tipo di condizione lo script è stato progettato per proteggersi. La maggior parte di questi filtri ha sezioni appropriate (disabilitate) in jail.conf che possiamo abilitare in jail.local se lo desideriamo.

Ad esempio, fingi di servire un sito Web utilizzando Nginx e renditi conto che una parte del nostro sito protetta da password viene bloccata dai tentativi di accesso. Possiamo dire a Fail2ban di utilizzare il file nginx-http-auth.conf per verificare questa condizione all'interno del file /var/log/nginx/error.log.

Questo in realtà è già impostato in una sezione chiamata [nginx-http-auth] nel nostro file /etc/fail2ban/jail.conf. Dovremmo solo aggiungere un parametro enabled per la jail nginx-http-auth a jail.local:

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

[sshd]
enabled = true

[nginx-http-auth]
enabled = true

E riavvia il servizio fail2ban:

  1. sudo systemctl restart fail2ban

Monitora i log di Fail2ban e la configurazione del firewall

È importante sapere che un servizio come Fail2ban funziona come previsto. Inizia usando systemctl per controllare lo stato del servizio:

  1. sudo systemctl status fail2ban

Se qualcosa sembra non funzionare qui, puoi risolvere il problema controllando i log per l'unità fail2ban dall'ultimo avvio:

  1. sudo journalctl -b -u fail2ban

Successivamente, utilizza fail2ban-client per interrogare lo stato generale di fail2ban-server o qualsiasi singola jail:

  1. sudo fail2ban-client status
  2. sudo fail2ban-client status jail_name

Segui il registro di Fail2ban per un registro delle azioni recenti (premi Ctrl-C per uscire):

  1. sudo tail -F /var/log/fail2ban.log

Elenca le regole correnti configurate per iptables:

  1. sudo iptables -L

Mostra le regole di iptables in un formato che rifletta i comandi necessari per abilitare ogni regola:

  1. sudo iptables -S

Conclusione

Ora dovresti essere in grado di configurare alcune politiche di divieto di base per i tuoi servizi. Fail2ban è molto facile da configurare ed è un ottimo modo per proteggere qualsiasi tipo di servizio che utilizza l'autenticazione.

Se vuoi saperne di più su come funziona Fail2ban, puoi dare un'occhiata al nostro tutorial su come funzionano le regole e i file di fail2ban.