Protezione di connessioni testuali tramite SSH
In questa paginetta vorrei spiegare come utilizzare
OpenSSH non
solo per proteggere le proprie sessioni di Telnet ma anche i
collegamenti a server basati su protocolli testuali (POP, NNTP, SMTP, ecc...).
Sebbene questo possa avere poco senso in una LAN domestica, la cosa acquista
particolare importanza se ci si trova in una LAN dove possono accedere
più persone non sempre fidate o peggio se si è costretti a
effettuare collegamenti tramite Internet.
L'idea di base è quella di sfruttare la funzione di
forwarding del comando SSH per effettuare una connessione protetta col server
remoto e una non protetta col client locale, che però essendo situato
sulla stessa macchina che realizza la connessione remota non corre particolari
rischi di intercettamenti. Vediamo di chiarire la cosa con un esempio concreto:
una connessione POP3.
Tale protocollo lavora sulla porta TCP numero 110: il
nostro scopo quindi è quello di realizzare una connessione sicura
tra la nostra macchina e la porta 110 del server e una connessione non sicura
tra il client della posta e la porta 20000 (una porta sufficientemente alta
da non influenzare altre applicazioni e da poter essere allocata da qualsiasi
utente). Per fare questo utilizziamo la seguente linea di comando:
ssh -f -C Server -L 20000:Server:110 sleep 10
in cui il parametro -f forza il programma in background
dopo l'autentificazione col server, il -C abilita la compressione, il -L
invece specifica appunto di aprire la porta 20000 sulla macchina locale di
effettuare il reindirizzamento dei dati sulla porta 110 del server Server;
il comando sleep di seguito serve per mantenere in vita il programma
fino a che il client di posta non realizza la sessione.
Un modo veloce per vedere se la procedura funziona è
quello di effettuare subito un telnet sulla nostra macchina alla porta
specificata e vedere se il server risponde:
[~]# telnet localhost 20000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK POP3 server.univision.it v7.59 server ready
quit
+OK Sayonara
Connection closed by foreign host.
A questo punto abbiamo ottenuto la connessione sicura col
server, ora dobbiamo preoccuparci di effettuare la sessione tramite il client:
fondamentalmente non cambia molto rispetto alla normale configurazione del
programma se non il fatto che come server per il collegamento va specificato
quello locale e come porta quella che abbiamo indicato a SSH (nel nostro
esempio 20000).
Riassumendo, per effettuare una connessione sicura occorre
prima eseguire il comando SSH con i parametri indicati sopra e dopo lanciare
il client, che dovrà collegarsi alla porta locale. Per automatizzare un
po' le cose occorre che il client permetta di eseguire un comando prima del
collegamento, come ad esempio FetchMail; nel caso di questo programma il file
di configurazione diventa una cosa simile a questa:
poll localhost with protocol pop3 and port 20000:
preconnect "ssh -C -f utente@server -L 20000:server:110 sleep 10"
password serverpw;
Se invece il client non permette di invocare un comando
prima del collegamento allora occorre risolvere la cosa in un altro modo:
una soluzione può essere quella di portare il parametro sleep ad
valore molto più alto in modo che SSH resti attivo per tutta la
connessione (ad esempio 100000000).
RIFERIMENTI
-
FetchMail è un programma che permette di scaricare la posta, anche di più account,
sul server locale, utilizzando uno dei protocolli POP2, POP3, RPOP, APOP, KPOP, IMAP,
ETRN o ODMR. Utilizzando la porta SMTP per inoltrare i messaggi alla macchina locale,
permette l'utilizzo di filtri, alias, forward come se si trattasse di una mail arrivata
direttamente al sistema.
-
OpenSSH è una versione
open source della suite di programmi di collegamento che utilizzano il protocollo SSH.
In articolare contiene i programmi ssh, scp, sftp, sshd.