VNC, RDP ed everything via tunneling SSH

 

In questo post voglio andare a spiegare come utilizzare la funzionalità di incapsulamento TCP del protocollo SSH. In questo modo possiamo veicolare traffico VNC, RDP o qualsiasi altra cosa tramite SSD. L'unica cosa che serve è un piccolo server SSH attivo da qualche parte all'interno della rete a cui vogliamo accedere da remoto. Questo server SSH opportunamente esposto sul web e disponibile su una porta diversa dalla 22 fungerebbe da entry point per tutta la rete. Questo ovviamente ci impone di forwardare il traffico del router in entrata dalla porta X verso l'indirizzo IP del server SSH. La porta che andrò ad utilizzare in questo post è la 6010, ovviamente voi potete scegliere quello che più preferite, basta che non sia una porta in uso o quelle canoniche.

Il server SSH deve essere piazzato da qualche parte e per ovvi motivi sarebbe meglio se fosse sempre disponibile e magari anche sotto UPS. Le soluzioni a questo problema sono tante: se avete un server potete usare questo, se avete qualche NAS di un certo livello molto probabilmente avete a disposizione un server SSH. Nella peggiore delle ipotesi potete installare una macchina ad impatto 0, probabilmente anche un bel Raspberry Pi andrebbe benissimo.

Una volta deciso dove installare il server ssh si può procedere. Io in questo post mi concentrerò sull'installazione e configurazione di un server SSH su Windows. I concetti tuttavia non cambiano e sono applicabili anche altrove, ad esempio una distro Debian con openssh installato.

Come software andremo ad usare freeSSHd, al più presto scriverò un'altro post in cui parlerò di openSSH tramite Cygwin. Questo software è semplicissimo da usare e ci mette a disposizione un'interfaccia grafica fool-proof. Terminata l'installazione passiamo alla configurazione.

Lato server

Per la configurazione passo in rassegna tab per tab, più easy di così si muore. 😀

Tab “Server status”

Attivare il server SSH premendo sull'apposito comando.

Tab “Telnet”

Non è necessario toccare niente se non si utilizza il server telnet.

Tab “SSH”

Impostare l’interfaccia di ascolto, per la maggioranza dei casi possiamo lasciare su All interfaces.

Settare una porta non stardard! E ovviamente SCRIVERSELA GIU’. Come ho detto poco fa noi prenderemo in considerazione la porta 6010. Tutto questo per ragioni di sicurezza, dobbiamo sempre tener presente che questo server è esposto sul web quindi la sicurezza è di vitale importanza. Lo stesso vale per nome utente e password che andremo ad usare per autentificarci, facciamo in modo che siano complessi a sufficienza.

Non è necessario impostare un numero massimo di connessioni.

Se si vuole è possibile impostare un idle timeout per questioni di sicurezza. Dopo n minuti di inattività il server chiuderà la sessione e il client sarà obbligato a autentificarsi nuovamente.

È possibile impostare un banner di benvenuto! (Va ovviamente fatto per una questione di stile :D)

Lasciare le due spunte flaggate.

È possibile creare nuove chiavi a 512, 1024 o 2048 bit.

Tab “Authentication”

Lasciare tutto di default e le opzioni su Allowed in entrambi i cambi. Se si imposta required non ci si potrà più loggare.

Tab “Encryption”

Io personalmente ho impostato AES256, poi si vedrà se questo causa problemi di velocità nella trasmissione durante una sessione di VNC o RDP. Teniamo in mente che più complessa è la chiave e maggiore è la codifica utilizzata maggiore sarà anche il tempo di elaborazione dei pacchetti inviati e ricevuti. In una sessione di dekstop remoto questo è molto importante. Dato che già il tunnel in questione è criptato andremo a disattivare la criptazione del canale VNC in modo da ottenere un miglioramento delle prestazioni.

Tab “Tunneling”

Per permette il tunneling da un computer esterno verso il server flaggare solo la prima spunta: Allow local port forwarding.

Tab “SFTP”

Lasciare tutto di default.

Tab “Users”

Creare gli utenti che potranno accedere al server SSH e i privilegi. Come detto in precedenza usate nomi utente non classici: come admin, administrator, root, ecc. E lo stesso dicasi per le password, usate password complesse anche maggiori di 8 caratteri.

Tab “Host restriction”

Impostare da quali ip è consentita la connessione. Nota bene, se non volete usare questa funzionalità dovete impostare il pallino su “Refuse these IP addresses:” e lasciare vuota la text box sottostante. Se invece volete utilizzare questa feutures vi basterà mettere il pallino su "Allow only these IP addresses:" e sotto scrivete gli indirizzi IP che saranno abilitati a collegarsi al server. Potete utilizzare il carattere jolly * per consentire l'accesso a tutta una sottorete. Si tratta sempre di una sicurezza in più.

Tab “Logging”

Attivare il logging. Male non fa!

Tab “Automatic updated”

Se si vuole si può impostare l’aggiornamento automatico. Sperando che non dia problemi e mandi al diavolo il programma e i settaggi vari, nel caso succedesse siete fregati. 😀

Lato client

Completata la configurazione del server si passa alla configurazione del client.

Aprite Putty o Kitty (sono solo due fra i mille mila client disponibili, se siete dei PRO potete usare anche la linea di comando). Create una nuova sessione impostando l’IP pubblico dal lato server, se avete IP statico, altrimenti un dominio dynamic DNS. Ricordatevi di cambiare anche la porta, inserendo quella che avete impostato sul server, nel nostro caso 6010. Mi raccomando non lasciate la porta 22!

Salvate la sessione con un nome coerente. Selezionare la sessione appena salvata e premete sul tasto Load. A questo punto portarsi nel menù di sinistra SSH -> Tunnels.

 

In questa sezione dobbiamo inserire la source port, il punto d’ingresso del client verso il tunnel. Diciamo che non ha molta importanza il valore di questa porta, basta non inserire una porta che è già in uso o le canoniche porte: tipo la 80. Teniamo presente che la porta che andremo a inserire qui sarà la porta che dovremo scrivere sulla nostra interfaccia di loopback per poter ricevere/inviare pacchetti dal/al server SSH.

In destination inseriamo l’IP e porta del computer alla quale vogliamo collegarci, notate bene che non è detto sia il server, possiamo collegarci a qualsiasi PC della rete.

Facciamo un semplice esempio. Il server SSH ha l'indirizzo 10.0.0.1 e sulla porta 5900 è in ascolto VNC. Io client che mi trovo al di fuori della rete server uso un client ssh per instaurare un tunnel ed ho IP 192.168.0.10. Ecco come faccio. Nel primo campo inserisco ad esempio la porta 5910 mentre nel secondo scrivo 10.0.0.1:5900. Cosa ottengo in questo modo? Semplice, tramite la porta 5910 della mia interfaccia di loopback (127.0.0.1) potrò collegarmi tramite VNC al server. Basterà che nel mio VNC Viewer io scriva 127.0.0.1:5910. Allo stesso modo se modifico l'IP di destinazione posso raggiungere qualsiasi PC della sottorete dov'è collegato il server SSH. Come potete notare cambiando la source port io posso creare n tunnel, tutti diretti verso lo stesso server, in questo modo posso attivare contemporaneamente più sessioni VNC o RDP solamente cambiando una porta!

Abbiamo ottenuto quello che volevamo, controllare tutti i PC di un ufficio remoto utilizzando solo l'incapsulamento del protocollo SSH, non c'è trucco non c'è inganno. E soprattutto non c'è VPN!

 

Ho ottenuto proprio quello che volevo, controllo remoto di tutti PC che si trovano nell'ufficio remoto.