SSH, il coltellino svizzero del mondo *nix, e non solo .
Cominciamo dunque, anzitutto che cos’è sta roba??
Forse una specie di sibilo?? O piuttosto un invito al silenzio??
SSH™ sta per Secure Shell ed è un protocollo di rete che permette ad uno o più pc ( detti clients ) il collegamento in modalità remota ad un altra macchina ( detta server ). Esistono [...]
Cominciamo dunque, anzitutto che cos’è sta roba??
Forse una specie di sibilo?? O piuttosto un invito al silenzio??
SSH™ sta per Secure Shell ed è un protocollo di rete che permette ad uno o più pc ( detti clients ) il collegamento in modalità remota ad un altra macchina ( detta server ). Esistono diversi protocolli e/o software al giorno d’oggi che permettono di collegarsi e controllare da remoto altre macchine, e sono utilizzatissimi nel campo ormai diffuso della cosiddetta teleassistenza.
A differenza di rlogin o telnet, o di VNC e RDP, giusto per citarne alcuni sia da riga di comando che grafici, SSH cripta la sessione di login, impedendo ad eventuali intrusi di scoprire le password che in questi protocolli viaggia “in chiaro”.

Avvio di una sessione ssh – lato Windows client
Ad onor del vero, SSH è nato come evoluzione dei metodi tradizionali di collegamento “via shell remota” ad altri sistemi ma fornisce anche valide alternative ai comuni tool di gestione del filesystem, ad esempio scp fa le veci di ftp. In questo periodo, in cui tanto si parla di pirateria informatica, usando dei metodi sicuri per collegarsi ad altri sistemi in remoto, si corrono molti meno rischi.

Accettazione della chiave del server SSH e richiesta password
Ottimo ma … come funziona?
Abbiamo appena detto che SSH (o Secure SHell) è un protocollo che permette di stabilire connessioni sicure tra diversi sistemi,e in particolare è il computer client ad iniziare la connessione con il computer server.

Avvio di una connessione in Tunnel SSH
Ecco i punti forti di SSH in fatto di protezione:
-
MEMORIA DEL PASSATO: Dopo la prima connessione il client verifica di collegarsi allo stesso server durante le sessioni successive.
-
CIFRATURA: Le informazioni di autenticazione sono trasmesse al server, per esempio username e password, in forma cifrata.
-
SICUREZZA: Durante la connessione i dati “viaggiano” utilizzando una cifratura ad almeno 128 bit, in modo da rendere molto complesso decifrarli ed avvalersene.
-
FORWARDING: Lato client si può lanciare le applicazioni X11 applicazioni direttamente da console, ottenendo il cosiddetto X11 forwarding, e cioè un’ interfaccia grafica remota e sicura.

Sessione TightVnc in tunnel SSH
Il protocollo SSH è progettato per cifrare tutto il traffico in ingresso/uscita ed è usato con successo per cifrare altri protocolli diversamente poco sicuri mediante l’uso del port forwarding come RDP, aumentando la sicurezza dei dati e del sistema in generale.
Una generica distribuzione Linux include i pacchetti:
-
OpenSSH generico
-
Server OpenSSH
-
OpenSSH e client

Sessione ssh con accettazione della chiave su linux (bella la console trasparente eh?)
Di base SSH è installato di default lato client in tutte o quasi le distribuzioni, ma se così non fosse ecco qui un elenco di comandi per installarlo:
-
FEDORA/RHEL: yum -y install ssh-clients openssh openssh-server
-
DEBIAN/UBUNTU: apt-get install ssh ssh-server
-
ARCHLINUX/FRUGALWARE: pacman -Sy ssh openssh
-
DA SORGENTE (PER TUTTE LE DISTRO)
-
scaricare il pacchetto openssh.x.y.tar.gz da google
-
scompattare in una directory a scelta il pacchetto con tar zxvf openssh.x.y.tar.gz
-
accertarsi di avere installato le relative dipendenze di ssh (le librerie openssl in modo particolare) e di avere il compilatore e le librerie di sviluppo (gcc -v e locate ssl vi toglieranno i dubbi ;))
-
cd openssh.x.y && ./configure && make
-
su (oppure sudo)
-
make install
-
-
GENTOO: emerge openssh
-
MANDRIVA: urpmi openssh
-
SUSE: smart –install ssh-clients openssh openssh-server
-
SLACKWARE: slapt-get (swaret) –-install openssh
-
SABAYON: equo install ssh
-
e su altri OS:
-
MAC: scaricare da openssh il pacchetto ssh ed installarlo mediante la routine standard
WINDOWS: Scaricare Freesshd oppure Openssh for Windows per il lato server e putty o windows secure shell per il lato client.
-
-
OpenSSH richiede l’installazione delle OpenSSL perchè queste ultime forniscono numerose librerie per la cifratura che consentono a OpenSSH di garantire comunicazioni cifrate.
Ancora non sono convinto, perché conviene usarlo?
L’informatica è libertà, è spesso una questione di scelte in base a vantaggi più o meno evidenti oppure a mere necessità far uso di un sistema o un protocollo, occorre però tener conto dei sempre più minacciosi pericoli che minacciano il traffico di rete.

Client autenticato – ora bisogna fornire la password!
Ad esempio si possono citare rilevazione dei pacchetti, falsi DNS e IP o ancora la diffusione di false informazioni di instradamento. Semplificando, queste minacce possono essere raggruppate in due categorie:
-
Imitazione di un host particolare — con questa strategia, un sistema intercettante finge di essere il destinatario di un messaggio. Se la strategia funziona, il client non si accorge dell’inganno e continua a comunicare con il sistema intercettante come se il proprio traffico raggiungesse con successo la destinazione desiderata.
-
Intercettazione delle comunicazioni tra due sistemi — questo scenario prevede l’esistenza di una terza parte in qualche punto della rete tra le due entità in comunicazione. Questa terza parte esegue una copia delle informazioni trasmesse tra i due sistemi, per conservarle o inviarle modificate al destinatario originale.
Utilizzando SSH per login remoti e per la copia dei file, le minacce alla sicurezza si riducono notevolmente. La firma digitale di un server fornisce la verifica d’identità. La comunicazione client/server non può essere utilizzata, se intercettata, perché ogni pacchetto è cifrato. I tentativi di assumere l’identità di uno dei due sistemi comunicanti non funzioneranno, poiché ogni pacchetto è cifrato con un codice conosciuto solo dai sistemi locale/remoto.
Uhm … Ok, mi descrivi come avviene una connessione SSH?
L’integrità di una comunicazione SSH tra due host è garantita da quanto descritto di seguito:
-
Come prima cosa si crea un livello di trasporto sicuro, in modo da certificare al client che sta comunicando con il server corretto.
-
Si cifra la comunicazione tra il client e il server con l’uso di un cifratore simmetrico.
-
Il client si autentica al server senza preoccuparsi che le informazioni di autenticazione vengano compromesse.
-
Una volta che il client si è autenticato al server tramite la connessione, è possibile utilizzare in modo sicuro i vari servizi usati, per esempio una sessione interattiva della shell, le applicazioni X11 e le porte TCP/IP immesse in un tunnel.
E di livello in livello, la sicurezza aumenta …
Livelli? Spiegati meglio …
Il protocollo SSH consente a ogni programma client/server di comunicare in modo sicuro e di essere utilizzato in maniera interscambiabile. Nonostante esistano due diverse varietà di SSH ormai si tendo ad utilizzare solo la versione 2, che garantisce la sicurezza maggiore.
La versione 1 contiene diversi algoritmi di cifratura brevettati, molti dei quali scaduti, e una “falla” nella sicurezza che potenzialmente permette di inserire informazioni nel flusso di dati. La suite OpenSSH delle distribuzioni *nix/BSD utilizza la versione 2.0 di SSH di default, con retrocompatibilità con la versione 1. Come detto sopra, le versioni 1 e 2 del protocollo SSH aggiungono livelli di sicurezza. Ogni livello offre il proprio tipo di protezione.
Livello di trasporto
Lo scopo principale del livello di trasporto è quello di facilitare una comunicazione sicura tra due host al momento dell’autenticazione e subito dopo, grazie all’uso del protocollo TCP/IP, cifrando e decifrando i dati, verificando che il server corrisponda alla macchina corretta per l’autenticazione e fornendo la protezione integrale di pacchetti di dati in fase di trasmissione e ricezione e fornirnendo la compressione dei dati, aumentando la velocità di trasferimento delle informazioni.
Ecco cosa succede durante la creazione del tunnel:
-
Scambio delle chiavi
-
Algoritmo della chiave pubblica
-
Algoritmo della cifratura simmetrica
-
Algoritmo per l’autenticazione del messaggio
-
Algoritmo hash
Durante lo scambio delle chiavi il server si fa riconoscere dal client tramite una chiave host. Alla prima connessione ad un nuovo server OpenSSH autorizza il client ad accettare la chiave host di quest’ultimo , mentre nelle connessioni successive, la chiave host del server può essere verificata con una versione salvata sul client, in modo che il client sia “sicuro” di comunicare con il server corretto. Ultimato il passaggio iniziale delle chiavi che genera un valore hash usato per gli scambi ed un valore segreto condiviso, i due sistemi iniziano immediatamente a calcolare nuove chiavi e algoritmi per proteggere l’autenticazione e i dati futuri inviati tramite la connessione. Dopo la trasmissione di una certa quantità di dati con l’utilizzo di una chiave e un algoritmo particolari, a seconda dell’implementazione di SSH, avviene un ulteriore scambio di chiavi, che genera a sua volta un’ulteriore serie di valori hash e di valori segreti condivisi, così da costringere un cracker (… e non un hacker ;-)) a rideterminare continuamente tali valori, dopo ogni scambio delle chiavi.

Eccoci autenticati in remoto !! Si può anche vedere la data dell'ultimo login
Autenticazione
Costruito il tunnel sicuro per inviare le informazioni da un sistema all’altro, il server indica al client i diversi metodi di autenticazione supportati, ed il client tenta di autenticarsi ad esso tramite uno dei metodi supportati. I server possono essere configurati per autorizzare diversi tipi di autenticazione, questo metodo offre un ottimo sistema di controllo a entrambe le parti. Il server stabilisce i metodi di cifratura supportati e il client può scegliere l’ordine dei metodi di autenticazione da utilizzare. Grazie alla sicurezza del livello di trasporto SSH, è possibile utilizzare senza problemi perfino metodi di autenticazione apparentemente non sicuri, come l’autenticazione basata sull’host. La maggior parte degli utenti che richiedono una shell sicura utilizza una password per l’autenticazione. Dato che la password viene cifrata durante lo spostamento sul livello di trasporto, può essere inviata in modo sicuro attraverso qualsiasi rete.
Connessione
Dopo un’autenticazione corretta su un livello di trasporto SSH, vengono aperti dei canali mediante la “multiplazione”[1] della singola connessione tra i due sistemi. Ognuno di questi canali gestisce la comunicazione per una diversa sessione di terminale, le informazioni di X11 inviate o qualsiasi altro servizio che cerca di utilizzare la conessione SSH.
Entrambi i client e i server possono creare un nuovo canale. A ogni canale viene assegnato un numero diverso per ogni estremità della connessione. Quando il client tenta di aprire un nuovo canale, viene inviato, insieme alla richiesta, il suo numero per il canale. Questa informazione viene archiviata sul server e utilizzata per indirizzare una particolare comunicazione di servizio per il canale. In questo modo i diversi tipi di sessione non si disturbano a vicenda e i canali possono essere chiusi senza interrompere la connessione primaria SSH tra i due sistemi.
I canali supportano inoltre il controllo del flusso, che consente loro di inviare e ricevere i dati ordinatamente. In questo modo i dati non vengono inviati attraverso il canale finché il client non riceve un messaggio che lo avverte che il canale è in grado di ricevere.
Il client e il server negoziano le caratteristiche di ogni canale automaticamente, a seconda del tipo di servizio che il client richiede e del tipo di connessione di rete che l’utente usa. I diversi tipi di connessioni remote possono essere gestiti in modo flessibile senza dover modificare l’infrastruttura di base del protocollo.
Vediamo di rendere la Shell più che sicura
Un’interfaccia a linea di comando sicura è solo uno dei tanti modi in cui è possibile usare una SSH.

Una volta connessi, si può operare come seduti alla console di quella macchina
Considerata la larghezza di banda, le sessioni X11 possono essere indirizzate tramite un canale SSH. Oppure, utilizzando il TCP/IP forwarding, le connessioni di porta un tempo non sicure tra sistemi diversi possono essere mappate su canali SSH specifici.
X11 Forwarding
Aprire una sessione X11 tramite una connessione SSH stabilita è facile quanto avviare un programma X su una macchina locale. Quando un programma X viene eseguito dalla shell, il client e il server SSH creano un nuovo canale sicuro, e i dati del programma X vengono inviati tramite questo canale alla vostra macchina client.
X11 forwarding può essere molto utile.
Port Forwarding
Con SSH potete rendere sicuri protocolli TCP/IP altrimenti insicuri mediante il port forwarding. Con questa tecnica, il server SSH diventa un passaggio cifrato al client SSH.
Il port forwarding consiste nel mappare una porta locale sul client verso una porta remota sul server. SSH vi permette di mappare qualsiasi porta dal server verso qualsiasi porta sul client. I numeri delle porte non devono essere uguali per funzionare.
Per creare un canale TCP/IP di port forwarding che attenda le connessioni sull’host locale, utilizzate il seguente comando:
|
ssh -L local-port:localhost:remote-port username@hostname |
Questo esempio lo si può usare per controllare da remoto un server chiamato linux utilizzando il mitico webmin tramite una connessione cifrata, col comando seguente:
|
ssh -L 2100:localhost:10000 user@linuxserver |
Impostato il canale per il port forwarding tra le due macchine, si setta il client per usare la porta 2100 sull’host locale per controllare la macchina remota e gestirne tutti, ma proprio tutti gli aspetti… Qualsiasi richiesta inviata alla porta 2100 sul vostro sistema sarà indirizzata in modo sicuro al server linux e chiamando il browser sulla posta 2100 si otterrà la schermata di amministrazione.
Se sul server linux non fosse in esecuzione un demone server SSH, ci si può collegare tramite SSH a una macchina della stessa rete e quindi rendere sicura quella parte della connessione avvenuta tramite reti pubbliche. È tuttavia necessario un comando leggermente diverso:
|
ssh -L 2100:localhost:10000 users.it.net |
In questo esempio, inviate la vostra richiesta dalla porta 2100 sulla vostra macchina, tramite la connessione SSH sulla porta 22 a users.it.net.

Accesso remoto su webin tramite porta 2100
A questo punto, users.it.net si connette alla porta 10000 su serverlinux per permettervi di controllare la macchina. Con questa tecnica, solo la connessione tra il vostro sistema e users.it.net è sicura.

La schermata principale di webmin
Il port forwarding può risultare particolarmente utile per ricevere informazioni in modo sicuro tramite i firewall di rete.

Eccoci qua, connessione remota sicura, copia dati sicura e controllo remoto tramite VNC... WOW!
Se firewall è configurato per consentire il traffico SSH tramite la porta standard (22), ma blocca l’accesso tramite le altre porte, una connessione tra due host che usano porte bloccate è comunque possibile se si reindirizza la comunicazione tramite una connessione SSH. A questo punto spero di avervi dato un’idea di quel che questo vero e proprio “network tuttofare” è in grado di offrirvi, e non mi resta altro che dirvi …
Enjoy ssh people