Tunneling SSH

Il protocollo SSH vi permette di creare dei tunnel che permettono ad altri programmi di
raggiungere una destinazione specifica attraverso appunto questi tunnel.
Il transito dei pacchetti in tal modo è criptato anche se i programmi ed i protocolli usati non hanno
la capacità di farlo autonomamente.
Il tuneling SSH viene messo in pratica da un meccanismo chiamato “port forwarding”

Configuriamo il nostro client SSH in modo che accetti connessione su determinate porte sulla macchina
locale (es ssh ­L portalocale:AppServer:portaserver username@SSHServer )
Tutti i dati mandati a questa porte sono inviati e tornano attraverso il tunnel.
Dall’altra parte dei tunnel, il server SSH passa i dati e li riceve alla macchina che avete indicato.
Questo meccanismo è conosciuto come “port forwarding”

ssh port forwarding

NB Il transito di dati è in chiaro tra il server SSH e AppServer

1 Port forwarding con ssh (sistemi *nix)
1.1 Local tunneling

Dalla man page di ssh
­

L porta:host:portahost
Indica che la porta sull’host locale (il client) viene messa in comunicazione con host e porta
relativi al sistema remoto.
Ciò viene effettuato allocando un socket che ascolta sulla porta del sistema locale; qualora venisse
usata questa porta per effettuare la connessione,
Quest’ultima verrebbe inoltrata attraverso il canale sicuro, così da connettere l’host locale con l’host
remoto attraverso la sua porta portahost.

Supponiamo ora di voler leggere la posta dell’utente “pippo” sul server mail.example.com
Per prima cosa instauriamo il tunnel ssh verso la porta 110 di mail.example.com

andy@mojito:~$ ssh ­-f ­-L 1100:mail.example.org:110 sleep 10 root@ssh.example.com

Questo stabilisce un tunnel per la connessione al server pop3 mail.example.com.
La porta locale utilizzata è la 1100. Non importa quale porta sia utilizzata, purché sia superiore alla 1023 (ricordate che solo root può aprire socket su porte privilegiate) e non sia in conflitto con porte già in uso. La connessione viene inoltrata alla porta 110 sul server remoto, essendo quella la porta standard per i servizi POP3.
Il comando remoto “sleep 10″ serve per dare il tempo (10 secondi, nell’esempio) di avviare il servizio che deve passare attraverso il tunnel. Se non avvengono connessioni entro il tempo specificato, ssh uscirà. Se occorre più tempo, il valore di sleep può essere opportunamente aumentato.
ssh ha anche un’opzione ­-N, utile da abbinare al port forwarding: se specificata, non è necessario specificare un comando remoto (”sleep 10″ nell’esempio di cui sopra). Però, usando quest’opzione, ssh rimane in attesa indefinitamente (anziché uscire dopo il completamento del comando remoto), e l’utente deve prendersi cura, in un secondo tempo, di fermare manualmente il processo.

Ora colleghiamoci alla porta locale 1100

andy@mojito:~$ telnet localhost 1100
Trying 127.0.0.1…
Connected to localhost.localdomain.
Escape character is ‘^]’.
+OK Hello there.
user pippo
+OK Password required.
pass secret
+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
1 2407

La connessione attraverso il tunnel è andata a buon fine.
Di default il tunnel sarà disponibile solo per la macchina locale (verificate con un netstat ­pl): se invece volete rendere il tunnel disponibile anche ad altre macchine dovete usare l’opzione ­-g.

andy@mojito:~$ ssh ­-g ­-f ­-L 1100:mail.example.org:110 root@ssh.example.com

chiunque in questo modo puo’ collegarsi al mail server remoto usando il comando:

telnet mojito 1100

Questa opzione evita di aprire n tunnel ssh e rende possibile la fruizione del tunnel stesso da parte di
più host.

1.2 Reverse Tunneling

Dalla man page di ssh

­R porta:host:portahost
Indica che una certa porta dell’host remoto (il server) viene messa in comunicazione con host e porta
questa verrebbe inoltrata attraverso il canale sicuro, così da connettere l’ host remoto con
quello locale attraverso la sua porta portahost. La porta per la connessione può essere indicata
anche in un file di configurazione.

Supponiamo di voler raggiungere dall’esterno, attraverso il server SSH ssh.example.com la macchina della nostra rete locale con indirizzo IP privato.
Dalla macchina 10.4.13.25 (mojito) creiamo il tunnel attraverso ssh.example.com sulla porta 4000

andy@mojito:~$ ssh ­f ­R 4000:127.0.0.1:22 root@ssh.example.com
Last login: Mon Jan 23 16:00:26 2006 from somewhere.evil.grin
ssh:~#

A questo punto da un qualsiasi host (nell’esempio TBServer) possiamo collegarci a mojito attraverso il tunnel creato via sh.example.com

Prima ci colleghiamo a ssh.example.com

TBserver:~# ssh ssh.example.com

Poi da questo ci colleghiamo in locale e attraverso il tunnel raggiungeremo mojito

ssh:~# ssh ­p 4000 localhost
root@localhost’s password:
Last login: Mon Jan 23 16:21:23 2006 from localhost.localdomain
Linux mojito 2.6.14­2­686 #1 Wed Dec 28 18:21:03 UTC 2005 i686 GNU/Linux
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
mojito:~#

1.3 Port forwarding dinamico
Dalla man page di ssh

­-D porta
Indica una porta locale “dinamica” a livello di applicazione da usare per la comunicazione.
Ciò viene effettuato allocando un socket che ascolta sulla porta del sistema locale; qualora
questa porta venisse usata per effettuare la connessione, questa verrebbe inoltrata attraverso il
canale sicuro e il protocollo dell’applicazione viene usato per determinare dove va effettuata la
connessione dalla macchina remota.
Attualmente è supportato il protocollo SOCKS4 e ssh funzionerà come server SOCKS4.
Solo l’utente root può indicare porte privilegiate per le connessioni.

Supponiamo di voler far passare le nostre connessioni attraverso la macchina ssh.example.com.
Per prima cosa stabiliamo il tunnel ssh dinamico con ssh.example.com

andy@mojito:~$ ssh ­-D 2080 root@ssh.example.com

Questo vi lascerà aperto un terminale, di cui probabilmente non avrete bisogno: possiamo mandare
ssh in backgruond con l’opzione ­-f

andy@mojito:~$ ssh ­-D 2080 -­f ­-N root@ssh.example.com

Una volta instaurato il tunnel dovremo utilizzare un applicativo locale che faccia da proxy SOCKS, ad esempio tsocks ( tsocks provides transparent network access through a SOCKS version 4 or 5 proxy (usually on a firewall). tsocks intercepts the calls applications make to establish TCP connections and transparently proxies them as necessary. This allows existing applications to use SOCKS without recompilation or modification.)

Lo configureremo per inoltrare tutte le connessioni sull’host locale verso la porta 2080

#inserite tutte le reti locali
local = 10.4.13.0/255.255.0.0
local = 10.1.0.0/255.255.0.0
#inserite l’ip del server
server = 127.0.0.1
#e la porta
server_port = 2080

Ora possiamo lanciare qualsiasi applicazione con tsocks

andy@mojito:~$ tsocks xchat

e questa, attraverso il tunnel creato prima, passerà, criptata, dall’ host ssh.example.com

2 Port forwarding con sistemi Windows
Possiamo utilizzare Putty (http://www.chiark.greenend.org.uk/~sgtatham/putty/)
per creare tunnel criptati con SSH
Supponiamo ad esempio di voler collegarci in maniera sicura al server proxy sunshine.cs.uu.nl sulla
porta 3128
Creiamo una nuova sessione ssh verso questo server

port forwarding putty

Quindi, selezioniamo il tab “Tunnels” e specifichiamo la porta locale, quella remota e l’host remoto
e poi clickiamo il tasto [Add]:

port forwarding putty

Infine, col tasto [Open] iniziamo la sessione

port forwarding putty

Possiamo anche salvare questi settaggi tornando al tab “Session” e usando [Save] prima di aprire la
sessione.
Questo esempio è l’equivalente del comando UNIX:

ssh ­L 3128:proxy:3128 your_username_here@sunshine.cs.uu.nl

In pratica forwarda la porta locale 3128 verso la porta 3128 dell’host ‘provy’ attraverso la
connessione SSH.
Putty è un client SSH, quindi aprirà una finestra di terminale.
Quando concluderete la sessione potete chiudere la finestra senza problemi.

May 1st, 2007 | Leave a Comment

Dovecot 1.0.beta7 for Debian Sarge

Dovecot is an open source IMAP and POP3 server for Linux/UNIX-like systems, written with security primarily in mind. Although it’s written in C, it uses several coding techniques to avoid most of the common pitfalls.

Dovecot can work with standard mbox and maildir formats and it’s fully compatible with UW-IMAP and Courier IMAP servers’ implementation of them as well as mail clients accessing the mailboxes directly. It’s easy to migrate from them to Dovecot. I have also plans to support storing mails in SQL databases.

Backports form Debian/Sid for Sarge here

Feedback are welcome

April 17th, 2006 | Leave a Comment

Powered by WordPress | Blue Weed by Blog Oh! Blog | Entries (RSS) and Comments (RSS).