Exercici 1. VPN's (I): túnel SSH

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca

Enunciat

Utilitza una màquina amb Ubuntu Desktop (anomenat client) per accedir amb un túnel de port LOCAL ssh al servidor web instal·lat a un altre equip virtual amb ubuntu desktop (anomenat Server). Cal que tinguis instal·lat el servidor web a Server. Fes el muntatge per a provar el mateix amb un túnel de port REMOT. Per a fer-ho, cal que el servidor ssh estigui muntat a Client i obrir el túnel des de Server (ara volem donar accés invers des del mateix servidor web).

Situació inicial

Per aprofitar la infraestructura de casa meu, faré un túnel local per accedir des d'Internet a un servidor web que es troba darrere un Firewall que no permet accés pel port 80 des d'Internet. Aquest firewall només té obert el port 2204 que està mapejat a un servidor SSH que farà d'intermediari entre nosaltres a Internet i el servidor web que es troba a la LAN.

Un altre aspecte a tenir en compte és el contingut de la pàgina web on accedirem. El meu servidor web està configurat per a retornar una pàgina d'Error 418 si se li demana per un domini que no existeixi com a VirtualHost; de manera que no és cap fallada si al comprovar el funcionament del túnel veiem aquesta pàgina d'error; ja que és esperat que així sigui.

Cas 1. Túnel local

Aquest primer cas ens serveix per a accedir a un servei que es trobi darrere un tallafocs que impedeixi l'accés directe des de la xarxa externa WAN; de manera que fem un by-pass a través d'un servidor SSH intermediari, ja dins la LAN, que té accés directe al formar part de la xarxa interna on es troba el servidor web, en aquest cas. D'aquesta manera, podem accedir al servidor utilitzant una connexió SSH a través d'una xarxa no-confiable com ara Internet: qualsevol espia veuria només una connexió SSH entre els 2 hosts, sense poder saber res més. Aquest cas pràctic podria servir per a afegir una capa de seguretat a un servidor HTTP pla per a xifrar el trànsit HTTP amb una capa SSH que xifri aquest trànsit que, normalment, seria pla (sense encriptar).

Procediment

Aquest primer cas tracta d'obrir una connexió SSH des del client cap al servidor web a través de la màquina intermitja que té habilitat SSH i es permet l'accés a través del port 2204 del firewall. Des de fora de la nostra xarxa local, necessitarem saber la IP pública del nostre router residencial; o bé tenir un servei de DDNS vinculat a un nom de host. Jo utilitzo DuckDNS. Sabent doncs, que el nom de domini que apunta a casa meu és gsola96.duckdns.org, obriré un túnel SSH cap aquest host pel port 2204 i mapejaré el port 9000 del meu Fedora cap al 80 del servidor web de la xarxa interna (192.168.7.230) amb la següent comanda:

ssh -p2204 -N -L 9000:192.168.7.230:80 guillem@gsola96.duckdns.org

Prova

Abans d'aixecar el túnel SSH des del nostre port 9000 cap al 2204 del servidor SSH, veiem que no hi ha cap servei web escoltant pel 9000 del nostre equip:

M11UF2EX11.png


Després d'executar la comanda anterior, veiem que al nostre port 9000 hi respon el servidor web de la xarxa local que es troba darrere el Firewall:

M11UF2EX12.png


Cas 2. Túnel remot

En aquest altre cas, fem a la inversa que l'anterior: la connexió SSH la llença el propi servidor web (ubicat darrere un firewall sense cap port obert) cap al client que es vol conectar (ubicat a Internet i amb un port obert conegut; o bé sense Firewall que el protegeixi). D'aquesta manera, el client podrà accedir a la web del servidor intern sense necessitat d'obrir cap port al tallafocs de la xarxa local. El màxim inconvenient en aquest sistema, respecte l'anterior, és que el túnel SSH s'ha d'aixecar prèviament des del servidor intern cap al client; però pot ser útil en una situació de tenir una plana web en desenvolupament per tal de donar accés als clients sense que estigui obert encara a Internet.

Procediment

Des del servidor web de la LAN obrirem un túnel remot cap al nostre equip (que es troba a una xarxa externa de la nostra LAN) pel port 22 (per defecte en SSH; encara que podem canviar-ho a la configuració del servidor SSH de l'equip). Aquest port l'haurem d'obrir en el nostre firewall d'equip (ja sigui firewalld o iptables) de manera que accepti la connexió remota. Llavors, des del nostre equip extern a la LAN podrem accedir al web intern pel port 10000 si executem la següent comanda:

ssh -N -R 10000:localhost:80 guillem@gsola96fedora.duckdns.org

S'ha de veure que accedeixo al host client utilitzant un nom de domini també de DuckDNS per no haver de recordar l'adreça IP, ja que és dinàmica i d'aquesta manera sé que el host concret sempre apuntarà a l'adreça IP que tingui en cada moment.

Prova

Igual que abans, si quan llenço el túnel des del servidor intern cap al client de l'exterior; aquest client podrà veure el contingut HTTP del servidor (que treu pel port 80) a través del 10000 del client:

M11UF2EX13.png