Migliori Pratiche per il Rafforzamento della Sicurezza SSH sui Server Linux
Secure Shell (SSH) è la spina dorsale della gestione remota per praticamente ogni server Linux. Sebbene sia incredibilmente potente e generalmente sicuro fin dall'installazione, SSH è anche l'obiettivo principale per attori malevoli che tentano di ottenere accesso non autorizzato tramite attacchi a forza bruta, attacchi a dizionario e credential stuffing.
Rafforzare la configurazione SSH è probabilmente il passo più critico per proteggere una nuova implementazione Linux. Implementando alcune best practice fondamentali—andando oltre la semplice autenticazione con nome utente e password—è possibile ridurre drasticamente la superficie di attacco, minimizzare il "rumore" nei log e garantire che solo gli utenti autorizzati che utilizzano metodi sicuri possano accedere al sistema.
Questa guida illustra passaggi essenziali e attuabili per la messa in sicurezza del servizio SSH su qualsiasi distribuzione Linux, concentrandosi sul file di configurazione principale: /etc/ssh/sshd_config.
Prerequisito: Eseguire il Backup della Configurazione
Prima di apportare qualsiasi modifica alla configurazione del demone SSH (sshd_config), è fondamentale crearne un backup. Una configurazione errata può bloccare l'accesso al server. Testare sempre accuratamente le modifiche.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak_$(date +%F)
Dopo aver modificato il file, controllare la sintassi prima di riavviare il servizio:
sudo sshd -t
Se il test ha successo, è possibile riavviare in sicurezza il servizio SSH (il comando varia a seconda della distribuzione):
# Per sistemi che utilizzano systemd (la maggior parte delle distribuzioni moderne)
sudo systemctl restart sshd
1. Disabilitare l'Accesso Root
Consentire l'accesso diretto come utente root è uno dei maggiori rischi per la sicurezza. Se un aggressore riesce a forzare una password, ottiene istantaneamente il controllo completo del sistema. Invece, gli utenti non-root dovrebbero accedere prima ed elevare i privilegi utilizzando sudo.
Passo di Configurazione
Aprire /etc/ssh/sshd_config e individuare la direttiva PermitRootLogin. Cambiare il suo valore in no.
# Prima:
# PermitRootLogin yes
# Dopo (Migliore Pratica):
PermitRootLogin no
Nota Importante
Assicurarsi di aver creato e configurato almeno un utente standard con privilegi
sudoprima di disabilitare l'accesso root. In caso contrario, si rimarrà bloccati fuori dall'accesso amministrativo.
2. Implementare l'Autenticazione Obbligatoria Basata su Chiave
L'autenticazione tramite password è suscettibile agli attacchi a forza bruta e a dizionario. Le chiavi SSH, composte da una chiave pubblica (sul server) e una chiave privata (sul client), offrono una sicurezza significativamente maggiore grazie alla loro estrema complessità e lunghezza.
A. Generare e Installare le Chiavi
- Generare la Coppia di Chiavi (sulla macchina client locale):
bash ssh-keygen -t ed25519 -C "[email protected]" - Copiare la Chiave Pubblica (sul server):
bash ssh-copy-id -i ~/.ssh/id_ed25519 user@your_server_ip
B. Disabilitare l'Autenticazione tramite Password
Una volta confermato che è possibile accedere con successo utilizzando la chiave SSH, disabilitare completamente l'autenticazione tramite password.
# Disabilita le password
PasswordAuthentication no
# Assicura che le chiavi siano abilitate
PubkeyAuthentication yes
Migliore Pratica: Utilizzare tipi di chiave forti come Ed25519 o RSA a 4096 bit. Proteggere sempre la chiave privata con una passphrase robusta.
3. Cambiare la Porta SSH Predefinita (Difesa in Profondità)
La porta SSH predefinita (porta TCP 22) è costantemente scansionata da bot automatizzati. Cambiare la porta con un numero alto e non standard (ad esempio, 2222, 22222 o 30000+) riduce significativamente la quantità di "rumore" nei log del server e rende invisibili agli scanner casuali.
Passo di Configurazione
In /etc/ssh/sshd_config, modificare la direttiva Port:
# Prima:
# Port 22
# Dopo (Esempio di porta non standard):
Port 22222
Avviso: Necessaria Modifica del Firewall
Se si cambia la porta, si deve aggiornare il firewall (ad esempio,
iptables,firewalldo AWS Security Groups) per consentire il traffico sulla nuova porta. La mancata esecuzione di questa operazione comporterà l'immediata perdita della connessione.
Esempio usando firewalld (CentOS/RHEL):
sudo firewall-cmd --permanent --add-port=22222/tcp
sudo firewall-cmd --reload
4. Limitare l'Accesso a Utenti e Gruppi Specifici
Per applicare un controllo degli accessi rigoroso, è necessario definire esplicitamente quali utenti o gruppi sono autorizzati a connettersi tramite SSH. Ciò limita i potenziali punti di ingresso anche se un account viene compromesso o non è utilizzato.
Direttive di Configurazione
Utilizzare una o entrambe le seguenti direttive in sshd_config:
- Consentire utenti specifici:
config AllowUsers alice bob - Consentire gruppi specifici:
config AllowGroups sshaccess admins
Se queste direttive sono presenti, a qualsiasi utente o gruppo non esplicitamente elencato verrà negato l'accesso.
5. Imporre Protocolli e Cifratori più Forti
Assicurarsi di utilizzare il moderno e sicuro SSH Protocol 2 e imporre l'uso di cifrari crittografici e Codici di Autenticazione dei Messaggi (MAC) robusti.
Passaggi di Configurazione
Verificare che i protocolli legacy meno sicuri siano disabilitati:
Protocol 2
# Nega i metodi di autenticazione legacy non sicuri
HostbasedAuthentication no
IgnoreRhosts yes
Sebbene le implementazioni SSH moderne siano spesso ben configurate per impostazione predefinita, definire esplicitamente cifrari e MAC robusti può prevenire attacchi di downgrade. Un set minimo consigliato include:
Ciphers [email protected],[email protected]
MACs hmac-sha2-512,hmac-sha2-256
6. Implementare la Limitazione della Frequenza e il Rilevamento delle Intrusioni (Fail2Ban)
Anche con l'autenticazione basata su chiave, la scansione continua da parte dei bot consuma risorse e ingombra i log. Fail2Ban è uno strumento cruciale che monitora i log alla ricerca di tentativi di accesso falliti (o altre attività sospette) e regola dinamicamente il firewall per bannare temporaneamente o permanentemente l'indirizzo IP di origine.
Installazione e Configurazione (Passaggi Generali)
-
Installare Fail2Ban:
```bash
# Debian/Ubuntu
sudo apt update && sudo apt install fail2banRHEL/CentOS/Fedora
sudo dnf install fail2ban
`` 2. **Configurare la Jail SSH:** Fail2Ban utilizza configurazioni chiamate 'jails'. La jailsshdpredefinita è altamente efficace nel monitorare/var/log/auth.log` (o equivalente) per guasti ripetuti sul servizio SSH e applicare automaticamente ban temporanei. -
Assicurarsi che il Servizio sia in Esecuzione:
bash sudo systemctl enable fail2ban sudo systemctl start fail2ban
Fail2Ban mitiga significativamente i tentativi automatizzati a forza bruta ed è considerato obbligatorio per i server esposti a Internet.
7. Altre Direttive Essenziali per il Rafforzamento SSH
Questi piccoli aggiustamenti aiutano a gestire le sessioni e a ridurre la potenziale finestra di attacco:
| Direttiva | Valore Consigliato | Scopo |
|---|---|---|
ClientAliveInterval |
300 | Invia un pacchetto nullo ogni 300 secondi (5 minuti) per mantenere viva la sessione. |
ClientAliveCountMax |
3 | Numero massimo di controlli 'alive' falliti prima della disconnessione (15 minuti totali di inattività). |
UsePAM |
yes | Abilita i Moduli di Autenticazione Pluggable (PAM) per ulteriori politiche di sicurezza del sistema locale. |
PermitEmptyPasswords |
no | Proibisce agli utenti con password vuote di accedere (dovrebbe essere no per impostazione predefinita). |
Riepilogo Checklist di Rafforzamento
Utilizzare questa checklist per assicurarsi che il server soddisfi gli standard di base di rafforzamento SSH:
- [ ] Eseguire il backup di
sshd_configprima di apportare modifiche. - [ ] Impostare
PermitRootLogin no. - [ ] Impostare
PasswordAuthentication no(dopo la configurazione della chiave). - [ ] Cambiare la
Porta un valore non standard. - [ ] Aggiornare il firewall per consentire la nuova porta.
- [ ] Usare
AllowUsersoAllowGroupsper limitare l'accesso. - [ ] Impostare
Protocol 2. - [ ] Installare e configurare Fail2Ban.
- [ ] Controllare la configurazione con
sshd -tprima di riavviare.
Implementando queste best practice, si trasforma SSH da una potenziale vulnerabilità a un canale di amministrazione remota altamente sicuro.