Come installare e configurare Fail2Ban su CentOS 8 e Fedora 33
Questo tutorial esiste per queste versioni del sistema operativo
- CentOS 8
- CentOS 7
Su questa pagina
- Prerequisiti
- Installa Fail2Ban
- Configura Fail2Ban
- Configura jail.local
- Altre impostazioni
- IP inserito nella whitelist
- Tempo di ban e numero di tentativi
- Avvisi e-mail
- Prigione SSHD
- Prigione di Nginx
Fail2Ban è un'utilità di analisi dei log che scansiona i file di log di vari processi e vieta gli indirizzi IP che fanno troppi errori di password. Quando viene individuato un tentativo di accesso, Fail2Ban aggiungerà una nuova regola a iptables per bloccare l'indirizzo IP dell'aggressore, temporaneamente o permanentemente. Può anche avvisarti via e-mail per lo stesso.
Si concentra principalmente sul rilevamento delle intrusioni tramite SSH, ma può essere configurato per funzionare con qualsiasi servizio che utilizza i file di registro.
Prerequisiti
-
A Fedora 33 or a CentOS 8 based server with a non-root user with sudo privileges.
-
Install Nano editor because that's what we will use.
$ sudo dnf install nano -y
Installa Fail2Ban
Per installare Fail2Ban su CentOS 8, devi prima installare il repository EPEL Yum.
$ sudo dnf install epel-release
Fedora 33 viene fornito con Fail2Ban.
Eseguire il seguente comando per installare Fail2Ban sia su Fedora 33 che su CentOS 8.
$ sudo dnf install fail2ban
Una volta installato, dobbiamo abilitare il servizio.
$ sudo systemctl enable fail2ban
Successivamente, avvia il servizio fail2ban.
$ sudo systemctl start fail2ban
Ora puoi controllare lo stato del servizio per vedere se funziona correttamente.
$ sudo systemctl status fail2ban ? fail2ban.service - Fail2Ban Service Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2020-11-02 21:15:59 UTC; 5s ago Docs: man:fail2ban(1) Process: 19031 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS) Main PID: 19032 (f2b/server) Tasks: 3 (limit: 1125) Memory: 11.0M CPU: 96ms CGroup: /system.slice/fail2ban.service ??19032 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Starting Fail2Ban Service... Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Started Fail2Ban Service. Nov 02 21:15:59 howtoforge-tutorial fail2ban-server[19032]: Server ready
Configura Fail2Ban
Il servizio Fail2Ban mantiene i suoi file di configurazione nella directory
/etc/fail2ban
. Troverai un filejail.conf
al suo interno. Questo file di solito viene sovrascritto durante gli aggiornamenti dei pacchetti, quindi non dovrebbe essere modificato.Invece, tutte le configurazioni dovrebbero essere fatte in un nuovo file che chiameremo
jail.local
. Le impostazioni in questi 2 file possono essere ulteriormente sovrascritte tramite file dalla directory/etc/fail2ban/jail.d/
.Le configurazioni vengono applicate nel seguente ordine:
/etc/fail2ban/jail.conf
etc/fail2ban/jail.d/*.conf
, in ordine alfabetico/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
, in ordine alfabetico
jail.conf
contiene una sezione[DEFAULT]
seguita da sezioni per i singoli servizi. Ognuna di queste sezioni può essere sovrascritta definendole nei file.local
.Configura jail.local
Creeremo un nuovo file
jail.local
.$ sudo nano /etc/fail2ban/jail.local
Incolla il seguente codice al suo interno.
[DEFAULT] # Ban hosts for one hour: bantime = 3600 # Override backend=auto in /etc/fail2ban/jail.conf backend = systemd [sshd] enabled = true
Premi Ctrl + X per chiudere l'editor e premi Y quando ti viene chiesto di salvare il file. Questo imposta un nuovo
bantime
predefinito per tutti i servizi, cambia il backend insystemd
e abilita il jail\\sshd
.Riavvia Fail2ban per implementare le nuove modifiche.
$ sudo systemctl restart fail2ban
Possiamo confermare le nuove impostazioni applicate utilizzando l'utility
fail2ban-client
.$ sudo fail2ban-client status Status |- Number of jail: 1 `- Jail list: sshd
Possiamo anche ottenere lo stato dettagliato di ogni prigione specificamente nel modo seguente.
$ sudo fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list:
Più configurazioni
jail.conf
fornisce molte più impostazioni che possono essere personalizzate utilizzando il file/jail.local
. Successivamente esamineremo alcune impostazioni.IP inserito nella whitelist
Puoi autorizzare/ignorare gli IP bloccati da Fail2ban utilizzando il seguente codice.
[DEFAULT] ignoreip = 127.0.0.1/8 123.45.67.89
Se desideri autorizzare gli IP solo per determinate jail, puoi farlo tramite
fail2ban-client
.$ sudo fail2ban-client set JAIL addignoreip 123.45.67.89
Sostituisci
JAIL
nel comando precedente con il nome della jail di cui vuoi modificare l'impostazione.Tempo di ban e quantità di tentativi
Ci sono 3 impostazioni che possono impostare il tempo e il numero di tentativi per un ban.
bantime
- è il periodo di tempo in secondi durante il quale un IP è bannato. Per impostare un divieto permanente, imposta questo valore su un numero negativo. Il valore predefinito è 10 minuti o 600 secondi.findtime
- è l'intervallo di tempo tra i tentativi di accesso prima che venga impostato un ban. Questo valore è sempre un numero di secondi. Ad esempio, se Fail2ban è impostato per vietare un IP dopo 5 tentativi di accesso falliti, questi 5 tentativi devono avvenire entro il limite dibantime
di 10 minuti.maxretry
- è il numero di tentativi da un singolo indirizzo IP prima che venga imposto un ban. Il valore predefinito è 3.Per personalizzare queste impostazioni, incolla le seguenti righe nel file
\etc\fail2ban\jail.local
nella sezione[DEFAULT]
.bantime = 3600 findtime = 300 maxretry = 4
Avvisi e-mail
Per inviare avvisi e-mail, dovrai prima installare un Mail Transfer Agent (MTA). Per il nostro scopo, installeremo
sendmail
.$ sudo dnf install sendmail
Per ricevere l'e-mail, aggiungi il seguente codice nel file
\etc\fail2ban\jail.local
nella sezione[DEFAULT]
.destemail = sendername = Fail2Ban mta = sendmail action = %(action_mw)s
destemail
si riferisce all'ID dell'e-mail di destinazione che è l'id in cui si desidera ricevere le e-mail,sendername
si riferisce al nome del mittente, quindi stiamo usando Fail2Ban per questo.mta
si riferisce all'agente di trasferimento di posta utilizzato che qui èsendmail
. Se stai usandoPostfix
, usa il valoremail
per la variabilemta
.azione
si riferisce all'azione predefinita che viene eseguita una volta rilevata un'intrusione. Il valore predefinito è%(action_)s
che banna solo l'utente.%(action_mw)s
bannerà e invierà un'email con un rapporto Whois; mentre%(action_mwl)s
bannerà e invierà un'e-mail con il rapporto Whois insieme alle informazioni dai relativi file di registro. Questo può anche essere modificato su base specifica della prigione.Impostazioni per le singole prigioni
Come già sappiamo, la sezione
[DEFAULT]
si applica a tutte le Jail, è tempo di esaminare alcune Jail specifiche e le loro impostazioni.Prigione SSHD
Abbiamo già definito
[sshd]
in precedenza nel nostro filejail.local
. Possiamo personalizzarlo un po' di più con il seguente codice.[sshd] enabled = true port = ssh logpath = %(ssh_log)s
In questo caso, stiamo usando una variabile predefinita
ssh
per la porta che è la porta SSH predefinita. Se stai usando una porta SSH diversa, dovresti cambiarla.logpath
si riferisce alla posizione del file di registro da monitorare.%(ssh_log)s
utilizza un valore definito nel file di configurazione standard di Fail2bans (/etc/fail2ban/paths-common.conf
).Prigione di Nginx
Nginx ha diverse jail che possono essere utilizzate in Fail2Ban. Ad esempio, se una parte del tuo sito protetta da password viene attaccata ripetutamente, puoi utilizzare una sezione
[nginx-http-auth]
nel filejail.local
.[nginx-http-auth] enabled = true
Possiamo anche aggiungere una sezione chiamata
[nginx-botsearch]
per bloccare le richieste a cartelle o posizioni che non esistono.[nginx-badbots] enabled = true
Esistono anche altre jail Nginx, ma non sono preconfigurate con Fail2Ban. Devono essere creati manualmente e la maggior parte di essi può essere basata su quelli Apache forniti da Fail2Ban.
Filtri Fail2Ban e Failregex
C'è un'altra impostazione nella configurazione di Fail2Ban chiamata filtri. I filtri decidono se una riga nel file di registro indica un'autenticazione non riuscita.
Il valore del filtro nel file di configurazione è un riferimento a un file che si trova nella directory
/etc/fail2ban/filter.d
con la sua estensione.conf
rimossa.Puoi vedere che tipo di filtri sono disponibili controllando la directory.
$ ls /etc/fail2ban/filter.d
Vedrai 2 file di registro per Nginx al suo interno;
nginx-badbots.conf
enginx-http-auth.conf
.Questi file di configurazione utilizzano espressioni regolari (regex) per analizzare i file di registro. Questi sono chiamati Failregex. Puoi personalizzare o creare nuovi filtri scrivendo le tue espressioni regolari. Non tratteremo queste espressioni regolari in modo approfondito perché non rientrano nell'ambito di questo tutorial.
Monitora i log e il firewall di Fail2Ban
Puoi controllare lo stato di Fail2Ban usando
systemctl
come indicato in precedenza.$ sudo systemctl status fail2ban
Per ottenere qualche dettaglio in più, puoi usare il comando
journalctl
.$ sudo journalctl -b -u fail2ban
Puoi anche utilizzare
fail2ban-client
per interrogare lo stato difail2ban-server
o di una singola jail.$ sudo fail2ban-client status $ sudo fail2ban-client status jail_name
Puoi anche interrogare il file di registro di Fail2bans.
$ sudo tail -F /var/log/fail2ban.log
È possibile elencare le regole correnti configurate per iptables.
$ sudo iptables -L
Puoi anche elencare le regole di iptables in un formato che rifletta i comandi necessari per abilitare quelle regole.
$ sudo iptables -S
Conclusione
Questo conclude il nostro tutorial sull'installazione e la configurazione di Fail2Ban su un server basato su Fedora 33 o CentOS 8. Se hai domande, pubblicale nei commenti qui sotto.