Rendere sicuro SSH

Rendere sicuro Ssh

Ssh è un servizio server che permette agli utenti correttamente autenticati di accedere alla propria shell Unix/Linux sul sistema attraverso una connessione remota, in modo da poter lavorare sulla macchina esattamente come se si trovasse davanti al server/computer. Il problema principale di questo demone è che per poter funzionare deve essere sempre attivo, con la conseguenza ovvia che un attaccante potrebbe provare a guadagnare una shell valida tramite un attacco a forza bruta o a dizionario (tecniche che abbiamo analizzato in precedenti argomenti). Anche scegliendo delle buone password, un attaccante molto paziente con un po’ di fortuna e con tanto tempo a disposizione alla fine potrebbe riuscire nel suo intento.

Per rendere ancora più sicuro il nostro server SSH, possiamo fare in modo che ci si possa connettere solo con una coppia di chiavi pubbliche/private. Così facendo rendiamo inutile ogni tentativo di accesso con le tecniche di brute force o a dizionario.

La prima cosa da fare è creare la propria coppia di chiavi, pubblica e privata.
Per farlo, basta lanciare il terminale sul proprio computer (non sul server al quale ci si vuole collegare) e andare alla directory .ssh della propria home, ovvero /Users/vostro_utente/.ssh o /home/vostro_utente/.ssh e qui digitare il comando:

 ssh-keygen -t dsa -f /Users/vostro_utente/.ssh/id_dsa -P 'vostra_passphrase'

Ovviamente occorre sostituire vostro_utente con il nome opportuno, sia nel path che nel comando.
Una nota a parte riguarda invece la parte finale del comando ‘vostra_passphrase’: occorre sostituire la parola ‘vostra_passphrase’ (deve stare tra le virgolette) con una parola facile da memorizzare, una sorta di password che sarà la stessa per tutti i server su cui sarà piazzata la chiave pubblica. E’ possibile anche lasciarla vuota, ossia due virgolette senza nemmeno uno spazio in mezzo, se siete amanti del pericolo, utilizzando il comando di cui sopra in questa forma:

 ssh-keygen -t dsa -f /Users/vostro_utente/.ssh/id_dsa -P ''

In questo caso il collegamento con i server su cui è posizionata la chiave pubblica avverrà senza la richiesta di nessuna password o passphrase. Fatelo solo a vostro rischio e pericolo, se siete assolutamente sicuri che nessuno possa usare il computer da cui vi collegate a vostra insaputa per andare a far danni sui server remoti.
A questo punto sono stati generati due documenti, la vostra chiave privata, id_dsa che non dovete assolutamente toccare, e la chiave pubblica id_dsa.pub, che ora andremo a piazzare sui server remoti che ci interessano.
Una volta copiato il documento id_dsa.pub sui server interessati, occorre inserire la propria chiave pubblica al posto giusto, nella cartella .ssh della home dell’utente che intendiamo utilizzare sul server remoto, assieme a quelle eventualmente già presenti di altri utenti.
Ad esempio, se vogliamo utilizzare l’utente root su un server Linux, la chiave pubblica dovrà essere inserita in /root/.ssh/authorized_keys. Nell’utente pippo su di un server Mac OS X, il percorso sarà invece /Users/pippo/.ssh/authorized_keys

# scp id_dsa.pub nome_server_remoto:/home/utente_remoto/ 
# ssh utente_remoto@nome_server_remoto (ora siamo sul server remoto!) 
> cat id_dsa.pub >> .ssh/authorized_keys 
> rm id_dsa.pub 
> exit (siamo tornati sul nostro pc) 
#

Tutto fatto, se ora provate a collegarvi al vostro server con il classico comando ssh pippo@nome_server.com vi verrà chiesta la vostra passphrase, più semplice da ricordare, o anche nulla se l’avete lasciata vuota.

Facendo così però l’accesso via password è ancora attivo. Dobbiamo disabilitarlo. Ecco come.

Aprite il file /etc/ssh/sshd_config sul server e assicuratevi che ci siano le seguenti righe. Aggiungetele se mancano o modificatele se già presenti:

RSAAuthentication yes 
PubkeyAuthentication yes 
X11Forwarding no 
UsePAM yes 
IgnoreUserKnownHosts no 
PasswordAuthentication no 
GatewayPorts no 
AllowTcpForwarding no 
KeepAlive yes 
DenyUsers utenti_senza_accesso_ssh #separati da spazio

Salvate il file e riavviate il demone Ssh. Se non avete commesso errori, al prossimo accesso al server via Ssh, in caso che non esista la chiave giusta (come nel caso di un attaccante, che non può averla dato che l’avete creata voi), non sarà possibile inserire la password, vanificando quindi ogni tentativo di accesso anche se si conoscesse la password dell’utente!

Nei prossimi articoli: securizzare le home directory, i firewalls, “bussare per entrare”