Come proteggere il server SSH con SSHGuard: una guida pratica
La tua guida di riferimento per difendere in modo efficace i server SSH con SSHGuard dagli attacchi di forza bruta: scopri come!
SSH (Secure Shell) funge da punto di accesso critico al tuo server, offrendo un metodo potente e crittografato di amministrazione remota. Tuttavia, la sua sicurezza è forte quanto le misure per proteggerla.
Entra in SSHGuard, uno strumento robusto progettato per proteggere il tuo server SSH da attacchi di forza bruta e altre vulnerabilità comuni. Questa guida ti mostrerà i passaggi pratici per implementarlo, migliorando la sicurezza del tuo server e dandoti tranquillità.
Ma prima di passare alla parte pratica, facciamo più luce sul software stesso.
Cos'è SSHGuard?
SSHGuard è uno strumento di sicurezza che protegge i server dagli attacchi di forza bruta, principalmente quelli rivolti ai servizi SSH. Funziona come un sistema di prevenzione delle intrusioni basato su log, monitorando i log del server per rilevare eventuali segnali di attività dannose, come ripetuti tentativi di accesso non riusciti.
Quando SSHGuard rileva un comportamento sospetto, blocca automaticamente gli indirizzi IP offensivi utilizzando le regole del firewall.
Inoltre, supporta diversi formati di registrazione e può essere integrato con vari backend firewall, come UFW, firewalld, iptables, nftables, IPFW e pf, per gestire il blocco e lo sblocco del traffico potenzialmente dannoso.
Sì, lo so. Questo potrebbe ricordarti cosa fa Fail2Ban (consulta la nostra guida per maggiori dettagli). Sebbene i due strumenti abbiano somiglianze, presentano anche differenze fondamentali. Quindi, esploriamoli brevemente per aiutarti a decidere quale strumento si adatta meglio alle tue esigenze.
SSHGuard vs Fail2Ban: differenze chiave
SSHGuard e Fail2Ban monitorano entrambi i file di registro per individuare attività sospette e quindi agiscono per bloccare gli indirizzi IP offensivi. Nonostante le loro funzionalità simili, tuttavia, ecco le differenze tra loro:
Approccio di monitoraggio:
- SSHGuard monitora direttamente i file di registro e può interpretare le voci di registro da sole senza richiedere espressioni regolari.
- Fail2Ban, d'altra parte, fa molto affidamento sulle espressioni regolari per analizzare i file di registro e identificare modelli di comportamento abusivi. Ciò lo rende altamente flessibile e configurabile, poiché può essere adattato per monitorare praticamente qualsiasi servizio che scrive su un file di registro.
Servizi predefiniti monitorati:
- SSHGuard è progettato principalmente per proteggere i server SSH ma supporta altri servizi come server di posta e FTP.
- Fail2Ban può essere configurato per proteggere un'ampia gamma di servizi oltre SSH, inclusi server web, server di posta, server di condivisione file, FTP e altro ancora.
Implementazione e prestazioni:
- SSHGuard è scritto in C, che potrebbe offrire prestazioni migliori in termini di velocità e utilizzo delle risorse.
- Fail2Ban è scritto in Python, il che potrebbe renderlo leggermente più lento ma anche più adattabile grazie alle vaste librerie di Python e alla facilità di scripting.
Meccanismi di blocco:
- SSHGuard utilizza un meccanismo di blocco più semplice che si integra direttamente con strumenti firewall come UFW, firewalld, iptables, pf, IPFW, ecc.
- Fail2Ban utilizza principalmente iptables ma può essere configurato per funzionare con varie altre azioni, come l'invio di e-mail, l'esecuzione di script personalizzati o l'integrazione con impostazioni del firewall più complesse.
Facilità di configurazione:
- SSHGuard fornisce una configurazione più semplice per gli utenti interessati principalmente a SSH e ad alcuni altri servizi, spesso richiedendo meno personalizzazione.
- Fail2Ban potrebbe richiedere una configurazione più dettagliata per impostare le espressioni regolari e definire le regole e le azioni specifiche per i diversi servizi, ma ciò consente anche un maggiore controllo e personalizzazione.
Installazione di SSHGuard su Linux
Di seguito è riportato come installare SHHGuard, a seconda della distribuzione Linux.
Debian/Ubuntu/Linux Mint
sudo apt install sshguard
Fedora
sudo dnf install sshguard
Tieni presente che l'esecuzione del comando precedente installerà anche il pacchetto “sshguard-firewalld” a partire da Firewalld è ilfirewall predefinito utilizzato sui sistemi Fedora. Se necessario, puoi anche installare i pacchetti “sshguard-iptables” o “sshguard-nftables” come backend firewall alternativi per SSHGuard.
Abilita e avvia il servizio:
sudo systemctl enable --now sshguard.service
Alma Linux/Rocky Linux
Poiché il pacchetto SSHGuard si trova nel repository EPEL, aggiungilo prima al tuo sistema (se non lo hai già fatto) e aggiorna l'indice del pacchetto.
sudo dnf install epel-release
sudo dnf update
È quindi possibile installare SSHGuard eseguendo quanto segue:
sudo dnf install sshguard
Come con Fedora, un pacchetto aggiuntivo “sshguard-firewalld” verrà installato come backend predefinito per l'utilizzo di SSHGuard. Sono disponibili anche le altre due opzioni, "sshguard-iptables" e "sshguard-nftables".
Infine, abilita e avvia il servizio:
sudo systemctl enable --now sshguard.service
Configura SSHGuard
Il file "sshguard.conf" è dove configuri le impostazioni per SSHGuard per proteggere il tuo server. Questo file ti consente di specificare come si comporta SSHGuard, cosa monitora e come risponde a potenziali attacchi.
Sui sistemi basati su Debian (Debian, Ubuntu, ecc.), il file si trova in:
/etc/sshguard/sshguard.conf
Nelle distribuzioni basate su RHEL come Alma Linux, Rocky Linux, Fedora, puoi trovarlo nel seguente percorso:
/etc/sshguard.conf
Ecco come appare per impostazione predefinita in Debian:
Ecco una spiegazione delle sue opzioni comuni:
- BACKEND: questa opzione specifica il tipo di backend firewall che SSHGuard dovrebbe utilizzare per bloccare gli aggressori. Ad esempio, potresti vedere valori come "sshg-fw-nft-sets", "sshg-fw-firewalld", "sshg-fw-iptables”, “sshg-fw-pf”, ecc., a seconda del firewall del sistema.
- LOGREADER: specifica il metodo utilizzato da SSHGuard per leggere i file di registro. Determina il modo in cui SSHGuard elabora le voci di registro per rilevare attività dannose.
- SOGLIA: questo è il numero di attività abusive (come tentativi di accesso falliti) da un singolo indirizzo IP che fa sì che SSHGuard blocchi quell'indirizzo. Impostare un valore inferiore significa ban più rapidi, ma fai attenzione a non impostarlo troppo basso, il che potrebbe bloccare gli utenti legittimi che digitano erroneamente le loro password.
- BLOCK_TIME: definisce per quanto tempo (in secondi) un indirizzo IP verrà bloccato dopo aver raggiunto la soglia di abuso, con l'impostazione predefinita di due minuti (120 secondi). Trascorso questo tempo, il blocco viene revocato a meno che l'indirizzo IP non attivi un altro blocco.
- DETECTION_TIME: imposta l'intervallo di tempo (in secondi) durante il quale vengono conteggiate le violazioni ripetute da parte dello stesso IP per raggiungere la soglia di blocco. Essenzialmente, imposta il periodo durante il quale SSHGuard tiene traccia delle attività sospette da un indirizzo IP specifico.
- WHITELIST_FILE: il percorso completo del file in cui è possibile specificare indirizzi o intervalli IP che non devono mai essere bloccati, indipendentemente da come si comportano. Questo è utile per assicurarti di non bloccare accidentalmente te stesso o gli indirizzi IP attendibili.
Lascia che ora ti mostri come configurare SSHGuard, a seconda del firewall che stai utilizzando.
Configurazione SSHGuard quando si utilizza UFW/nftables
Innanzitutto voglio iniziare con una precisazione importante. Molte guide elencano UFW come backend per SSHGuard, il che non è del tutto vero per un semplice motivo: SSHGuard non offre un backend UFW ma, di fatto, uno nftables.
UFW (Uncomplicated Firewall) è un'interfaccia semplice da usare (livello di astrazione) per la gestione delle regole del firewall iptables/nftables su Linux dietro le quinte. È quello predefinito utilizzato in Ubuntu.
Quindi, per configurare SSHGuard in modo che funzioni con esso, assicurati che l'opzione "BACKEND" contenga "/usr/libexec/sshguard/sshg-fw-nft-sets" come valore.
Tuttavia, prima che SSHGuard possa manipolare le regole UFW, è necessario assicurarsi che UFW sia impostato per essere gestito da applicazioni esterne come SSHGuard. Ciò comporta l’aggiunta di hook per SSHGuard nella configurazione di UFW. Per fare ciò, modifica il file UFW “before.rules”:
sudo nano /etc/ufw/before.rules
Aggiungi le seguenti righe dopo la sezione "allow all on loopback" per creare una nuova catena per SSHGuard:
# Create a chain for SSHGuard
-A ufw-before-input -j SSHGUARD
-A ufw-before-output -j SSHGUARD
-A ufw-before-forward -j SSHGUARD
Salvare ed uscire dal file. Quindi, riavvia il servizio UFW.
sudo systemctl restart ufw
Se hai modificato la configurazione di SSHGuard, riavvia anche il suo servizio.
sudo systemctl restart sshguard
Questo è tutto. SSHGuard è ora configurato per proteggere il tuo server dagli attacchi SSH di forza bruta. Prova a effettuare alcune connessioni SSH errate al tuo server per testarlo. Dopo il terzo tentativo fallito (“THRESHOLD=30“), SSHGuard bloccherà la connessione per due minuti (“BLOCK_TIME=120“).
Vuoi verificare quali indirizzi sono stati bloccati? Il modo più semplice è elencare direttamente la tabella nftables di SSHGuard, che contiene un elenco di indirizzi IP bloccati.
sudo nft list table sshguard
Puoi anche monitorare il file "/var/log/auth.log" per visualizzare i record delle attività e delle azioni di SSHGuard.
sudo tail -f /var/log/auth.log
Configurazione SSHGuard quando si utilizza iptables
Chiamami vecchio stile (non discuterò perché hai ragione), ma preferisco usare SSHGuard con un firewall iptables per il backend. Ecco come farlo.
Innanzitutto, assicurati che SSHGuard sia configurato per utilizzare iptables controllando il file di configurazione SSHGuard, che deve contenere l'opzione "BACKEND" impostata su "/usr/libexec/sshguard/sshg-fw-iptables ."
sudo nano /etc/sshguard/sshguard.conf
Naturalmente, se hai apportato modifiche alla configurazione SSHGuard, assicurati di riavviarlo:
sudo systemctl restart sshguard
Successivamente, crea una nuova catena iptables per SSHGuard:
sudo iptables -N sshguard
Assicurati che tutto il traffico SSH passi attraverso la catena "sshguard":
sudo iptables -A INPUT -p tcp --dport 22 -j sshguard
Per rendere permanenti le modifiche (disponibili dopo un riavvio), consulta questa guida o segui i comandi seguenti:
sudo apt install iptables-persistent
sudo iptables-save -f /etc/iptables/rules.v4
Per visualizzare l'elenco degli indirizzi IP attualmente bloccati da SSHGuard, eseguire quanto segue:
sudo iptables -L sshguard -n
Puoi anche monitorare le azioni SSHGuard in tempo reale eseguendo:
sudo journalctl -u sshguard -f
Configurazione SSHGuard quando si utilizza firewalld
Firewalld è uno strumento di gestione del firewall per Linux. Viene utilizzato principalmente nelle distribuzioni basate su RHEL come Alma Linux, Rocky Linux e Fedora. Lo strumento supporta le zone firewall, che definiscono il livello di affidabilità delle connessioni o delle interfacce di rete. Per saperne di più e su come utilizzarlo, visita la nostra guida dettagliata, "Firewalld in Esempi". Ora torniamo all'argomento.
Per dire a SSHGuard di utilizzare firewalld come backend, assicurati che l'opzione “BACKEND” nel file “sshguard.conf” sia impostata su “/usr /libexec/sshguard/sshg-fw-firewalld. "
sudo nano /etc/sshguard.conf
Inoltre, non dimenticare di riavviare il servizio SSHGuard se hai apportato modifiche alla configurazione stessa:
sudo systemctl restart sshguard
Gli aggressori bloccati vengono aggiunti a due regole, denominate rispettivamente "sshguard4" (per indirizzi IPv4) e "sshguard6" (per indirizzi IPv6), aggiunte alla zona firewalld predefinita ( “pubblico“).
Per visualizzare l'elenco degli indirizzi IP attualmente bloccati da SSHGuard, eseguire quanto segue:
sudo firewall-cmd --info-ipset=sshguard4
Di conseguenza, per gli indirizzi IPv6, il comando è:
sudo firewall-cmd --info-ipset=sshguard6
Infine, puoi monitorare le azioni SSHGuard in tempo reale eseguendo:
sudo journalctl -u sshguard -f
Tuttavia, se utilizzi una zona firewall diversa, puoi configurarla seguendo le istruzioni riportate di seguito. Sostituisci semplicemente "
sudo firewall-cmd --zone=<zone-name> --permanent --add-rich-rule="rule source ipset=sshguard4 drop"
sudo firewall-cmd --zone=<zone-name> --permanent --add-rich-rule="rule source ipset=sshguard6 drop"
Indirizzi IP nella whitelist
L'inserimento nella whitelist degli indirizzi IP in SSHGuard ti consente di garantire che determinati indirizzi IP non vengano mai bloccati, indipendentemente dalla loro attività. Questo può essere importante per gli IP di cui ti fidi, come gli amministratori di sistema o i processi automatizzati che potrebbero avere un accesso SSH frequente e legittimo. Ecco come puoi inserire nella whitelist gli indirizzi IP in SSHGuard.
Innanzitutto, assicurati che l'opzione "WHITELIST_FILE" nel file "sshguard.conf" sia attiva e non commentata.
La posizione del file con l'elenco degli indirizzi autorizzati può variare a seconda della distribuzione Linux. Per coloro che utilizzano sistemi basati su Debian come Ubuntu, si trova in:
/etc/sshguard/whitelist
Per basati su RHEL, come Alma, Rocky e Fedora:
/etc/sshguard.whitelist
Lì puoi inserire gli host che non desideri vengano mai bloccati da SSHGuard in tre modi diversi:
- Un unico indirizzo IP
- Una gamma di rete
- Il nome di dominio completo (FQDN) di un host
Per esempio:
192.168.0.34
192.168.0.0/24
myhost.domain.com
Quindi, apri il file con il tuo editor di testo, inserisci gli indirizzi che ti servono, salva il file ed esci. Naturalmente, dopodiché, non dimenticare di riavviare il servizio SSHGuard.
sudo systemctl restart sshguard
Conclusione
Proteggere il tuo server SSH utilizzando SSHGuard fornisce un solido livello di protezione contro gli attacchi di forza bruta e altri tentativi di accesso non autorizzati. Ricorda, la chiave per mantenere la sicurezza non sta solo nella configurazione iniziale, ma nel monitoraggio e nell'aggiornamento continuo delle configurazioni man mano che emergono nuove minacce.
Per ulteriori informazioni, visitare il sito Web del progetto o consultare la documentazione di SSHGuard.
Grazie per il tuo tempo! Se avete domande, lasciatele nella sezione commenti qui sotto.