Server Proxy

Server Proxy

Con il termine Proxy si indica un particolare tipo di server che funge da intermediario nell’ambito di una comunicazione tra un client ed un altro server, ovvero si tratta di un server che si interpone tra il client e il server effettivamente oggetto della richiesta da parte del client. Il client quindi si connette al proxy, il quale a sua volta inoltrerà la richiesta ricevuta dal client al server presso il quale si trova la risorsa richiesta (ad esempio una pagina web) e la riceverà indietro, restituendola a sua volta al client che ne ha fatto richiesta. Il proxy diventa quindi “la porta” tra il client e il mondo esterno, e il loro impiego è nato per aggiungere una struttura di incapsulamento ai sistemi distribuiti. Oggi il loro uso principale consiste nell’offrire una maggiore sicurezza ed anonimato durante la navigazione, come nel caso dei server proxy della rete TOR. Altri server proxy si occupano di gestire sistemi di caching per velocizzare l’accesso alle pagine web da parte dei client, mentre altri ancora vengono utilizzati per filtrare le connessioni entranti ed uscenti monitorando il traffico, quindi svolgono le funzioni di firewall verso il web.

Tipologie di proxy

Un proxy può risiedere da qualsiasi parte tra il client e il server, ad esempio anche nel PC locale dell’utente o sullo stesso web server destinatario, così come può essere su un altro server interposto tra i due host. Un proxy va quindi considerato a tutti gli effetti come un server intermediario, che opera come una vera e propria interfaccia di rete, e si occupa di gestire e “filtrare” le comunicazioni tra il client (o la rete) e il mondo esterno. Le principali tipologie di proxy sono le seguenti:

Forward Proxy

Questo tipo di server si occupa di gestire tutte le richieste provenienti dalla rete interna e provvede quindi ad inoltrarle (forward) su Internet al server finale utilizzando il proprio indirizzo. Le risposte dei server di destinazioni saranno a loro volta inviate al Forward Proxy, il quale a sua volta le inoltrerà nuovamente ai client. I client in questo modo resteranno anonimi, aumentando privacy e sicurezza. Il forward proxy ha quindi come compito principale quello di proteggere i client della sua rete da possibili minacce esterne, oltre che a garantirne l’anonimato. Questo genere di proxy si utilizza quindi in quei contesti nei quali è richiesto un livello di sicurezza ulteriore tra la rete locale ed Internet.

Figura 30: Forward Proxy
Figura 30: Forward Proxy

Reverse proxy

Si tratta di un tipo di proxy che lavora in maniera opposto al Forward Proxy. Ad esempio, un reverse proxy agisce come intermediario per i server ad esso associati consentendogli di essere contattati da qualsiasi client. Molti web server di comune utilizzo offrono funzionalità di reverse proxy al fine di proteggere framework applicativi da possibili vulnerabilità del protocollo HTTP. Un tipico utilizzo di reverse proxy è quello che prevede di rendere accessibile ai client un server che si trova dietro un firewall. Il reverse proxy può essere utilizzato anche come sistema di load balancing tra più server o per mappare più server sulla stessa URI e, come per il Forward Proxy, aggiunge un ulteriore livello di sicurezza nella comunicazione tra i client e i server su Internet. Altro importante utilizzo dei reversi proxy è quello di gestire i sistemi di cache nei web server. Ad esempio, sia Apache che NginX possono essere utilizzati come reverse proxy e gestire le richieste HTTP/HTTPS salvando le risposte (quindi le pagine web) in una cache per poterle inviare nuovamente e più velocemente al client che ne ha fatto richiesta.

Un utilizzo molto diffuso in ambito web server è quello che prevede di utilizzare NginX come reverse proxy per Apache. Questo significa che NginX resta in ascolto verso l’esterno, sulle porte 80 o 443 (per HTTPS), mentre Apache resta in ascolto sulle porte interne 7080 o 7081 (per HTTPS). NginX quindi intercetta tutto il traffico in entrate e in uscita verso il web server Apache. L’utilizzo di NginX come reverse Proxy per Apache consente, ad esempio, di utilizzare ulteriori sistemi di ottimizzazione delle performance, come ad esempio Varnish Cache o altri sistemi di gestione della cache lato server. Il Reverse Proxy NGinX, in questo particolare stack molto usato nel mondo del web hosting, agisce come segue: non appena riceve la richiesta di una pagina web, se questa è presente nella cache allora la recupera e la trasmette direttamente al client, senza alcun intervento da parte di Apache. Se invece la pagina richiesta non è presente nella cache, allora NGinX passerà la richiesta ad Apache, il quale a sua volta potrà ad esempio passare la richiesta all’interprete PHP per far generare dinamicamente la pagina, oppure preleverà il file HTML. Ottenuta la risorsa richiesta Apache provvederà a passarla nuovamente ad NginX, il quale a sua volta la restituirà al client.

Figura 31: Reverse Proxy
Figura 31: Reverse Proxy