Rendere sicuro SSH con certificato RSA

Una volta configurato il nostro server per ricevere connessioni SSH e poterlo così gestire da remoto, potremmo sentire la necessità di renderlo più sicuro. Forse perché il nostro server comincia a gestire una certa quantità di servizi importanti o perché Fail2Ban ci indica che il nostro servizio SSH è costantemente sotto attacco. Quindi, come puoi rendere sicuro l’accesso SSH? Ebbene possiamo configurare OpenSSH affinché accetti connessioni in ingresso solo tramite autenticazione con certificato di sicurezza. Tralasciando la semplice e potenzialmente craccabile password in chiaro.

Come configurare la chiave d’accesso in OpenSSH

Il primo passo per mettere in sicurezza SSH è generare la coppia di chiavi con le quali andremo ad effettuare l’autenticazione. Questo possiamo farlo o dal server o meglio ancora da un client con un sistema operativo Linux installato.

Per generare le chiavi di accesso diamo sul nostro client i seguenti comandi:

  • mkdir ~/.ssh
  • chmod 700 ~/.ssh
  • ssh-keygen -t rsa

 

Il terzo comando che abbiamo dato avvierà un tool che genererà le chiavi di accesso con algoritmo di sicurezza RSA, questo tool ci farà una serie di domande:

  • Enter file in which to save the key (/home/b/.ssh/id_rsa)
  • Enter passphrase (empty for no passphrase)
  • Enter same passphrase again

 

La prima richiesta è di inserire il percorso nel quale vogliamo vengano salvate le chiavi d’accesso, inseriamolo e premiamo invio. La seconda richiesta riguarda la passphrase, scegliamone una piuttosto robusta (fate riferimento ai suggerimenti di fine articolo nell’articolo Craccare password: Come fanno e come proteggersi) poiché questa servirà contro il furto della chiave come ti spiegherò tra poco. La terza richiesta è la conferma della passphrase. Inserite queste poche informazioni, avverrà una elaborazione più o meno rapida e il sistema ci informerà che la coppia di chiavi è stata salvata nella directory da noi indicata. I nomi delle chiavi saranno id_rsa e id_rsa.pub

NOTA: Va detto che le chiavi RSA possono crittografare il traffico in diversi bit, più bit ci sono e più la crittografia sarà complessa. Di default ssh-keygen usa la crittografia a 2048bit se vogliamo aumentare la nostra sicurezza il terzo comando sopra elencato dovrà essere così scritto:

  • ssh-keygen -t rsa -b 4096

Questo creerà una coppia di chiavi a 4096 bit anzichè 2048, il sistema impiegherà più tempo poi ad elaborare le chiavi (quache min). Fatto questo ora dobbiamo trasferire la chiave sul server.

Rendere sicuro SSH: Blindiamo la nostra porta

La chiave che dobbiamo trasferire sul nostro server è la chiave pubblica, id_rsa.pub, dobbiamo copiare tale chiave nella cartella /home/nomeutente/.ssh, la chiave deve essere ovviamente copiata nella directory di un utente sudoer e abilitato alla connessione SSH.

Per copiare la chiave hai diversi modi. Puoi metterla in una pen drive, collegarla al server e copiarla con il comando cp. Puoi creare una cartella condivisa e copiarla li dentro. Oppure è possibile utilizzare il comando ssh-copy-id <username>@<host>, sostituendo username con il nome dell’utente sudoer abilitato alla connessione SSH e ad Host il nome del Server. Io ti consiglio di copiarla fisicamente sul server, senza usare cartelle condivise o passare per reti poco sicure.

Se abbiamo copiato la chiave a mano nella directory dobbiamo sostituirla a quella di default del sistema, a tal fine possiamo dare i seguenti comandi:

  • cp authorized_keys authorized_keys_bk
  • cat id_rsa.pub >> authorized_keys

Con questi due comandi effettuiamo prima un backup della vecchia chiave e poi autorizziamo la nostra nuova chiave per la connessione sicura. Fatto questo passiamo alla configurazione del Server SSH, apriamo quindi il file di configurazione in /etc/ssh/sshd_config con il comando nano /etc/ssh/sshd_config e accertiamoci che queste tre opzioni siano abilitate

  • PubkeyAuthentication yes
  • RSAAuthentication yes
  • AuthorizedKeysFile /etc/ssh/%u/authorized_keys

Salviamo il file con la combinazione Ctrl+o e usciamo con Ctrl+x e riavviamo il servizio con il comando sudo service ssh restart.

Primo accesso e test

Ora effettuiamo un primo accesso con la nostra nuova configurazione, se il file id_rsa è nella nostra Home directory siamo a posto, altrimenti per collegarci dovremo usare l’opzione -i per specificare un file id, es:

  • sudo ssh -l amministratore -i /home/utente/cartella/id_rsa nomeserver

Alla pressione del tasto invio prima di effettuare la connessione ci verrà chiesta la Passphrase della chiave RSA, per l’utilizzo. La passphrase, impedisce l’utilizzo della chiave a chi non conosce la passphrase o in caso di furto. Per questo bisogna sceglierne una robusta, affinché non la si trovi usando delle password di uso comune o un sistema di Brute Force o a dizionario.

Effettuato l’accesso correttamente possiamo disabilitare il metodo di autenticazione con password, quindi riapriamo il file /etc/ssh/sshd_config e disabilitiamo la voce PasswordAuthentication impostandola su no salvando il file e riavviando Openssh.

Troubleshooting e suggerimenti

Se abbiamo la nostra cartella Home criptata il servizio SSH ovviamente non può leggere la nostra chiave authorized_keys, perché sarà protetta fino al nostro corretto accesso.

Per ovviare a tale problema creiamo una cartella fuori dalla nostra Home ad esempio in /etc/ssh/nomeutente, sostituendo nomeutente con il nostro nome utente, e spostando il file authorized_keys in questa directory. La cartella deve avere i permessi impostati su 755 e ne deve essere proprietario l’utente SSH. Il file authorized_keys deve avere dei permessi più restrittivi, 644 e deve essere proprietario sempre l’utente SSH, i comandi per fare tutto ciò in ordine sono:

  • mkdir /etc/ssh/nomeutente
  • chmod 755 /etc/ssh/nomeutente
  • chown nomeutente:nomeutente
  • mv /home/nomeutente/.ssh/authorized_keys /etc/ssh/nomeutente/
  • chown nomeutente:nomeutente
  • chmod 644 /etc/ssh/nomeutente/authorized_keys

Le operazioni di chmod e chown sul file authorized_keys possono risolvere anche problemi dovuti a un accesso negato da parte del Server generalmente indicate da un messaggio di Permission Denied (Publickey) nel terminale.

Un altro problema potrebbe essere quello legato all’agente di autenticazione che non gestisce la nostra chiave di autenticazione RSA, generalmente segnalato con un messaggio di errore Error: Agent admitted failure to sign using the key, nel terminale, per risolvere tale problema dopo aver copiato correttamente la chiave pubblica nel file authorized_keys diamo il seguente comando:

  • ssh-add

Fatto questo abbiamo finito di rendere sicuro il nostro accesso SSH.

 

Buon lavoro