scarica pdf - Daniele Salamina
Transcript
scarica pdf - Daniele Salamina
1 Remote HelpDesk behind NAT Salamina Daniele [email protected] VERSIONE: 0.2 20/11/2004 2 Indice • Scopo dell' articolo/tutorial.............................................................3 • Premessa............................................................................................3 • Introduzione al problema dell’ IP Privato.......................................3 • Alcune soluzioni(parziali) al problema...........................................4 • Funzionamento di Mozzarella e i problemi causati…................4 • Doppio SSH TUNNELING................................................................5 • Caratteristiche.............................................................................. ..5 • Requisiti.................................................................................... ......5 • Come funziona il doppio tunnel...................................................5 • Tutorial passopasso per utenti Windows/Linux........................7 • PC SERVER(PCS).........................................................................7 • PC CLIENT(PCC)......................................................................12 • Verifiche di connessione e risoluzione dei problemi.............16 • A cosa serve il keepalive agli utenti FW...................................16 • Risoluzione dei problemi di keepalive................................17 • Automatizziamo la connessione con plink................................18 • COCLUSIONI................................................................................ ...19 3 Scopo dell' articolo / tutorial Lo scopo di questo articolo/tutorial e quello di illustrare in pratica e in teoria il funzionamento della tecnica SSH Tunneling per l’utilizzo da remoto, quindi dall’esterno della rete Fastweb (da ora in poi FW), il proprio pc interno alla rete FW. Premessa La tecnica dell’SSH TUNNELING può essere applicata in uno dei tanti modi, per la gestione da remoto di qualsiasi pc dietro NAT/PAT, e teoricamente ampliata per qualsiasi servizio serverside dietro NAT/PAT. Con questa descrizione, faccio riferimento al provider Fastweb, trattandosi di una implementazione dell’ SSH TUNNELING che utilizzo regolarmente. Introduzione al problema dell’ IP Privato Ogni utente residenziale della rete FW ha un Ip privato che non è visibile dall’esterno. Questa scelta architetturale da parte di FW è una delle maggiori limitazioni per gli utenti abbonati a FW. Infatti non è possibile accedere direttamente alla propia macchina, visto che l' IP non è visibile direttamente su internet, infatti ogni utente FW esce su internet con l’IP del NAT/PAT (Network Address Translator / Port Address Translator). Questo risulta vantaggioso dal punto di vista della sicurezza con cui siamo esposti ad internet. Rispetto all’indirizzamento pubblico(vedi per es. connessioni ad internet dialup, adsl,ecc..), il nostro IP non è visibile direttamente su internet, riducendo del tutto la finestra di attacchi diretti dall’esterno verso le singole macchine collegate alla rete FW. Non potendo essere visibili direttamente dalla rete internet, non possono essere utilizzati DAGLI UTENTI ESTERNI ALLA RETE FW tutti quei servizi serverside che richiedono una connessione diretta alla macchina FW (Remote Desktop, Server WEB, Server FTP, Server per il Gaming Online, ecc…) 4 Alcune soluzioni(parziali) al problema Per poterci connettere da remoto ad una macchina interna alla rete FW sono state studiate e provate alcune tecniche che permettono di aggirare parzialmente il problema dell’IP Privato, tra cui alcune di queste nei limiti della legalità… • • • • Mozzarella/Pomodoro (bloccato da fastweb) Unione di una connessione FW e di una con IP Pubblico Utilizzo di IPv6 con FW SSH Tunneling Funzionamento di Mozzarella e i problemi causati…. Fino a quando FW non ha modificato nuovamente la sua architettura di rete (Agosto 2003)[2], era possibile impiantare servizi serverside utilizzando la tecnica chiamata Mozzarella. Questa soluzione è stata implementata nelle sue varianti di Pomodoro (in pratica si tratta di mozzarella con interfaccia grafica) grazie ad un articolo tecnico pubblicato su una eZine scritto da Naif (Fabio Pietrosanti componente di http://www.sikurezza.org e http://www.blackhats.it ). In pratica, mozzarella sfruttava l’apertura di connessioni fra l’indirizzo IP privato del computer e interfaccia IP pubblica di uscita su internet tramite l’effettuazioni di sessioni FTP in Port/Active Mode. Il problema era dovuto al fatto che il software Pomodoro ha avuto un’ampia diffusione da parte degli utenti FW con una serie di server FTP pubblici inseriti nel pacchetto di Pomodoro. Questo ha causato un sovraccarico di accessi a quei server FTP pubblici (tra cui ftp.kernel.org), che hanno costretto gli amministratori di questi server, a bannare (bloccare) gli accessi a tutti gli utenti fastweb. 5 Doppio SSH TUNNELING Caratteristiche • Bypass di ogni regola in ingresso del firewall (richiede aperta in uscita solo la porta 22) • Difficile da hijackare/sniffare perché: o Il traffico VNC è criptato attraverso SSH o Tripla autenticazione : una login per ogni ssh client ed una login per accedere al VNC server o TightVNC può essere impostato per ricevere connessioni provenienti solo da locale (localhost) • Permette la gestione remota in ambienti NAT • Indipendente dal tipo di piattaforma utilizzata (ThightVNC è disponibile per la maggior parte dei sistemi operativi) • Completamente realizzata con software open source • Abbastanza veloce anche con connessioni lente (vengono sfruttati gli algoritmi di compressione SSH e e gli schemi di compressione di ThightVNC) • Non c’è bisogno di conoscere gli IP dei pc client e server Requisiti 1. ThightVNC client per il client e ThightVNC server installato sul pc server che deve essere gestito ( http://www.tightvnc.com/ ). 2. Un server pubblico ssh raggiungibile dall’esterno della rete FW, quindi con IP pubblico. (Nel mio caso utilizzo un server su cui è installata una distribuzione Debian connessa alla rete mediante ADSL) 3. Un client ssh per i pc. Uno tra i più famosi, versatile e free è Putty ( http://www.chiark.greenend.org.uk/~sgtatham/putty/ ) Come funziona il doppio tunnel 6 I vari passaggi possono essere compresi guardando la figura in basso. 0) Il pc server (da ora PCS) avvia ThightVNC server 1) PCS effettua una connessione SSH (viola) al server SSH (da ora PCH) (ip pubblico, porta 22 tcp aperta) 2) Il Client SSH di PCS crea un backward ssh tunnel (rosso) dal PCH (127.0.0.1) al PCS (127.0.0.1) per le porte 5800 e 5900 (da ora le chiameremo porte VNC) usando il protocollo TCP. Ora PCH collegandosi in localhost sulle porte VNC potrà gestire PCS. 3) Il pc client (da ora PCC) effettua una connessione SSH (blu) a PCH (allo stesso modo di PCS). 4) Il Client SSH di PCC crea un forward ssh tunnel (verde) dal PCC (127.0.0.1) al PCH (127.0.0.1) per le porte VNC. Ora PCC può collegarsi da locale (127.0.0.1) a PCH sulle porte VNC. 5) I due tunnel SSH sono automaticamente fusi insieme e PCH permette al traffico di fluire da PCC a PCS. 6) PCC avvia il ThightVNC client e si connette in locale. 7) PCC ora può gestire PCS usando il ThightVNC client attraverso un doppio Tunnel SSH. (giallo) 7 Tutorial passo- passo per utenti Windows/Linux Indifferentemente dal tipo di sistema operativo utilizzato, riusciremo a creare il doppio tunnel, visto che gli strumenti utilizzati sono disponibili per la maggior parte dei sistemi operativi. Gli screenshot sono stati realizzati con windows e linux. PC SERVER(PCS) 1. Scaricare TigthVNC da http://www.tightvnc.com/ e seguire le istruzioni di installazione. Può essere utilizzata la versione zippata che non necessita installazione. 8 2. Avviare il VNC Server (WinVNC.exe) e lasciare per ora le impostazioni di default. Con “WinVNC.exe –install” è possibile installare come servizio di sistema il VNC Server. In questo modo VNC Server sarà avviato automaticamente all’avvio di windows. 3. Scaricare Putty da http://www.chiark.greenend.org.uk/~sgtatham/putty/ 4. Putty non richiede installazione. Avviare Putty.exe. Apparirà una schermata simile a questa: 5. Riempire i campi cerchiati in rosso. In Host name inserire l’indirizzo reale del pc su cui si possiede un account valido di un server SSH. Inserire il nome che si vuole dare alla connessione e cliccare su Save. 9 6. Ora cliccare sull’opzione Connection. Apparirà una schermata simile a questa: 7. Di default, i pacchetti di keepalives sono settati a 0 e quindi disattivati. Impostare come valore un numero di secondi compreso tra 5 e 15. In seguito verrà spiegato perché impostare il keepalive. 8. Cliccare su Tunnels. Apparira una finestra simile a questa: 10 9. Riempire i campi come mostrato in figura e premere Add. Ritornare in Session, premere Save e cliccare su open. Se è la prima volta che ci colleghiamo all’SSH server da questa macchina avremo una schermata simile: 11 10.Cliccare su Accept (oppure Yes in base alla versione di putty) e possiamo loggarci sul sistema inserendo username e password. A questo punto il grosso del lavoro fatto. Ci resta da sistemare qualche altra impostazione del VNC Server. 11.Avviare il VNC Server o altrimenti se abbiamo installato VNC Server come servizio di sistema è già avviato. Nel systray (affianco all’orologio) c’è l’icona di VNC Server. Clicchiamo su Properties e ci apparirà una schermata del genere: 12.Cambiare entrambe le password e poi cliccare su Administration. 12 13.Abilitare “Allow loopback connections” e “Allow only loopback connections”. Premere ok. “Allow only loopback connections” deve essere disattivato nel caso in cui la macchina deve essere gestita anche da rete locale. Con “Allow only loopback connections” aumentiamo la sicurezza, visto che impediamo di connettersi alla macchina tutti gli utenti che appartengono alla rete fastweb. 14.Il sistema è pronto per ricevere connessioni. Se tutto è andato bene ci apparirà il prompt della shell. Per verificare se effettivamente la porta 5900 è stata aperta in locale sull’ SSH server basta che effettuiamo un netstat –l. PC CLIENT(PCC) 1. Scaricare TigthVNC da http://www.tightvnc.com/ e seguire le istruzioni di installazione. Può essere utilizzata la versione zippata che non necessita installazione. 2. Scaricare Putty da http://www.chiark.greenend.org.uk/~sgtatham/putty/ 3. Putty non richiede installazione. Avviare Putty.exe. Apparirà una schermata simile a questa: 13 4. Riempire i campi cerchiati in rosso. In Host name inserire l’indirizzo reale del pc su cui si possiede un account valido di un server SSH. Inserire il nome che si vuole dare alla connessione e cliccare su Save. 5. Cliccare su Tunnels. Apparira una finestra simile a questa: 14 6. Riempire i campi come mostrato in figura (questa volta bisogna premere il check Local invece di Remote) e premere Add. Ritornare in Session, premere Save e cliccare su open. Se è la prima volta che ci colleghiamo all’SSH server da questa macchina avremo una schermata simile: 15 7. Cliccare su Accept (oppure Yes in base alla versione di putty)e possiamo loggarci sul sistema inserendo username e password. 8. Ora possiamo lanciare TightVNC viewer e ci verrà mostrata una schermata simile a questa: 9. In VNC server inserire localhost (127.0.0.1) e premere Connect. Se tutto è andato bene dovrebbe apparire la schermata di login : 10.Inserire la password che si è settata nel passo 12 della configurazione di VNC Server e premere OK. Ora possiamo utilizzare da remoto il sistema. 16 Verifiche di connessione e risoluzione dei problemi Nel caso in cui qualcosa è andato storto, possiamo verificare se il problema risulta essere la mancata creazione del tunnel da parte di putty. Questo lo verifichiamo con il comando netstat –na da digitare al prompt dei comandi nel caso di windows o nella shell nel caso di Linux. Dobbiamo verificare se il client (PCC) e il server SSH risultino in ascolto (LISTENING) sulla porta 5900. Ssh server Client (PCC) Quindi verifichiamo se appaiono le due linee cerchiate in rosso dopo aver dato il comando “netstat –na”. Se nell’ssh server non appare la linea cerchiata in rosso, potrebbe essere che l’amministratore del server ssh abbia disabilitato il port forwarding. In 17 questo caso, l’unica possibilità che avete è di chiedere all’amministratore del server ssh di abilitare il port forewarding. Comunque, sshd (il demone che gestisce il server ssh), di default ha abilitato il port forwarding. A cosa serve il keepalive agli utenti FW Con la migrazione alla nuova architettura di autenticazione, fastweb ha introdotto un timeout di 30 minuti per inattività della connessione. Ma quello che ci interessa nel nostro caso è la diminuzione del tempo di timeout su TCP/UDP per vari servizi, per cui si ha il reset delle connessioni tramite l’invio di un pacchetto RST ad entrambi i peer coinvolti nel collegamento. Nel nostro caso, dopo alcuni minuti che non colloquiamo con il server ssh attraverso la shell, PCS viene disconnesso, impedendo così a PCC di collegarsi in remoto con il TightVNC viewer a PCS. Questo è il messaggio che ci viene visualizzato da putty dopo che è trascorso il tempo di timeout: Risoluzione dei problemi di keepalive Per ovviare a questo problema, possiamo utilizzare diverse soluzioni che ci permettono di tenere la connessione sempre attiva : • La prima soluzione, abbastanza banale, è quella di effettuare un piccolo script che faccia qualcosa nella shell e ci mostri l’output a video. In questo modo ci sarà sempre qualche pacchetto in transito tra PCS e il server SSH, impedendo così la caduta della connessione. 18 • La seconda soluzione (quella che ho adottato io ed è usata nella configurazione di PCS nel punto 7) è quella di utilizzare l’opzione disponibile in putty. Possiamo impostare i valori di keepalive anche a livello di sistema operativo, in modo che altre applicazioni sensibili a questo problema (IRC, Telnet, FTP e applicazioni di Home banking) ne traggono beneficio. Per i sistemi Win32 bisogna inserire dei parametri di KeepAlive nel registro di sistema: Questi sono i valori da inserire per sistemi Win32 nel registro nelle cartelle (regedit): Win95/98/ME : HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTC P WinNT/2K/XP : HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Para meters KeepAliveTime KeepAliveInterval SessionKeepAlive 15000 1000 15 Win95 Win95/ME Dword Dword Dword Stringa Stringa Stringa WinNT/200/ XP Dword Dword Sotto linux si opera sui seguenti valori: /proc/sys/net/ipv4/tcp_keepalive_time /proc/sys/net/ipv4/tcp_keepalive_intvl /proc/sys/net/ipv4/tcp_keepalive_probes 15 5 10 Per poter cambiare i valori del kernel a runtime si può utilizzare echo oppure sysctl. Modificare il file ssh_config (*nix) Si può ottenere lo stesso risultato di putty intervenendo manualemente sul file di configurazione ssh_config che risiede in /etc/ssh/. Basterà inserire in fondo al file ssh_config la stringa: 19 ServerAliveInterval 5 In questo modo, se non avviene nessuna comunicazione tra PCC e PCS, ssh invia automaticamente un pacchetto ogni 5 sec. a PCS in modo da tenere attiva la connessione. Automatizziamo la connessione con plink Questo meccanisco di autenticazione attraverso putty risulta essere un po scomodo se desideriamo automatizzare il collegamento al server ssh ogni volta che accendiamo il nostro pc casalingo. Plink è il putty senza gui. Possiamo utilizzare plink per permettere di stabilire una connessione al server ssh senza dover inserire a mano i vari parametri. La sintassi di plink è la seguente: plink sshserver.domain.it l username batch pw password R 5900:localhost:5900 2 C 2 forza plink di utilizzare la versione 2 del protocollo ssh, mentre con C utilizziamo la compressione dei dati. Utilizzando plink per autenticarci presso il server ssh, siamo costretti ad inserire la password in chiaro nel file che conterra il piccolo script di collegamento. Conclusione L'SSH TUNNELING, oltre ad essere utile come nel caso di connessioni remote, possiamo utilizzarlo per qualsiasi tipo di servizio. Il procedimento da effettuare rimane lo stesso, basta forwardare le porte che ci interessano. Per es. se volessimo utilizzare la shell in remoto, aggiungiamo a plink R 222:localhost:22 20 Riferimenti Fastweb FAQ: http://gofastweb.cjb.net/ Remote Helpdesk, Stefano Coletta. http://www.mindcreations.com/projects/manuals/helpdesk/helpdesk.php