## page was renamed from Server/InternetRete/ConfigurazioneRete/Vnc/CifraturaSsh ## page was renamed from Server/VNCoverSSH ## da rinominare in Server/VncOverSsh #format wiki #LANGUAGE it <
> <> <> = Introduzione = Lo scopo di questa guida è quello di: * usare software VNC per l'amministrazione da remoto del proprio home computer. Impiegando un server VNC (ad esempio vino-server presente fin dalla prima installazione in Ubuntu) sulla propria macchina e tramite una opportuna password consentire ai client VNC (siano essi Windows, Unix che OS X), di ricevere una immagine dello schermo e di inviare input di tastiera e mouse al computer server. In pratica gestire il computer server da un'altra postazione, come se fosse il proprio home computer. * Chiarire come configurare un server SSH sul proprio home computer usando solamente chiave pubblica e privata, su una porta non standard. * Creare un tunnel instradando tutto il traffico VNC sulla connessione SSH. Al termine di questo tutorial, saremo in grado di connettere al proprio home computer qualunque altro PC. {{{#!wiki note 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 }}} {{{#!wiki important 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: 0. Incrementare la sicurezza. L'attaccante deve compromettere diversi livelli di sicurezza per danneggiare il sistema e l'SSH è un livello ulteriore. 0. 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). 0. 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. {{{#!wiki important 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. {{{#!wiki important 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: * le porte >1024 sono meno "bloccate" rispetto alle inferiori (privileged ports) * alcune porte sono quasi sempre aperte come la porta HTTP (80) HTTPS (443) etc. Se tutte le altre falliscono possiamo provare a raggiungere il nostro server SSH sfruttando una di queste. Non è la soluzione migliore. * la porta del DNS (53) è sempre aperta. 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: * Non c'è metodo per crackare una password se questa non esiste. * Facendo questo forziamo l'utente a usare la coppia di chiavi pubblica e privata create precedentemente per la sua autenticazione. 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: * Allow other users to view your desktop * Allow other users to control your desktop * Require the user to enter this password {{{#!wiki tip 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 == {{{#!wiki note 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. {{{#!wiki tip 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. * Aprire le porte del proprio router/firewall sulle quali il demone SSH resterà in ascolto (nel caso di questa guida la porta 59000). Una buona guida per questo è disponibile al seguente indirizzo [[http://portforward.com/routers.htm]]. * Recuperare del software portabile, usabile sulle macchine Windows (le macchine *nix e Mac hanno SSH built in). 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: * Copiare la private key memorizzata sul nostro home computer (nella cartella ~/.ssh/) nel nostro portable drive (d'ora in poi USBdrive): {{{ sudo cp ~/.ssh/id_rsa /media/USBdrive/ }}} Fatto ciò occorre importare la chiave in Putty, ma per far questo avremo bisogno di `puttygen.exe` memorizzato in precedenza anchesso sull'USB drive: * Avviare il file `puttygen.exe` sull'USB drive. * Andare in '''''Conversions | Import Key'''''. * Click sulla propria private key e inserire la propria passphrase. * Aggiornare la key fingerprint. * Salvare le chiavi usando '''''Save public key''''' e '''''Save private key'''''. `puttygen.exe` genera un altra chiave pubblica. Questa è identica a quella memorizzata sul nostro home computer. {{{#!wiki note 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: * Sul menu di sinistra, selezionare '''''Session'''''. Inserire il proprio dynamic host name in '''''Host Name (or IP address)'''''. Ad esempio (mycomputer.dyndns.org) * Passare al campo '''''Port''''' inserendo la porta su cui risponderà il nostro server SSH (59000) * Ora selezionare '''''Connection -> SSH -> Auth''''' sul menu di sinistra. * Sotto '''''Private key file for authentication:''''' selezionare la propria chiave privata `id_rsa.ppk`. * Selezionare '''''Tunnels''''' sul menu di sinistra. Sotto '''''Source Port''''' selezionare un grande numero corrispondente ad una porta che non sia una porta di servizio >1024 (ad esempio la porta 50000). * Sotto '''''Destination''''' scrivere {{{127.0.0.1:5900}}}. Questo permette ad ssh di creare un tunnel per ogni servizio connesso alla porta 50000 alla porta 5900 VNC sull'interfaccia locale (l'interfaccia locale è quella dell'home computer, una volta che ci saremo connessi). * Premere sull' '''''Add''''' button. * Tornare a '''''Session''''', scrivere un nome in '''''Saved Sessions''''' e premere ''''''Save''''''. In questo modo salveremo le impostazioni appena definite senza dover ripetere la procedura, potremo pertanto ricaricale in ogni occasione. * Selezionare '''''Open''''' Button. * Inserire quando richiesto la propria private key passphrase, fatto questo sarà visibile un normale promp shell. * Tornare quindi al driver USB, avviare `TightVNCviewer.exe`. * Selezionare '''''VNC server:''''' e inserire {{{127.0.0.1::50000}}}, attenzione al fatto che ci sono 2 due punti. * Inserire la password quando verrà richiesto per sbloccare il desktop. == 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: * '''''Host:''''' {{{127.0.0.1:50000}}}. * '''''Video:''''' '''0'''. * '''''Password:''''' inserire la propria password. * premere il button '''''Connetti'''''. == Incrementare le performance del Client VNC == Non aspettiamoci connessioni velocissime, VNC è abbastanza lento. Certamente è possibile incrementarne le performance: * diminuendo la profondità del colore fino ad un minimo di 8-bit. * modificando l'encoding, potremo aumentare/diminuire il livello di compressione anche JPEG. = 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 = * Documento originale: http://ubuntuforums.org/showthread.php?t=383053 * http://www.trekweb.com/~jasonb/articles/vnc_ssh.shtml == SSH == * http://www.securityfocus.com/infocus/1810 * http://www.openssh.org/faq.html * http://www.rzg.mpg.de/networking/tunnelling.html * http://johnny.chadda.se/2006/10/24/access-your-linux-computer-graphically-and-securely-using-ssh-and-vnc/ == VNC == * http://en.wikipedia.org/wiki/VNC * http://www.realvnc.com/ * http://www.realvnc.com/ * http://ultravnc.sourceforge.net/ == Chicken of the VNC == * http://www.nonstopmac.com/2006/02/chicken_of_the_vnc.htm * http://www.cl.cam.ac.uk/Research/DTG/attarchive/vnc/sshvnc.html * http://www.macmod.com/content/view/89/ ---- CategoryServer CategoryDaRevisionare CategoryInternet CategorySicurezza