Installa Fail2ban e associalo a SSH e Nginx

Quando abbiamo montato un server con Linux e vogliamo gestirlo da internet tramite il controllo remoto SSH, può capitare che iniziamo a ricevere attacchi con l'obiettivo di entrare nel sistema e poterlo controllare per i suoi scopi. Questi attacchi vengono solitamente eseguiti da programmi informatici (bot) che per lungo tempo tentano di accedere al sistema utilizzando la forza bruta.

Nei post precedenti ho parlato di come configurare il servizio SSH ma alcuni bot avanzati non entrano nel servizio ma possono killare il servizio SSH sul server disabilitando l'accesso remoto.

Manuale completo di SSH (Secure Shell)

Possiamo evitarlo usando il strumento fail2ban, è molto pratico e offre un grande margine di sicurezza. Per spiegare un po' come funziona. È in grado di creare iptables prima di qualsiasi tentativo di accesso fallito per più di 5 volte di seguito, rifiutando qualsiasi tipo di connessione una volta che è stata bandita.

Installa Fail2ban


L'installazione può essere eseguita direttamente da apt. Prima aggiorniamo il sistema e poi installiamo Fail2ban.
 apt-get update && apt-get -y upgrade
 apt-get install fail2ban
Questo non solo installa il programma, ma lo lascia anche in esecuzione e si avvia con il sistema.

Configurazione di Fail2ban


Il servizio Fail2ban ha le sue impostazioni nella directory / etc / fail2ban. Hai alcune opzioni preconfigurate in jail.conf, la cosa migliore in questo caso è copiare il file e non apportare le modifiche direttamente in esso, durante l'aggiornamento di fail2ban questi file vengono sovrascritti e puoi perdere tutte le modifiche fatte in precedenza.

In questo caso copiamo il file e lo chiamiamo jail.local in modo che possa trovarlo.

 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Una volta copiato, possiamo aprirlo e vedere come funziona.
 vim /etc/fail2ban/jail.local
All'interno del file, abbiamo diversi parametri che possiamo regolare. Qualsiasi parametro che si trova sotto il tag [DEFAULT] verrà applicato a tutti i servizi abilitati da Fail2ban come SSH, NGINX, APACHE, lo chiameremo globale, quindi avremo sezioni specifiche per ogni servizio.

Inizieremo aggiungendo parametri alla sezione globale.

 ignoraip = 127.0.0.1
Aggiungiamo il nostro localhost in questo modo ignorerà tutto il traffico locale, possiamo aggiungere ulteriori indirizzi separandoli con uno spazio.
 tempo di ban = 600
Il bantime è il periodo di tempo in cui il client verrà bannato dopo essere stato bloccato. L'unità è in secondi 600 secondi sarebbe 10 minuti è il valore predefinito.
 tempo di ricerca = 600 maxretry = 3
Quindi abbiamo findtime e maxretry. Sono responsabili di stabilire le condizioni affinché un client venga bannato per impostazione predefinita, si può leggere che qualsiasi utente con più di 3 tentativi falliti in meno di 10 minuti verrà bannato.
 destemail = root @ localhost sendername = Fail2Ban mta = sendmail
Se vogliamo creare avvisi per utenti bannati, questi 3 parametri sono necessari, definiremo la destinazione a cui inviare l'e-mail di avviso, chi si occuperà di inviarla e infine l'mta per definire quale servizio di posta elettronica utilizzeremo .
 azione = $ (azione_) s
Qui definiremo quale azione intraprendere quando è richiesto un ban. Il valore action_ è l'azione predefinita basata sul rifiuto di qualsiasi traffico client fino alla scadenza del tempo di ban.

Se vogliamo inviare un alert via mail dobbiamo cambiare il valore in action_mw, ma se vogliamo che alleghi anche le righe del log nel corpo della mail useremo action_mwl. Dobbiamo essere sicuri che le impostazioni della posta siano corrette prima di modificare questo valore.

Impostazioni per servizio


Una volta completate le configurazioni globali, aggiungeremo i parametri che verranno applicati esclusivamente al

SSH, ci assicuriamo di aggiungere le opzioni sotto il tag [SSH].

 abilitato = vero
Per impostazione predefinita il servizio SSH è abilitato, ma possiamo modificarlo se necessario in questa opzione.

Tutta questa sezione potrebbe funzionare con i valori che descriverò in dettaglio più avanti ma puoi modificarla per adattarla alle tue esigenze o lasciarli tutti di default.

Un'altra delle configurazioni sono i filtri che indicano se il login era corretto o meno e possono essere aggiunti per altri servizi, ad esempio abbiamo un server con nginx e una parte della pagina è protetta da password, ma un client sta attaccando con forza bruta , possiamo fermarlo aggiungendo quanto segue sotto il tag [nginx-http-auth].

 [nginx-http-auth] abilitato = true filter = nginx-http-auth port = http, https logpath = /var/log/nginx/error.log
Ora, se un utente ha più di 3 tentativi di accesso falliti, ciò si riflette nei registri e fail2ban agirà e bloccherà tutto il traffico utente.

Ambiente di test


Dopo aver compreso le basi, faremo un piccolo ambiente di test dove proteggeremo SSH e Nginx tramite Fail2ban creando una politica di ban che ci avviserà dell'IP che è stato bannato.

Installeremo prima Nginx se non è installato

 apt-get install nginx
installeremo un servizio di posta per le notifiche può essere sendmail
 apt-get install sendmail
infine vogliamo che i nostri iptables siano persistenti dopo un avvio possiamo creare uno script rc.0 o installare il pacchetto iptables-persistent.
 apt-get install iptables-persistent
Verrà installato.

Stabilire il nostro firewall


Dopo aver installato quanto sopra, dobbiamo implementare un firewall in modo che possa bloccare il traffico. Creerò un firewall di base nei post successivi parlerò di più di iptables.

Consentiremo le connessioni stabilite, il traffico del server come gli aggiornamenti e il traffico destinato alle porte SSH e Nginx. Tutto il traffico rimanente verrà negato.

 sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -j DROP
Possiamo vedere i cambiamenti con:
 iptables -S
Dovrebbe dare un risultato simile.
 -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban -ssh -j RETURN

Regolazione delle impostazioni di Fail2ban


Ora dobbiamo configurare il file jail.local a nostro piacimento.
 vi /etc/fail2ban/jail.local
Possiamo prolungare il tempo di ban di un utente di almeno 30 minuti, ricordati di impostare il valore in secondi.
 tempo di festa = 1800
Dobbiamo configurare un'e-mail che riceva tutti gli avvisi di ban fail2ban, cerchiamo il valore dell'e-mail nel file e mettiamo l'e-mail.
 destemail = [email protected]
Possiamo cambiare il mittente che invierà l'avviso che di solito posto con il nome fail2ban in modo da poter filtrare meglio tra tutti i log.

Dopo che dobbiamo cambiare il valore dell'azione abbiamo 2 opzioni:

  • action_mw: invia un alert con un report simile al comando whois del client bannato.
  • action_mwl: inviare un avviso molto più dettagliato includendo un log nel corpo del messaggio.

In questo useremo la seconda opzione:

 azione =% (action_mwl) s 
Quindi andremo alla sezione [SSH] e possiamo modificare il numero massimo di tentativi prima del ban, lo lasceremo a 5:
 maxretry = 5
Se abbiamo il servizio SSH su una porta diversa dalla 22, che è altamente raccomandata, dobbiamo menzionare la sua porta.
 porta = 45024
Quindi cercheremo il tag [nginx-http-auth], lo lasceremo così com'è.
 [nginx-http-auth] abilitato = vero
Abbiamo finito e possiamo salvare e chiudere il file.

Riavvio del servizio Fail2ban


Per tutte le modifiche da applicare consiglio di interrompere il servizio.
 servizio fail2ban stop 
Allora possiamo ricominciare
 servizio fail2ban start
Ci vorrà un po' di tempo, dopo circa 5 minuti potremo rivedere le nostre regole con
 iptables -S
 -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-nginx-http-auth -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp - -dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-ssh -j RETURN
Vediamo come fail2ban ha aggiunto nuove politiche, può variare a seconda della configurazione che hai definito in /etc/fail2ban/jail.local.

ConclusioniAbbiamo installato fail2ban e configurato per funzionare con SSH e NGINX in caso di APACHE dobbiamo cambiare le etichette e la directory dei log ma è molto simile a nginx. Abbiamo configurato solo le basi, si possono creare filtri e regole molto più avanzate, consiglio di leggere un po' la loro man page, i file di configurazione sono ben commentati, consiglio di andare piano piano a scoprirne tutte le funzioni.

Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo
wave wave wave wave wave