Questa guida è stata verificata solo con versioni obsolete di Ubuntu, potrebbe non essere più valida. Vuoi contribuire ad aggiornarla? Clicca qui!

Problemi in questa pagina? Segnalali in questa discussione

Introduzione

Lo scopo di questa guida è quello di:

Al termine di questo tutorial, saremo in grado di connettere al proprio home computer qualunque altro PC.

In questa guida si assume che l'utente abbia un router/firewall e che sappia come aprirne le porte, che possa inoltre trasportare la propria chiave privata ad esempio tramite una penna USB o un CD, o qualunque altro tipo di supporto di memorizzazione mobile

Queste istruzioni sono state testate su Ubuntu Dapper e Edgy, ma in teoria dovrebbero essere usabili su qualunque altra Linux box (a esclusione di specifici comandi).

In realtà non c'è una ragione per criptare il traffico VNC, dato che è codificato e molte volte criptato e, per poter sniffare il traffico, l'attaccante dovrebbe avere accesso a entrambi i computer connessi. Pertanto, non ci sarebbe la necessità di crittare il traffico VNC; in ogni modo, ci sono perlomeno un paio di buone ragioni per attuare questa tecnica:

  1. Incrementare la sicurezza. L'attaccante deve compromettere diversi livelli di sicurezza per danneggiare il sistema e l'SSH è un livello ulteriore.
  2. Meno porte esterne aperte. Usando il metodo qui descritto, non c'è bisogno di lasciare il server VNC in ascolto sulle porte esterne ma solo su quelle interne (in altre parole il router può bloccare la porta 5900).
  3. l'unico servizio che gli attaccanti possono cercare di sfruttare per compromettere la macchina è l'SSH ma usando un sistema a chiave pubblica/privata questo diventa davvero difficile, a meno che queste non ci vengano rubate.

Generalmente il protocollo VNC non è un protocollo crittato (può esserlo, ma questo non è un aspetto che verrà trattato nell'articolo). Questo significa che ogni pacchetto che attraversa Internet può essere intercettato (ad esempio mediante schede di rete funzionanati in modalità promiscua) e letto da chiunque utilizzi un packet sniffer. Un software scritto in Perl chiamato Chaosreader http://www.brendangregg.com/chaosreader.html permette lo sniffing del traffico e il replay dei caratteri digitati quasi in real time. Questa è la ragione per la quale si effettua un tunnel VNC over SSH.

Installazione di SSH

Per prima cosa installare OpenSSH client e server, da terminale digitare:

sudo apt-get install openssh-server openssh-client 

Generare Chiave Pubblica e Privata

Prima di impostare SSH per usare le chiavi pubblica e privata, dovremo crearne un nostro paio.

Fare sempre molta attenzione a come scegliere la password.

È bene ricordare di non utilizzare una passphrase identica alla password usata per l'account root, altrimenti significherebbe fornire privilegi illimitati a colui che ne venisse in possesso. L'ssh-keygen suggerisce una passphrase di almeno 10 - 30 caratteri. Un modo semplice ma efficente per generare una passphrase è creare una frase strana e per strana intendo una frase che non abbia senso compiuto, ad esempio:

Saturno è in rotta di collisione con un pesce giallo che inciampa in un termosifone, mentre fuori ci sono 40 gradi di longiutudine.

Ora prendiamo la prima lettera di ogni parola punteggiatura compresa e creiamo la seguente stringa di caratteri:

Sèirdccupgciiut,mfcs4gdl.

Ora, per rendere la frase un po' più sicura, possiamo convertire lettere in numeri e/o simboli, trasformare maiuscole in minuscole a piacimento, ad esempio:

s31rd77up9711ut,mfcsa9dl.

S: s
è: 3
i: 1
c: 7
g: 9
4: a

Questa è solo un'idea che mi piace usare, tuttavia qualunque altro modo di procedere può essere ritenuto valido.

Torniamo alla generazione delle chiavi. Per prima cosa è opportuno creare una directory nella quale memorizzarle, dopodichè avvieremo ssh-keygen.

Quanto segue deve essere fatto dall'utente che vuole effettuare il login tramite SSH, non dall'utente root.

mkdir -p ~/.ssh
chmod 700 ~./ssh
cd ~/.ssh
ssh-keygen -t rsa

Dovrebbe apparire qualcosa di simile a questo:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/USER/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/USER/.ssh/id_rsa.
Your public key has been saved in /home/USER/.ssh/id_rsa.pub.
The key fingerprint is:

USER deve essere rimpiazzato con l'attuale username. Ora la chiave privata è chiamata id_rsa e la chiave pubblica è id_rsa.pub. Quindi necessiteremo di entrambe le chiavi per effettuare il login. La chiave pubblica verrà conservata nella cartella nascosta nella directory dell'utente:

/home/user/.ssh/

Mentre la chiave privata verrà memorizzata su un dispositivo di memorizzazione portatile che poi l'utente può portare con se. Per conformarsi alla configurazione di default di un qualunque ssh server, dovremo allegare la chiave pubblica a un altro file:

cat ~/.ssh/id.pub >> authorized_keys
chmod 600 authorized_keys

Ora siamo pronti a configurare sshd.

Configurazione demone SSH

Prima di configurare il server ssh, abbiamo ancora un paio di cose su cui riflettere. Da dove ci connetteremo al nostro computer? Dal lavoro, da scuola? Da dove ci connetteremo, permetteranno le connessioni verso l'esterno su qualunque porta? La risposta all'ultima domanda è probabilmente negativa. Nella mia università le connessioni in uscita sulle porte <1024 sono bloccate, eccezion fatta per servizi quali DNS, HTTP, HTTPS. Tuttavia le porte con alto valore tendono a non essere chiuse. La porta 5900, pur essendo maggiore di 1024, viene tendenzialmente chiusa, ma una porta quale la 59000 non è bloccata.

Queste informazioni sono molto importanti perchè dobbiamo conoscere su quale porta il server ssh deve restare in ascolto.

Riporto alcune linee guida, da non applicare in tutte le situazioni:

Nel mio caso ho un web server in ascolto sulla porta 80, sessione SSL sulla porta 443, quindi queste alternative non sono tali per me. A titolo d'esempio ho scelto la porta 59000.

Stabilite delle linee guida possiamo ora modificare la configurazione di SSH per renderla un po più sicura, aggirando i filtri sulle porte per permettere la connessione da scuola o dal lavoro.

Backup sshd_config

Come primo passo facciamo un backup della configurazione di SSH:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.working

Ora usando un qualunque editor di testo, ad esempio nano, aprire il file /etc/ssh/sshd_config:

sudo nano /etc/ssh/sshd_config

Dobbiamo apportare alcuni cambiamenti. Anzitutto occorre trovare la linea:

port 22

porta di default sulla quale resta in ascolto il server SSH, occorre cambiarla per quanto detto precedentemente con:

port 59000

Assicurarsi che non ci siano # prima del numero della porta. Non dobbiamo necessariamente scegliere la porta 59000 ma ricordando quanto detto prima...

Disabilitiamo i login remoti con l'account di root

Per disabilitare i login remoti con l'account root cercare la riga:

PermitRootLogin yes

cambiamo il

yes

con un

no

Sebbene di default Ubuntu non abilita l'account di root, resta comunque una buona idea disabilitare il login da remoto con i permessi e priviligi disponibili all'account root.

Disabilitare la password di autenticazione

Disabiliteremo tutte le password di autenticazione. Questa scelta è stata fatta per un paio di ragioni:

Cerchiamo la riga:

#PasswordAuthentication yes

e cambiamola con:

PasswordAuthentication no

Attenzione è stato rimosso

#

Riavviare il server SSH:

sudo /etc/init.d/ssh restart

Configurare Remote Desktop VNC

Questo passo è davvero semplice. Usando il menu andare alla voce System -> Preferences -> Remote Desktop. Un dyalog box si aprirà, selezionare i seguenti check boxes:

Non selezionare il check box "Ask for your confirmation", altrimenti non sarà possibile accedere da remoto. Scegliere una password il più possibile robusta.

Selezionare close e vino-server è configurato.

Risolvere il problema dell'IP dinamico

Si presuppone che l'utente abbia un IP dinamico.

A meno che non si abbia a disposizione un proprio domain name e configurato il proprio computer affinchè risolva le queries indirizzate ad esso e, a meno che non si paghi per avere un IP statico. Occorre servirsi degli strumenti che permettano di creare un proprio hostname gratuitamente.

Andare sul sito di DynDNS ad esempio https://www.dyndns.com/services/dns/dyndns/, cercare la voce sign up for a "Free Dynamic DNS account". Con questo ci viene permesso di creare un virtual domain name partendo da uno dei loro domini (ad esempio: mycomputer.dyndns.org). In questo modo quando ci si vorrà connettere al proprio computer da qualunque luogo, potremo semplicemente scrivere quell'indirizzo piuttosto che l'IP della nostra macchina che tra altro è dinamico.

A titolo informativo, esiste un client *nix con il compito di informare i server DynDNS quando la propria macchina cambia IP. Lo si può reperire al seguente indirizzo https://www.dyndns.com/support/clients/.

Portable Solutions

Per connettersi alla propria macchina da remoto analizzeremo ancora un paio di cose.

Alcuni esempi di questo software sono:

Putty: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html. Un fantastico strumento, appunto un ssh-client che rende usabile ssh su macchine Windows.

Puttygen: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html. Software necessario per trasformare la nostra chiave id_rsa nel formato usato da Putty .ppk.

TightVNC Viewer: http://www.tightvnc.com/download.html. Questo è un client per Windows (ne esiste anche una versione usabile per Linux). La versione tightvnc-X.X.X_x86_viewer.zip non richiede di essere installata pertanto una volta scompattata può essere copiata su un qualunque portable drive. Di questo software esistono delle alternative più che valide, come UltraVNC e RealVNC.

Chicken of the VNC: http://sourceforge.net/projects/cotvnc/. Questo è un client piuttosto famoso per Mac OS X.

Scelto il software da usare sul portable drive, dobbiamo:

Fatto ciò occorre importare la chiave in Putty, ma per far questo avremo bisogno di puttygen.exe memorizzato in precedenza anchesso sull'USB drive:

puttygen.exe genera un altra chiave pubblica. Questa è identica a quella memorizzata sul nostro home computer.

Da notare che è sempre possibile partendo dalla propria chiave privata ricostruire la propria chiave pubblica, ma non è possibile il contrario.

Impostare PuTTY per il port forwarding

Aprire il drive USB , avviare putty.exe ed eseguire le seguenti operazioni:

Avviare una sessione SSH da un client *nix

Qualora il login remoto non venga effettuato da una macchina Windows, è bene ricordare che l'SSH-client è installato di default pertanto prima di avviare la sessione SSH ricordarsi di copiare la propria chiave privata, nel proprio profilo:

sudo cp /media/USBdrive/id_rsa ~/.ssh/

fatto ciò, modificare i permessi sulla chiave appena copiata in modo da renderla usabile solo all'utente:

sudo chmod 600 ~/.ssh/id_rsa

avviare la sessione SSH:

sudo ssh -p 59000 USER@mycomputer.dyndns.org -L 50000:127.0.0.1:5900

USER deve essere rimpiazzato con il proprio username.

Impostare Chicken of the VNC per il port forwarding

Avviare Chicken of the VNC, pannello Connessione | Nuova Connessione Al pannello Connetti selezionare:

Incrementare le performance del Client VNC

Non aspettiamoci connessioni velocissime, VNC è abbastanza lento. Certamente è possibile incrementarne le performance:

Conclusione

SSH è una grande risorsa per rendere sicure le comunicazioni. Per ogni protocollo TCP è possibile il forwarding in questo modo (sia esso FTP, POP, HTML, SAMBA). Ci sono molti usi per per il tunneling SSH questo tutorial altro non è che la punta di un iceberg.

Ulteriori risorse

SSH

VNC

Chicken of the VNC


CategoryServer CategoryDaRevisionare CategoryInternet CategorySicurezza

InternetRete/ConfigurazioneRete/Vnc/CifraturaSsh (l'ultima modifica è del 01/05/2024 00.40.10, fatta da andreas-xavier)