Sicurezza SSH · 5 min read · Dec 28, 2025

Guida al Rafforzamento della Sicurezza di OpenSSH per Linux

SSH è uno dei protocolli più utilizzati per l’amministrazione di sistema su piattaforme Linux. È disponibile per molti sistemi operativi basati su Unix, Linux e MacOS. Si basa sul modello client-server, dove una macchina esegue il componente server e l’altra utilizza uno strumento client per accedervi.

Come funziona SSH?

Il client (ssh) avvia la connessione inviando una richiesta al server. Il server ascolta le richieste in arrivo utilizzando il demone server (sshd). Utilizza la sua chiave pubblica per autenticarsi al client che sta cercando di connettersi:

In questo modo, il client è sicuro di connettersi al giusto server SSH. Quando ciò avviene, il client può accedere al server. Se sei su un client Windows, dovrai utilizzare strumenti come putty per connetterti al server. Sia il client che il server possono essere installati sullo stesso sistema, il che significa che puoi utilizzare lo strumento client per accedere ad altre macchine o il tuo sistema può essere il server stesso che può essere accessibile da altri. In tal caso, il file di configurazione si trova nella stessa directory ma con un nome leggermente diverso. La posizione della directory è ‘/etc/ssh’ e il nome del file di configurazione del client ssh è ‘ssh_config’ e quello del file di configurazione del server è ‘sshd_config’:

elenco directory ssh

In caso tu abbia entrambi i file sul tuo sistema, dovresti scegliere saggiamente quale file configurare. Nella maggior parte dei casi, è il server che dobbiamo configurare per la sicurezza poiché apre la porta a potenziali accessi al sistema.

Iniziamo controllando lo stato del demone SSH o sshd sul nostro server. In questo modo possiamo vedere se è in esecuzione e abilitato per avviarsi automaticamente all’avvio. Il comando sottostante controllerà lo stato di sshd:

$ systemctl status ssh.service

Oppure usa il seguente:

$ systemctl status sshd.service

stato servizio ssh

Dallo screenshot possiamo vedere che il servizio è attivo e abilitato. È in esecuzione da 6 ore. Quando espandi la vista del terminale premendo la freccia destra, noterai che sta ascoltando sulla porta predefinita 22.

A volte apportiamo modifiche al file di configurazione SSH del sistema remoto mentre siamo connessi ad esso utilizzando lo stesso SSH. In tal caso dovremmo utilizzare il comando di ricarica invece di quello di riavvio. In questo modo è meno probabile che ci disconnettiamo.

Configurare SSH utilizzando le Migliori Pratiche

Penso sia ora di iniziare a configurare la configurazione del server SSH. Prima di sporcarci le mani con il file di configurazione SSH, dovremmo eseguire un backup del file con le impostazioni predefinite:

$ sudo cp /etc/ssh/sshd_config ~/sshd_config.bkp

Dopo aver eseguito il backup, siamo certi che se sbagliamo con il file principale e rompiamo il nostro SSH, possiamo utilizzare il file di backup per tornare alla normalità.

1. Cambiare la Porta Predefinita

Il demone sshd per impostazione predefinita ascolta sulla porta 22 del server. Si consiglia di cambiare questo valore in un altro numero in modo da ridurre il campo di attacco automatizzato utilizzando script. Questo approccio è chiamato sicurezza attraverso l’oscurità. Per questo apri il file sottostante e cerca la riga contenente il testo ‘#Port 22’.

$ sudo nano /etc/ssh/sshd_config

Decommenta la riga ‘#Port 22’ e cambia ‘22’ in un altro numero di porta, non in uso sul tuo sistema. Dobbiamo cambiarlo in ‘222’ e riavviare il servizio. Ora usa il comando ssh con l’opzione ‘p’ per specificare la nuova porta:

$ ssh user@system_ip -p 222

2. Disabilitare il login come utente Root

Root è l’utente supremo su qualsiasi sistema Linux con accesso a ogni risorsa sul tuo sistema. Nel caso non ti serva un accesso root rigoroso, dovresti disabilitare la possibilità di login come root sul tuo server. Per questo apri lo stesso file sopra:

$ sudo nano /etc/ssh/sshd_config

e imposta il parametro ‘PermitRootLogin’ su ‘no’. Questo garantirà che il server sarà protetto dagli attacchi casuali che mirano all’account root. L’opzione predefinita è ‘prohibit-password’ che consente il login basato sull’autenticazione con chiave pubblica ma nega i login basati su password.

3. Impostare la Versione del Protocollo

La versione del protocollo SSH più vecchia è 1 ed è meno sicura rispetto a SSH2 e hanno implementazioni di rete diverse e non sono compatibili tra loro. Per controllare quale versione del protocollo è attiva sul tuo server, apri di nuovo il file sshd_config e cerca la riga ‘Protocol’:

$ cat /etc/ssh/sshd_config | grep ‘Protocol’

Nel caso tu abbia un output vuoto, OpenSSH potrebbe probabilmente utilizzare la versione 2 poiché così è stato nel nostro caso. Un altro modo è utilizzare l’utilità del comando netcat:

$ nc localhost 22


Output di Esempio:

SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.4

Dall’output possiamo vedere che SSH2 è attivo sul nostro sistema.

Per controllare quali versioni di protocollo un server remoto sta eseguendo, prova a connetterti ad esso utilizzando un client ssh con l’opzione -Q (query):

$ ssh -Q protocol-version user@server_name

query protocollo SSH

L’immagine sopra mostra una versione SSH 2 mentre si accede a un server ssh Ubuntu da Kali Linux.

4. Complessità della Password

Le password deboli sono sempre vulnerabili ad essere sfruttate, quindi le password vuote sono più suscettibili di essere sfruttate. L’opzione PermitEmptyPasswords dovrebbe quindi essere impostata su ‘no’ nel file sshd_config. Allo stesso modo, il numero di tentativi di login con password errata dovrebbe essere limitato per ridurre le possibilità di attacco brute force. Questo può essere ottenuto con l’opzione ‘MaxAuthTries’ impostata su un valore più piccolo come 3.

Limitare il tentativo di login su ssh

Dalla figura sopra possiamo vedere che quando impostiamo il valore ‘MaxAuthTries’ su 3, ci viene negato l’accesso SSH dopo tre password errate. Un altro aspetto di sicurezza importante è utilizzare l’autenticazione con chiave pubblica per il login. I modelli di autenticazione basati su chiave sono meno vulnerabili agli attacchi brute force. Allo stesso modo, possiamo utilizzare il modulo di autenticazione PAM per rafforzare ulteriormente il server SSH.

Conclusione

In questa guida, abbiamo cercato di coprire i punti più importanti per mettere in sicurezza un server SSH e riassumerli in quattro punti principali. Anche se questa guida non è completa, puoi trovare ulteriori aree per rafforzare ulteriormente il tuo server SSH. Ad esempio, puoi provare ad aggiungere un messaggio di avviso per informare gli utenti sull’uso del tuo sistema tramite SSH. Puoi anche negare il login con una password e utilizzare l’autenticazione basata su chiave per un login senza password. Un’altra cosa interessante è che puoi limitare il numero di utenti SSH e il loro tempo di connessione.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.