[ Appunti ] SSH tunnel proxy e port forwarding

Tante volte mi e capitato di usare il protocollo SSH nei più svariati modi è davo per scontato che il suo utilizzo fosse un tassello fondamentale in ambito di amministrazione di server remoti e relativi servizi, considerando sopratutto il caso in cui si aveva necessita di accedere in maniera sicura dall’esterno sul server.


Mi sono trovato a dover gestire dei server da remoto, ma i “sistemisti” che li gestivano prima preferivano mappare ogni porta del servizio che dovevano gestire sul relativo IP pubblico, bypassando praticamente il firewall, e rendendo il servizio pubblico.

Purtroppo questo mal costume non fa altro che esporre su internet servizi che non dovrebbero essere raggiungibili, ma sopratutto se non gestiti con policy adeguate e relative patch di sicurezza, si compromette anche la macchina, esponendola ad accessi o utilizzi non autorizzati, pensate per esempio ad una IPCAM o wiki aziendale interno.

Generalmente preferisco impostare una connessione VPN, per poter gestire da remoto il server ed eventuali servizi all’interno della lan, ma avvolte a causa delle limitazioni del firewall, oppure dell’impossibilità di avviare una VPN, se all’interno vi è un server con il servizio SSH, allora utilizzo questo, mappando solamente una porta e non compromettendo le varie policy del firewall.

Detto questo, procediamo sulla configurazione del servizio SSH, e come poter sfruttare per poter amministrare anche le macchine presenti all’interno della LAN.

Impostiamo sul router / firewall un NAT verso la macchina con il servizio SSH abilitato, utilizzando una porta a nostro piacimento e facendola puntare alla 22 in TCP del nostro server (è possibile anche modificare direttamente la porta di ascolto del servizio SSH tramite il file di configurazione sshd_config). Quindi in linea di massima possiamo impostare un deny all sulla chain di ingresso e un permit verso il nostro NAT.

ssh-tunnelAccesso da Web

Prendiamo in esame la situazione in cui i servizi da gestire all’interno della LAN, sia tutti di tipo HTTP/HTTPS e quindi con interfaccia web, allora niente di più facile, basta un SSH tunnel e una configurazione proxy del nostro browser ed il gioco è fatto.

I dati che dobbiamo conoscere sono:

host_remoto: ip remoto della macchina che ospita il servizio SSH

utente: nome utente da utlizzare per il login

detto questo possiamo procedere al login, ma aggiungiamo un opzione  -D 2000 che ci permette di aprire un socket di ascolto per il tunnel proxy sulla nostra macchina locale, verso cui redirigere il traffico che deve essere instradato attraverso il tunnel ssh.

Detto questo tutte le connessioni dirette alla porta 2000 locale del nostro pc verranno dirette attraverso il tunnel ssh e quindi come se fossero effettuate dal nostro host_remoto.

Per facilitare l’uso personalmente uso un plugin firefox (foxproxy) che funziona egregiamente e permette uno switch veloce.

Accesso diretto ad una porta – tunnel port forwarding

Adesso consideriamo il caso in cui volessimo accedere ad un servizio che non è gestibile attraverso un accesso web, ma che è in ascolto su una determinata porta…per esempio desktop remoto di windows.

Consideriamo che il nostro sistema windows abbia IP locale 192.168.0.47 e usi la porta di default del desktop remoto 3389. Ecco il comando da digitare

Con questo comando non abbiamo fatto altro che far coincidere la porta locale 2001 con la porta remota 3389, quindi basta effettuare una connessione RDP in locale sulla porta 2001 e si aprirà una sessione desktop sul pc windows remoto attraverso il tunnel ssh.

Ovviamente tale comando può essere usato con qualsiasi porta e qualsiasi servizio basato su protocollo TCP, per protocollo UDP faremo un’altra guida.

Tunnel port forwarding con accesso da tutta la rete.

Partendo dall’ultima comando usato, grazie alla nostra piattaforma di partenza basata su GNU/Linux, possiamo rendere accessibile il desktop remoto del nostro PC windows, anche alla nostra rete locale…digitiamo questo comando

Adesso possiamo fornire l’accesso al desktop remote del server windows attraverso la nostra macchina, quindi possiamo usare l’IP del nostro host (192.168.1.69) e la porta 2001, sfruttando il tunnel ssh da noi impostato.

Good hack!

Curioso e con tanta voglia di sapere, fui attratto dal mondo dell'informatica, in cui mi ci buttai a capofitto. Dal 2005, ho fatto della mia passione principale, il Networking associato al mondo dei sistemi in ambiente Gnu/Linux, il mio lavoro quotidiano.

Comments are closed.