Perché conta
SSH è il modo in cui si amministra praticamente ogni server Linux. È anche il primo servizio che una botnet prova a forzare: su qualunque IP pubblico, i log mostrano migliaia di tentativi di login al giorno. Un SSH mal configurato — password deboli, root abilitato, cifrari vecchi — è una delle vie d’ingresso più comuni in assoluto. L’hardening di SSH è il singolo intervento con il miglior rapporto tra sforzo e sicurezza guadagnata.
Il modello: chiavi, non password
L’autenticazione a chiave pubblica sostituisce la password con una coppia crittografica. La chiave privata resta sul client e non lascia mai la macchina; il server conserva solo la pubblica.
sequenceDiagram
participant C as Client (chiave privata)
participant S as Server (chiave pubblica in authorized_keys)
C->>S: richiesta di login per l'utente X
S->>C: sfida (un nonce casuale)
Note over C: firma la sfida con la chiave privata
C->>S: firma
Note over S: verifica con la chiave pubblica
S->>C: accesso consentito
Una password può essere indovinata o intercettata; una chiave Ed25519 no, in pratica. E poiché il server non riceve mai un segreto riutilizzabile, non c’è nulla da rubare dal lato server.
|
|
La configurazione del server
Il cuore dell’hardening è /etc/ssh/sshd_config. Le righe che contano:
|
|
Le tre righe evidenziate sono le decisive: eliminano del tutto l’autenticazione a password, che è
il bersaglio del brute force. Con PasswordAuthentication no, i milioni di tentativi delle botnet
falliscono prima ancora di iniziare, perché il server non accetta quel metodo.
Dopo ogni modifica, validare e ricaricare:
|
|
Attenzione irreversibile: prima di impostare
PasswordAuthentication no, verificate di poter entrare con la chiave in una seconda sessione già aperta. Un errore qui può chiudervi fuori dal server.
Cifrari e algoritmi moderni
SSH negozia algoritmi di scambio chiavi, cifratura e MAC. Le versioni vecchie permettevano opzioni oggi deboli. Si restringono alle moderne:
|
|
I MAC in modalità Encrypt-then-MAC (-etm) sono preferibili. Queste liste tolgono dalla
negoziazione CBC, i MAC SHA-1 e lo scambio Diffie-Hellman su gruppi deboli.
Ridurre la superficie
Oltre alla configurazione, due misure riducono l’esposizione:
- Rate limiting / ban:
fail2bano una regola nftables che limita le nuove connessioni alla porta 22. Non sostituisce le chiavi, ma riduce il rumore nei log. - Niente SSH su internet quando evitabile: dietro una VPN (vedi IPsec vs WireGuard) o con accesso limitato a IP noti.
|
|
Spostare SSH su una porta diversa dalla 22 (“security through obscurity”) riduce solo il rumore dei log, non il rischio reale: non è hardening, è cosmesi.
Lab
Su una VM o un container:
- Generate una chiave Ed25519 e installatela sul server.
- Verificate l’accesso con la chiave, poi impostate
PasswordAuthentication noe ricaricate. - Da un altro terminale, provate a forzare la password (
ssh -o PubkeyAuthentication=no ...): deve essere rifiutato. - Aggiungete la regola nftables e osservate i tentativi scartati.
Domanda: se uso le chiavi, perché dovrei comunque disattivare la password invece di lasciarla come ripiego?
Perché finché la password è accettata, la superficie d'attacco del brute force resta aperta, a prescindere dal fatto che voi usiate le chiavi. Un attaccante non sa (e non gli importa) che voi preferite le chiavi: tenterà comunque le password, e se un qualsiasi account del sistema ne ha una debole, entra. Le chiavi come metodo aggiuntivo non proteggono: proteggono solo quando sono l'unico metodo. Il "ripiego" a password è esattamente il buco che l'hardening chiude.
Conclusione
L’hardening di SSH si riduce a pochi principi: solo chiavi, niente root diretto, cifrari moderni,
superficie ridotta. La singola riga PasswordAuthentication no elimina da sola la categoria di
attacco più comune contro i server esposti. È cinque minuti di lavoro che chiude una delle porte
più battute di internet.