Linux

Installare e configurare un server SSH

openssh

Eccoci al dunque, si inizia a fare sul serio. OpenSSH. Cito da wikipedia: “OpenSSH (Open Secure Shell) è un insieme di programmi che rendono disponibili sessioni crittografate di comunicazione in una rete di computer usando il protocollo SSH. È stato creato come alternativa opensource al software proprietario Secure Shell.”

In poche parole, vi consente di collegarvi in remoto al vostro pc/server senza che i dati della vostra sessione vengano intercettati e decodificati, al contrario di quanto accade  con una sessione Telnet dove il flusso dati non è codificato ma trasmesso in chiaro.

Uno strumento di questo tipo è di una potenza eccezionale, pensate alla gestione di un server che si trova in un datacenter all’altro capo del globo, oppure più semplicemente alla possibilità di operare come se foste davanti al monitor del vostro pc di casa stando in spiaggia sotto l’ombrellone  (salvo rari casi, se avete fatto una cosa del genere avete dei seri problemi, sappiatelo 🙂 ) oppure al bar del centro commerciale sfruttando la connessione wifi gratuita per creare un ponte dati cifrato con l’adsl di casa per poi navigare tranquillamente. Per coloro che riterranno paranoie queste mie attenzioni, sappiate che le sessioni POP3 non sono crittografate, per cui tramite uno sniffer di pacchetti di rete (tipo wireshark) il vostro vicino di tavolino potrebbe spiare il vostro traffico dati e carpire informazioni sensibili, quali nomi utente e password di mail, dei vari social network, numeri di carte di credito e via dicendo. Creando invece un tunnel cifrato con SSH non correte nessun rischio.

Sono riuscito a convincervi e/o ad incuriosirvi? Ok, procediamo con l’installazione. I comandi di reperimento dei programmi fanno riferimento ad una distribuzione Debian based, per altre distribuzioni usate il gestore di pacchetti appropriato.

Installazione degli applicativi

Iniziamo installando sul server il pacchetto openssh-server ed il client ssh. Sul terminale da cui ci collegheremo, basterà installare solamente il client.

Digiteremo quindi sul server:

sudo apt-get install openssh-client
e
sudo apt-get install openssh-server

Per il lato client, basterà digitare

sudo apt-get install openssh-client

Configurazione

Il 99% del lavoro interessa il lato server, ed è a questo che ci rivolgeremo ora.
Iniziamo facendo una copia del file di configurazione originale del programma openssh-server, sshd è il nome del demone che viene lanciato all’avvio del sistema e che rimane in ascolto di eventuali richieste di connessione via client ssh, sulla base delle specifiche indicate nel file sshd_config, sito nella directory /etc/ssh/sshd_config

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
sudo chmod a-w /etc/ssh/sshd_config.original

Con il primo comando diciamo di creare una copia del file sshd_config e di nominarla sshd_config.original, con il secondo gli applichiamo i permessi in sola lettura.

Iniziamo quindi a modificare il file di configurazione, dando da terminale

sudo nano  /etc/ssh/sshd_config

Analizzando il file, tutto ciò che è preceduto dal carattere”#” viene considerato come un commento e dunque non preso in considerazione dal sistema.
Iniziamo quindi, con:

Disabilitare il login come amministratore

Il perché di questa scelta è semplice: pensate ai danni che un eventuale cracker potrebbe fare al vostro sistema se riuscisse a loggarsi come amministratore. Meglio consentire il login solo a normali utenti e poi se necessario, guadagnare permanentemente l’account di root con sudo-s (anche se non ve ne è affatto la necessità, per le normali funzioni di amministrazione basta sudo xxxxxx)
Nel nostro file di configurazione quindi, troviamo la riga

PermitRootLogin yes

e sostiuiamola con

PermitRootLogin no

Cambiare la porta in ascolto

Di default, sshd rimane in ascolto sulla porta TCP 22. Per motivi di sicurezza, è meglio cambiare questa porta con una non standard
Cambiamo quindi la riga

#Port 22

Con la seguente, se vogliamo che la porta TCP 2323 sia in ascolto

Port 2323

Ovviamente, sul router a cui è connesso il server va chiusa la porta 22 (se aperta) ed abilitata la 2323 TCP.
Sul pc client, per evitare ogni volta di specificare il collegamento a questa porta non standard, modificare il file di configurazione presente in /etc/ssh/ssh_config

sudo nano  /etc/ssh/ssh_config

troviamo la riga

#Port 22

e decommentiamola, modificandola in

Port 2323

In questo modo, il client saprà automaticamente a quale porta non-standard dovrà collegarsi.

Disabilitare il login mediante l’inserimento di username e password

Troviamo la riga

#PasswordAuthentication yes

e sostituiamola con

PasswordAuthentication no
(attenzione, il # non è volutamente presente)

Controlliamo poi che il login tramite chiavi SSH sia abilitato (se non lo fosse, facciamolo)

PubkeyAuthentication yes
RSAAuthentication yes

A questo punto, salviamo e chiudiamo il file sshd_config.

Rimanendo sul server, prepariamoci quindi alla

Generazione delle chiavi SSH

Le chiavi SSH vengono generate con il comando

ssh-keygen -t dsa

Verrà proposto un prompt per inserire una password di sicurezza, in caso di smarrimento delle chiavi o furto della macchina da cui ci si logga. E’ meglio inserirla, ed anche “robusta”, in quanto il cracker con le vostre chiavi in mano è padrone della/e vostre macchine. La password, rappresenta l’ultima forma di difesa contro un accesso non autorizzato, per il tempo di arrivare a casa e cambiare le chiavi di sicurezza.

A questo punto, nella directory ~/.ssh/ (attenzione, il prefisso “.” davanti ad una directory indica che è nascosta, ma è possibile visualizzarla da terminale oppure sul front-end grafico nautilus premendo Ctrl+H) avremo due files: id_rsa.pub (chiave pubblica, può essere tranquillamente distribuita a tutti) e id_rsa (chiave privata, da tenere segreta)

Le chiavi vanno generate sia sulla macchina server, sia su tutti i client da cui ci vogliamo collegare

Inserimento della chiave pubblica del client sul server

A questo punto, se non è già presente, sulla macchina server creiamo ed editiamo il file authorized_keys

sudo gedit ~/.ssh/authorized_keys

ed aggiungiamo il contenuto del file id_rsa.pub della macchina client
Rendiamo quindi eseguibile solo dal proprietario il file in lettura e scrittura

chmod 600 ~/.ssh/authorized_keys

In alternativa, è possibile copiare direttamente la chiave pubblica del client sul server dando sul pc client il comando
ssh-copy-id -i /home/<username>/.ssh/id_rsa.pub utente@indirizzo_ip

Riavvio del demone sshd

Riavviamo ora il demone sshd per fargli recepire tutte le modifiche apportate:

sudo /etc/init.d/ssh restart

in versioni più recenti, il comando è stato sostituito dal seguente :

sudo service ssh restart

Stabilire il collegamento alla macchina remota

Sul pc client digitare

ssh utente@indirizzo_ip o dominio

dove utente è il nome dell’utente di destinazione sulla macchina remota
esempio,

ssh –X marco@89.92.158.1

abilita l’inoltro del server grafico X e lancia il tunnelling ssh

Tipica schermata di login SSH

Schermata del 2014-10-11 08:36:24

Tips and tricks

Per impostare il messaggio di benvenuto all’avvio della sessione ssh, editare il file /etc/motd con i permessi da root ed editare il file di configurazione /etc/ssh/sshd_config ed abilitare la sezione Banner indicando il nome del file (/etc/motd). Inserire dunque in quest’ultimo il messaggio di benvenuto che verrà visualizzato ad ogni login.
Per mountare via ssh una directory remota per averla disponibile in locale senza ricorrere ad scp, è necessario installare il pacchetto sshfs tramite apt-get
Una volta installato, per montare la directory remota digitare:

sshfs -o allow_other user@remotehost:/mountpoint_remoto/ /mountpoint_locale

esempio :

sshfs -o allow_other marco@10.0.0.120:/media/disco_USB/BT/ /media/samba

Per inviare o ricevere un file tramite ssh utilizzare scp

copia dal client al server:
scp nomefile nomeutenteserver@indirizzo:/percorso/
esempio:
scp nodes.dat emule@10.0.0.120:/home/emule/.aMule/

copia dal server al client
scp nomeutenteserver@indirizzo:/percorso/nomefile /percorsolocale/

Annunci
Standard