Migliori pratiche di sicurezza SSH: Rafforzamento del tuo server e client
Rafforza SSH con autenticazione tramite chiave, accesso con privilegi minimi, abitudini client più sicure, regole firewall, MFA e protezione contro attacchi brute-force.
Best practice di sicurezza SSH: rafforzare server e client
Le best practice di sicurezza SSH sono importanti perché SSH è spesso la porta d'ingresso ai tuoi server. Una configurazione SSH debole può trasformare una password indovinata, una chiave rubata o un errore di host fidato in accesso completo alla shell.
Non hai bisogno di impostazioni esotiche per rafforzare bene SSH. Inizia con l'accesso basato su chiave, utenti limitati, nessun accesso root diretto, comportamento attento del client e log che ti mostrano quando qualcosa non va.
Rafforzamento della sicurezza lato server
La configurazione del server SSH (sshd_config) stabilisce le regole su come i client si connettono e si autenticano.
1. Disabilitare l'autenticazione tramite password
L'autenticazione tramite password è intrinsecamente vulnerabile agli attacchi brute-force. Sostituirla con l'autenticazione basata su chiave SSH è uno dei miglioramenti di sicurezza più efficaci che puoi apportare.
Perché: Le chiavi SSH sono molto più complesse delle password e non possono essere facilmente indovinate o craccate con metodi brute-force. Forniscono una forma di autenticazione molto più forte.
Come: Modifica il file
sshd_config(tipicamente situato in/etc/ssh/sshd_config) e impostaPasswordAuthentication no. Dopo aver apportato le modifiche, riavvia il servizio SSH:sudo sshd -t sudo systemctl reload sshdImportante: Assicurati di aver configurato e testato con successo l'autenticazione basata su chiave SSH prima di disabilitare l'autenticazione tramite password per evitare di rimanere bloccato fuori.
Su alcune distribuzioni il servizio si chiama ssh, non sshd. Usa il nome del servizio fornito dal tuo sistema e mantieni una sessione esistente aperta mentre testi un nuovo accesso.
2. Tratta le modifiche alla porta come riduzione del rumore
Cambiare la porta SSH predefinita da 22 può ridurre il rumore delle scansioni automatiche. Non sostituisce chiavi, patch e controllo degli accessi.
Come: In
sshd_config, modifica la direttivaPort. Ad esempio, per usare la porta2222:Port 2222Ricorda di aggiornare le regole del firewall per consentire il traffico sulla nuova porta e specificare la porta quando ti connetti dal client:
ssh -p 2222 user@your_server_ip
3. Limita l'accesso di utenti e gruppi
Controlla quali utenti e gruppi possono accedere tramite SSH.
AllowUserseAllowGroups: Usa queste direttive insshd_configper specificare esplicitamente chi può connettersi.AllowUsers admin user1 AllowGroups sshusersDenyUserseDenyGroups: In alternativa, usale per bloccare utenti o gruppi specifici.
4. Disabilita l'accesso root
L'accesso root diretto tramite SSH dovrebbe essere disabilitato per impedire agli aggressori di prendere di mira immediatamente l'account più potente. Invece, gli utenti dovrebbero accedere con i propri account e usare sudo per le attività amministrative.
- Come: Imposta
PermitRootLogin noinsshd_config.
5. Configura timeout di inattività e keepalive
Impedisci che sessioni SSH attive e incustodite rimangano aperte indefinitamente.
ClientAliveIntervaleClientAliveCountMax: Queste impostazioni lato server inviano pacchetti nulli al client a intervalli regolari per verificare se la connessione è ancora attiva. Se il client non risponde dopo i tentativiClientAliveCountMax, il server disconnette la sessione.ClientAliveInterval 300 # Invia un pacchetto ogni 5 minuti ClientAliveCountMax 2 # Disconnette dopo 2 risposte mancate (10 minuti)
6. Rafforza le chiavi host
Assicurati che le chiavi host del tuo server siano protette e gestite correttamente.
- Permessi: Verifica che i file delle chiavi host (ad es.
/etc/ssh/ssh_host_rsa_key) abbiano permessi restrittivi (ad es.600) e siano di proprietà di root. - Algoritmi: Preferisci chiavi host moderne come Ed25519 quando i tuoi client le supportano. Non eliminare le chiavi host esistenti senza pianificazione, perché i client lo vedranno come un cambiamento di identità dell'host.
- Rotazione: Ruota le chiavi host deliberatamente e annuncia le nuove impronte digitali attraverso un canale fidato.
Best practice di sicurezza lato client
Proteggere la macchina client e le tue chiavi SSH è altrettanto cruciale quanto il rafforzamento lato server.
1. Proteggi le tue chiavi private
La tua chiave privata SSH è il gateway per i tuoi server. Trattala con la massima cura.
- Permessi: Assicurati che il file della chiave privata (ad es.
~/.ssh/id_rsa) abbia permessi rigorosi (ad es.600o400) in modo che solo tu possa leggerlo.chmod 600 ~/.ssh/id_rsa - Frasi segrete: Usa sempre una frase segreta forte per crittografare la tua chiave privata. Questo aggiunge un ulteriore livello di sicurezza, richiedendo la frase segreta anche se il file della chiave viene compromesso.
- Evita di copiare: Non condividere la tua chiave privata con nessuno e non conservarla in posizioni non sicure.
2. Usa l'inoltro dell'agente SSH con attenzione
L'inoltro dell'agente SSH ti consente di utilizzare le tue chiavi SSH locali per autenticarti su server remoti senza copiare le tue chiavi private su quei server. Sebbene comodo, può essere un rischio per la sicurezza se il server remoto viene compromesso.
- Abilita:
ssh -A user@your_server_ip - Best practice: Disabilita l'inoltro dell'agente per impostazione predefinita. Usalo solo per host di cui ti fidi e preferisci alternative come chiavi di deploy, bastion
ProxyJumpo credenziali di breve durata quando si adattano al tuo flusso di lavoro.
3. Verifica le impronte digitali delle chiavi host
Quando ti connetti a un server SSH per la prima volta, il tuo client ti chiede di verificare l'impronta digitale della chiave host del server. Questo aiuta a prevenire attacchi man-in-the-middle.
- Come: Verifica sempre l'impronta digitale rispetto a una fonte attendibile, come la tua console cloud, i log di provisioning o un amministratore. Se l'impronta digitale cambia inaspettatamente, fermati e indaga prima di accettarla.
4. Mantieni aggiornato il software client SSH
Assicurati che il software client SSH (OpenSSH, PuTTY, ecc.) sia mantenuto aggiornato per beneficiare delle ultime patch di sicurezza e funzionalità.
Misure di sicurezza avanzate
Oltre ai passaggi fondamentali, considera queste tecniche avanzate:
1. Autenticazione multi-fattore
Aggiungi MFA per l'accesso SSH umano dove il tuo ambiente lo supporta. Questo di solito combina le chiavi SSH con un codice monouso, approvazione push o autenticazione basata su hardware.
- Strumenti: I moduli PAM, Duo, le app di autenticazione e le chiavi di sicurezza hardware possono tutti far parte di un progetto SSH MFA.
2. Fail2ban
Fail2ban analizza i log per tentativi di autenticazione falliti ripetuti e può aggiungere blocchi firewall temporanei per l'IP di origine. I percorsi dei log variano a seconda della distribuzione; Debian e Ubuntu usano comunemente /var/log/auth.log, mentre molti sistemi della famiglia RHEL registrano tramite journald o /var/log/secure.
- Installazione: Tipicamente disponibile tramite i gestori di pacchetti (
sudo apt install fail2banosudo yum install fail2ban). - Configurazione: Configura le jail in
/etc/fail2ban/jail.localper monitorare i log SSH e definire tempi di ban e soglie.
3. Configurazione del firewall
Utilizza un firewall (come ufw, firewalld o iptables) per limitare l'accesso alla tua porta SSH (sia predefinita che personalizzata) solo da indirizzi o intervalli IP fidati.
- Esempio (ufw):
sudo ufw allow from trusted_ip to any port 22 sudo ufw enable
Conclusione
Proteggere SSH è un'abitudine continua. Usa l'autenticazione basata su chiave, disabilita l'accesso root diretto, limita chi può connettersi, proteggi le tue chiavi private e verifica le impronte digitali degli host. Quindi aggiungi limiti firewall, MFA e protezione contro brute-force dove il rischio giustifica la configurazione aggiuntiva.