Ricerca nel sito web

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

  1. Prerequisiti
  2. Installa Fail2Ban
  3. Configura Fail2Ban
    1. Configura jail.local
    2. Altre impostazioni
    3. IP inserito nella whitelist
    4. Tempo di ban e numero di tentativi
    5. Avvisi e-mail

    1. Prigione SSHD
    2. 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

    1. A Fedora 33 or a CentOS 8 based server with a non-root user with sudo privileges.

    2. 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 file jail.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:

    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

    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 in systemd 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 di bantime 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 usando Postfix, usa il valore mail per la variabile mta.

    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 file jail.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 file jail.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 e nginx-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 di fail2ban-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.