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 passo­passo 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 server­side 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
dial­up, 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
server­side 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 server­side 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