Ricerca nel sito web

Guida al rafforzamento della sicurezza di OpenSSH per Linux


Su questa pagina

  1. Come funziona SSH?
  2. Configurazione di SSH utilizzando le best practice
    1. 1. Modifica della porta predefinita
    2. 2. Disattivazione dell'accesso come utente root
    3. 3. Impostazione della versione del protocollo
    4. 4. Complessità della password

    SSH è uno dei protocolli più utilizzati per l'amministrazione del sistema su piattaforme Linux. È disponibile per molti sistemi operativi basati su Unix, Linux e MacOS. Si basa sul modello client-server, in cui 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 del server (sshd). Usa la sua chiave pubblica per autenticarsi al client che tenta di connettersi ad esso:

    In questo modo, il client ha la certezza di connettersi al server SSH corretto. Al termine, il client può accedere al server. Se utilizzi un client Windows, dovrai utilizzare strumenti come putty per connetterti al server. Sia il client che il server possono essere installati sullo stesso sistema, ciò significa che puoi utilizzare lo strumento client per accedere ad altre macchine o il tuo sistema può essere il server stesso a cui possono accedere altri. In tal caso il file di configurazione viene inserito 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:


    Nel caso in cui tu abbia entrambi i file sul tuo sistema, dovresti saggiamente scegliere quale file devi configurare. Nella maggior parte dei casi, è il server che dobbiamo configurare per la sicurezza in quanto apre la porta a un potenziale accesso 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 l'avvio automatico all'avvio. Il comando seguente controllerà lo stato sshd:

    $systemctl status ssh.service

    Oppure usa quello qui sotto:

    $systemctl status sshd.service

    Dallo screenshot possiamo vedere che il servizio è attivo e abilitato. È in funzione da 6 ore. Quando espandi la visualizzazione del terminale premendo la freccia destra, noterai che è in ascolto 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 usare il comando reload invece di quello restart. In questo modo abbiamo meno probabilità di essere disconnessi.

    Configurazione di SSH utilizzando le best practice

    Penso che sia giunto il momento di iniziare a configurare la configurazione del server SSH. Prima di sporcarci le mani con il file di configurazione SSH, dovremmo fare 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 dovessimo fare confusione con il file principale e rompere il nostro SSH, potremo utilizzare il file di backup per tornare alla normalità.

    1. Modifica della porta predefinita

    Il demone sshd per impostazione predefinita è in ascolto sulla porta 22 del server. Si consiglia di modificare questo valore con un altro numero in modo da ridurre l'ambito degli attacchi automatici tramite 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

    Rimuovere il commento dalla riga #Port 22 e modificare 22 con un altro numero di porta, non in uso sul sistema. Dobbiamo cambiarlo in 222 e riavviare il servizio. Ora usa il comando ssh con l'opzione p per specificare la nuova porta:

    $ssh [email protetta]_ip -p 222

    2. Disabilitare l'accesso come utente root

    Root è l'ultimo utente su qualsiasi sistema Linux con accesso a tutte le risorse del tuo sistema. Nel caso in cui non richiedi un accesso root rigoroso, dovresti disabilitare la funzione di accesso root sul tuo server. Per questo apri lo stesso file sopra:

    $sudo nano /etc/ssh/sshd_config

    e impostare il parametro PermitRootLogin su no. Ciò assicurerà che il server sarà protetto dagli attacchi casuali mirati all'account root. L'opzione predefinita è proibisci password che consente l'accesso basato sull'autenticazione con chiave pubblica ma nega gli accessi basati su password.

    3. Impostazione della versione del protocollo

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

    $cat /etc/ssh/sshd_config | Protocollo grep

    Nel caso in cui tu abbia un output vuoto, OpenSSH potrebbe probabilmente utilizzare la versione 2 come nel nostro caso. Un altro modo è utilizzare l'utilità di comando netcat:

    $nc host locale 22

    Esempio di output:

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

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


    Per verificare quale versione dei protocolli è in esecuzione su un server remoto, provare a connettersi ad esso utilizzando un client ssh con l'opzione -Q (query):

    $ssh -Q protocol-version [email _name

    L'immagine sopra mostra una versione SSH 2 durante l'accesso a un server Ubuntu ssh da Kali Linux.

    4. Complessità della password

    Le password deboli sono sempre vulnerabili allo sfruttamento, quindi le password vuote hanno maggiori probabilità di essere sfruttate. L'opzione PermitEmptyPasswords dovrebbe quindi essere impostata su no nel file sshd_config. Allo stesso modo, il numero di tentativi di accesso con password errata dovrebbe essere limitato per ridurre le possibilità di attacco di forza bruta. Ciò può essere ottenuto con l'opzione MaxAuthTries impostata su un valore inferiore come 3.


    Dall'immagine sopra possiamo vedere che quando impostiamo il valore MaxAuthTries su 3, ci viene negato l'SSH dopo tre password errate. Un altro importante aspetto della sicurezza è l'utilizzo dell'autenticazione a chiave pubblica per il login. I modelli di autenticazione basati su chiave sono meno vulnerabili agli attacchi di forza bruta. Allo stesso modo, possiamo utilizzare il modulo di autenticazione PAM per rafforzare ancora di più il server SSH.

    Conclusione

    In questa guida, abbiamo cercato di coprire i punti più importanti per proteggere un server SSH e riassumerli in quattro punti principali. Sebbene questa guida non sia completa, puoi anche trovare più aree per rafforzare ulteriormente il tuo server SSH. Per es. puoi provare ad aggiungere un messaggio banner per avvisare gli utenti dell'utilizzo del tuo sistema su SSH. Puoi anche negare l'accesso con una password e utilizzare l'autenticazione basata su chiave per l'accesso senza password. Un'altra cosa interessante è che puoi limitare il numero di utenti SSH e il loro tempo di connessione.