La sicurezza, per gli amministratori di sistema, è una lotta continua perché è necessario proteggere i propri sistemi a sufficienza per proteggerli da attacchi indesiderati, ma non così tanto da ostacolare la produttività degli utenti. È un equilibrio difficile da mantenere. Ci sono sempre lamentele per "troppa" sicurezza, ma quando un sistema è compromesso, le lamentele vanno da "Non c'era abbastanza sicurezza" a "Perché non hai usato controlli di sicurezza migliori?" La lotta è reale. Ci sono controlli che puoi mettere in atto che sono entrambi efficaci contro gli attacchi degli intrusi e tuttavia abbastanza furtivi da consentire agli utenti di operare in modo generalmente libero. Fail2ban è la risposta per proteggere i servizi dalla forza bruta e da altri attacchi automatici.
Nota:Fail2ban può essere utilizzato solo per proteggere i servizi che richiedono l'autenticazione con nome utente/password. Ad esempio, non puoi proteggere il ping con fail2ban.
In questo articolo, mostro come proteggere il demone SSH (SSHD) da un attacco di forza bruta. Puoi impostare filtri, come fail2ban
li chiama, per proteggere quasi tutti i servizi di ascolto sul tuo sistema.
Installazione e configurazione iniziale
Fortunatamente, esiste un pacchetto pronto per l'installazione per fail2ban
che include tutte le dipendenze, se presenti, per il tuo sistema.
$ sudo dnf -y install fail2ban
Abilita e avvia fail2ban
.
$ sudo systemctl enable fail2ban
$ sudo systemctl start fail2ban
A meno che tu non abbia qualche tipo di problema di sintassi nel tuo fail2ban
configurazione, non vedrai alcun messaggio di output standard.
Ora per configurare alcune cose di base in fail2ban
per proteggere il sistema senza che questo interferisca con se stesso. Copia il /etc/fail2ban/jail.conf
file in /etc/fail2ban/jail.local
. Il jail.local
file è il file di configurazione di nostro interesse.
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Apri /etc/fail2van/jail.local
nel tuo editor preferito e apporta le seguenti modifiche o verifica che questi pochi parametri siano impostati. Cerca l'impostazione ignoreip
e aggiungi tutti gli indirizzi IP a questa linea che deve avere accesso senza possibilità di blocco. Per impostazione predefinita, dovresti aggiungere l'indirizzo di loopback e tutti gli indirizzi IP locali al sistema protetto.
ignoreip = 127.0.0.1/8 192.168.1.10 192.168.1.20
Puoi anche aggiungere intere reti di indirizzi IP, ma questo toglie gran parte della protezione che desideri attivare fail2ban
per. Mantienilo semplice e locale per ora. Salva il jail.local
file e riavviare fail2ban
servizio.
$ sudo systemctl restart fail2ban
Devi riavviare fail2ban
ogni volta che apporti una modifica alla configurazione.
Configurazione di un servizio filtrato
Una nuova installazione di fail2ban
non fa molto per te. Devi impostare i cosiddetti filtri per qualsiasi servizio che desideri proteggere. Quasi tutti i sistemi Linux devono essere accessibili tramite SSH. Ci sono alcune circostanze in cui sicuramente interromperesti e disabiliteresti SSHD per proteggere meglio il tuo sistema, ma presumo che ogni sistema Linux consenta connessioni SSH.
Le password, come tutti sanno, non sono una buona soluzione di sicurezza. Tuttavia, è spesso lo standard con cui viviamo. Pertanto, se l'accesso dell'utente o amministrativo è limitato a SSH, è necessario adottare misure per proteggerlo. Usando fail2ban
"guardare" SSHD per tentativi di accesso falliti con conseguente ban è un buon inizio.
Nota:prima di implementare qualsiasi controllo di sicurezza che potrebbe ostacolare l'accesso di un utente a un sistema, informa gli utenti che questo nuovo controllo potrebbe bloccarli fuori da un sistema per dieci minuti (o per quanto tempo tu decida) se i loro tentativi di accesso non riusciti superano la soglia impostata .
Per impostare i servizi filtrati, devi creare un file "jail" corrispondente sotto /etc/fail2ban/jail.d
directory. Per SSHD, crea un nuovo file denominato sshd.local
e inserisci le istruzioni di filtraggio del servizio al suo interno.
[sshd]
enabled = true
port = ssh
action = iptables-multiport
logpath = /var/log/secure
maxretry = 3
bantime = 600
Crea il [sshd] voce e inserisci l'impostazione che vedi sopra come punto di partenza. La maggior parte delle impostazioni sono autoesplicative. Per i due che potrebbero non essere intuitivamente ovvi, l'impostazione "azione" descrive l'azione che desideri fail2ban
prendere in caso di violazione. Per noi, fail2ban
utilizza iptables
bannare l'indirizzo IP del sistema incriminato per un "bantime" di 600 secondi (10 minuti).
Ovviamente puoi modificare qualsiasi di queste impostazioni per soddisfare le tue esigenze. Dieci minuti sembrano essere abbastanza lunghi per far "spostare" un bot o uno script su host meno sicuri. Tuttavia, dieci minuti non sono così lunghi da alienare gli utenti che digitano male le loro password più di tre volte.
Quando sei soddisfatto delle impostazioni, riavvia fail2ban
servizio.
Che aspetto ha il divieto
Sul sistema protetto (192.168.1.83), tail
il /var/log/fail2ban.log
per vedere eventuali azioni di divieto in corso.
2020-05-15 09:12:06,722 fail2ban.filter [25417]: INFO [sshd] Found 192.168.1.69 - 2020-05-15 09:12:06
2020-05-15 09:12:07,018 fail2ban.filter [25417]: INFO [sshd] Found 192.168.1.69 - 2020-05-15 09:12:07
2020-05-15 09:12:07,286 fail2ban.actions [25417]: NOTICE [sshd] Ban 192.168.1.69
2020-05-15 09:22:08,931 fail2ban.actions [25417]: NOTICE [sshd] Unban 192.168.1.69
Puoi vedere che l'indirizzo IP 192.168.1.69 è stato bandito alle 09:12 e sbloccato dieci minuti dopo alle 09:22.
Sul sistema remoto, 192.168.1.69, un'azione di ban è simile alla seguente:
$ ssh 192.168.1.83
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
$ ssh 192.168.1.83
ssh: connect to host 192.168.1.83 port 22: Connection refused
Puoi vedere che ho inserito la mia password in modo errato tre volte prima di essere bannato. L'utente bannato, se non esplicitamente informato, non saprà perché non può più raggiungere il sistema di destinazione. Il fail2ban
filter esegue un'azione di esclusione silenziosa. Non fornisce alcuna spiegazione all'utente remoto, né l'utente viene informato quando il divieto viene revocato.
Annullamento di un sistema
Accadrà inevitabilmente che un sistema venga bandito che deve essere rapidamente rimosso. In altre parole, non puoi o non vuoi aspettare che scada il periodo di ban. Il comando seguente riattiverà immediatamente un sistema.
$ sudo fail2ban-client set sshd unbanip 192.168.1.69
Non è necessario riavviare il demone fail2ban dopo aver eseguito questo comando.
Concludi
Questo è fondamentalmente come fail2ban
lavori. Si imposta un filtro e, quando le condizioni sono soddisfatte, il sistema remoto viene bannato. Puoi vietare per periodi di tempo più lunghi e puoi impostare più filtri per proteggere il tuo sistema. Ricorda che fail2ban
è un'unica soluzione e non protegge il tuo sistema da altre vulnerabilità. La strategia che vuoi perseguire è un approccio alla sicurezza a più livelli e sfaccettato. Nessuna singola soluzione fornisce una sicurezza sufficiente.
Puoi trovare esempi di altri filtri e alcuni fail2ban
avanzati implementazioni descritte su fail2ban.org.
[ Vuoi saperne di più sulla sicurezza? Consulta la checklist di sicurezza e conformità IT. ]