Reverse proxy: un componente principale per garantire la sicurezza dei server
Garantire un funzionamento sicuro di web server e Exchange server può rappresentare un problema per gli amministratori di rete. Infatti i servizi online, come il web o l’e-mail, sono disponibili dalla rete pubblica e quindi un collegamento diretto ad Internet rende i sistemi vulnerabili, quindi non immuni da malware e accessi indesiderati. Spesso viene perciò utilizzato un componente di rete che funge da intermediario, chiamato reverse proxy.
Che cos’è un reverse proxy?
Essenzialmente un proxy è un’interfaccia di comunicazione in rete, che accetta le richieste e risponde a queste al posto del server di destinazione. Nelle reti aziendali una struttura simile viene usata per permettere ai dispositivi client un accesso più controllabile ad Internet. Il server configurato come proxy rappresenta in questo caso l’unica connessione all’interno della rete pubblica e si parla così di un forward proxy.
Un forward proxy incanala tutte le richieste provenienti dalla rete interna e le inoltra con il proprio indirizzo al server di destinazione presente su Internet. Anche le risposte dei server raggiungono il proxy prima che vengano distribuite ai client corrispondenti, che rimangono così anonimi, a patto che non si tratti di un proxy trasparente. Per ridurre l’utilizzo della banda larga e accelerare l’apertura di una pagina web, i proxy vengono programmati in modo tale che i contenuti richiesti spesso vengano salvati temporaneamente nella cache, così da poter essere visualizzati senza effettuare una nuova richiesta al server.
Mentre un forward proxy protegge i client presenti in una rete da fattori esterni provenienti da Internet, un reverse proxy lavora nella direzione opposta, come lascia intuire il nome. Un proxy di questo tipo viene attivato come componente di sicurezza aggiuntivo a protezione di uno o più web server, per accettare al loro posto le richieste provenienti da Internet e inoltrarle ad un server di back end, che opera in background.
Un reverse proxy, in qualità di interfaccia di comunicazione aggiuntiva per proteggere la rete, può svolgere diverse funzioni, che servono a garantire la sicurezza del server di back end e a regolare nel migliore dei modi il traffico dati.
Reverse proxy: funzione e campi di applicazione
I reverse proxy vengono solitamente protetti da un firewall in una rete privata o installati in una zona demilitarizzata (DMZ) già stabilita. Così il reverse proxy rappresenta come il forward proxy l’unica connessione tra Internet e la rete privata. Tutte le richieste e il server di back end nella LAN percorrono così la stessa interfaccia di comunicazione, prima di venir inoltrati ai sistemi di destinazione veri e propri.
Una simile connessione consente di controllare il traffico dati in entrata, di mettere a disposizione diversi server con lo stesso URL, di distribuire equamente le richieste su più server e di accelerare l’apertura dei dati tramite il processo di caching. Un reverse proxy viene perciò impiegato nei seguenti campi di applicazione:
- Anonimizzazione: essendo l’unico accesso alla rete interna, un reverse proxy intercetta tutte le richieste al server in background e si comporta verso i client così come se avessero a che fare con il sistema di destinazione vero e proprio. Inoltre il proxy inoltra le richieste ai corrispettivi sistemi di destinazione nella LAN, accetta le loro risposte e le invia ai client che hanno effettuato la richiesta. I server di back end veri e propri rimangono così anonimi.
- Protezione e crittografia: un reverse proxy attivo offre la possibilità di installare sistemi di controllo come antivirus o filtri di pacchetto, che proteggono ulteriormente il server in background. Così il proxy server si configura come un altro componente della catena di sicurezza impostata tra Internet e la rete privata. In più, i reverse proxy si possono utilizzare per la crittografia. L’archiviazione dei certificati SSL sul proxy alleggerisce il carico del web server in background.
- Load balancing: tramite un reverse proxy attivo si può collegare un URL con diversi server all’interno della rete privata. Ciò offre la possibilità di distribuire le richieste in entrata su più server. Un load balancing simile previene il sovraccarico dei singoli sistemi e compensa in caso di malfunzionamenti di un server. Se un server non dovesse essere raggiungibile per via di errori hardware o software, il modulo di load balancing del proxy ridistribuisce le richieste in entrata sui server rimanenti. La disponibilità dei servizi server viene così garantita anche in caso di malfunzionamenti.
- Caching: per accelerare la velocità dei servizi server, il reverse proxy offre una funzione grazie alla quale si possono temporaneamente salvare nella cache le risposte server. Questo processo di caching consente al server proxy di rispondere autonomamente, in parte o completamente, a richieste ricorrenti. Così i contenuti statici come immagini o siti dinamici aperti spesso vengono conservati nella cache del proxy, in questo modo i dati richiamati dal server di back end sono di meno e l’accesso ai servizi web avviene più velocemente. Visto che per i contenuti che cambiano spesso, non si può sempre garantire che nella cache del proxy sia contenuta la versione più recente della pagina, si corre il rischio di fornire informazioni datate ai client che le richiedono.
Impostare il server Apache come reverse proxy
Per impostare un reverse proxy, risulta adatto Apache HTTP Server. Il web server conosciuto in tutto il mondo dispone di molti moduli per diverse funzioni proxy e bastano solo alcune stringhe di codice per configurarlo correttamente. La seguente guida indica come ampliare un’installazione Apache sul sistema operativo Ubuntu con il modulo necessario e creare un file di configurazione per il reindirizzamento. Il server Apache open source è rilasciato gratuitamente dalla Apache Software Fundation. Trovate un’introduzione a questo web server nel nostro articolo.
1. Installazione dei moduli proxy su Apache
Per poter utilizzare un server Apache come reverse proxy, avete bisogno del modulo mod_proxy, che implementa le funzionalità principali e si può ampliare a sua volta con diversi moduli aggiuntivi.
- mod_proxy_http comprende tutte le funzioni proxy per le richieste HTTP e HTTPS. Il modulo aggiuntivo supporta le versioni del protocollo HTTP/0.9, HTTP/1.0 e HTTP/1.1.
- mod_proxy_ftp è richiesto per rendere disponibili le funzioni del proxy per richieste FTP.
- mod_proxy_connect mette a disposizione le funzioni proxy per creare connessioni SSL.
- mod_proxy_ajp implementa il protocollo Apache JServ, Apache JServ Protocol (AJP), che viene utilizzato durante il load balancing, per reindirizzare le richieste all’application server in background.
- mod_cache, mod_disk_cache e mod_mem_cache implementano le funzioni di caching, che consentono di salvare temporaneamente i contenuti sul server Apache.
- mod_proxy_html consente la riscrittura di link HTML.
- mod_headers consente la manipolazione delle informazioni contenute nell’header HTTP.
- mod_deflate implementa la funzione di compressione.
Per installare il modulo mod_proxy con tutti i moduli aggiuntivi, basta dare questo comando:
sudo apt-get install libapache2-mod-proxy-html
Questo tutorial si concentra sulle funzioni principali del modulo Apache mod_proxy. Una descrizione dettagliata dei moduli aggiuntivi con tutte le direttive necessarie si trova nella documentazione ufficiale del progetto Apache.
2. Attivazione dei moduli richiesti
Per attivare i singoli moduli della funzione del proxy Apache, si utilizza il comando a2enmod. I moduli già attivi si possono, invece, disattivare con a2dismod. Per impostare un reverse proxy semplice per il web server memorizzato, basta caricare i moduli mod_proxy e mod_proxy_http:
sudo a2enmod proxy
sudo a2enmod proxy_http
Dopo che sono stati attivati i moduli, il server Apache deve essere riavviato:
sudo apache2 reload
3. Creare il file di configurazione
Per accettare le richieste del reverse proxy provenienti da Internet e per poterle inoltrare al giusto server nella rete locale, è necessario disattivare il file di configurazione 000-default.conf nella cartella /etc/apache2/sites-enabled e sostituirlo con un file virtual host, come esempio.conf. Così si consiglia di creare per ogni server di destinazione con un proprio IP un file virtual host separato, secondo lo schema seguente:
<VirtualHost *:80>
ServerName domain.tld
ServerAlias www.domain.tld
ProxyRequests Off
ProxyPass / http://123.456.7.89/
ProxyPassReverse / http://123.456.7.89/
</VirtualHost>
Le istruzioni della funzione proxy vengono definite all’interno della direttiva <VirtualHost>. Il tag di apertura comprende inoltre l’indirizzo IP comprensivo di numero della porta, sul quale il server Apache configurato come reverse proxy deve ascoltare le richieste. Se devono venire inclusi tutti gli indirizzi IP, si utilizza il segnaposto *, come si osserva nell’esempio. Le informazioni all’interno del tag VirtualHost vengono fornite anche sotto forma di direttive. A differenza del tag VirtualHost, queste direttive rimandano agli elementi, che definiscono come si devono elaborare le richieste in entrata e i pacchetti di risposta. Fondamentali sono soprattutto le direttive ServerName, ProxyPass e ReversePass.
- ServerName: la direttiva ServerName definisce a quale nome primario un server è raggiungibile su Internet. Si risale a questo tramite DNS o attraverso la directory /etc/hosts. Nell’esempio al server Apache viene dato il comando di accettare tutte le richieste fatte a domain.tld.
- ProxyPass: la direttiva ProxyPass definisce l’indirizzo di destinazione per un inoltro. Tutte le richieste che si indirizzano al ServerName impostato su un indirizzo pubblico, vengono reindirizzate dal reverse proxy all’indirizzo interno, che è compreso nella direttiva ProxyPass. Nell’esempio sarebbe l’IP fittizio 123.456.7.89.
- ProxyPassReverse: un proxy server non accetta solo le richieste, ma inoltra anche i pacchetti di risposta del server di back end ai client. Per evitare che queste risposte vengano fornite con informazioni false dell’header (cioè quelle del server in background), la direttiva ProxyPassReverse riscrive l’header delle risposte server, così che si regoli sul proxy server. Il server di back end rimane così anonimo.
Infine nell’esempio si trovano altre due direttive: ServerAlias e ProxyRequests, che però non mettono a disposizione del server funzioni di base e sono perciò facoltativi.
- ServerAlias: la direttiva ServerAlias consente di stabilire un nome alternativo per il server di destinazione, oltre ai name server primari.
- ProxyRequest: la direttiva ProxyRequests con l‘istruzione Off impedisce che il server Apache venga utilizzato come forward proxy, prevenendo così un possibile uso illecito.
Una volta che sono state definite le regole per la funzione proxy, la configurazione deve essere attivata dal terminale:
sudo a2ensite beispiel.conf
Il server Apache accetta ora tutte le richieste su domain.tld o www.domain.tld e le inoltra sotto forma di richieste proxy al server di back end con l’IP 123.456.7.89.