Reverse Proxy
Andando alla ricerca di soluzioni per la navigazione sicura e anonima sicuramente ci si è imbattuti in servizi di proxy. Ecco: il reverse proxy fa proprio il contrario e può rappresentare una soluzione valida per l'esposizione di servizi in un contesto enterprise.
Forward Proxy
I proxy per la navigazione in sicurezza ed in anonimato, ma anche utilizzati per accedere a contenuti non destinati all'area geografica dalla quale ci si collega, sono forward proxy. Sono dei servizi che ricevono delle richieste di collegamento verso uno specifico servizio online da uno specifico client.
Essi tengono una mappa ma il client richiedente e il servizio richiesto in modo che al servizio arrivi la richiesta dal proxy e quando il servizio risponde al proxy questo sappia a chi inoltrare la risposta. Nell'immagine sopra Alice è il client e Bob è il fornitore di servizi.
Questo consente di far risultare al servizio, Bob, che la richiesta arrivi dal proxy e solo il proxy sa che a chiedere i servizi di Bob è stata Alice. Così il client, Alice, è anonima verso il fornitore di servizi, Bob, Alice se risiede in un'area geografica dove Bob non vuole o non può fornire servizi, mentre verso il proxy si, Alice riceverà comunque i servizi. Se il fornitore di servizi provasse a contattare il client (scansione delle porte o altra attività di attacco) otterrebbe le risposte dal proxy e non del client reale.
Reverse Proxy
Il servizio di interesse, in questo articolo, invece funziona al contrario del forward proxy ed infatti viene detto reverse proxy.
Il reverse proxy da la possibilità di offrire servizi online, forniti nella maniera più eterogenea, in maniera strutturata e filtrata. Le richieste avranno un unico punto di arrivo: il proxy server, questo conoscerà dove andare a rifornirsi per somministrare il servizio richiesto. Saprà anche in che modo e con quali protocolli fornirlo il servizio ed avrà la possibilità di bilanciare il carico e rappresentare un primo filtro di sicurezza.
Funzionalità di un reverse proxy
- Load balancing e global server load balancing
Un reverse proxy server ricevendo le richieste dei client e conoscendo chi e dove vengono implementati i servizi richiesti è il nodo da incaricare per fare da bilanciatore affinché indirizzi il carico in maniera gestita. Se i servizi vengono forniti da fonti esterne, non gestite direttamente nella rete aziendale, e replicate fa "global server load balancing" andando ad utilizzare le fonti più scariche o più economiche.
- Firewall
La copertura funzionale a livello di sicurezza della rete e delle applicazioni offerta da un reverse proxy è notevole. Prima di tutto semplifica la gestione delle macchine e dei servizi implementati sulla rete aziendale dei server perchè, esponendo solo le porte di specifici servizi non sarà necessario mettere in sicurezza ogni server perché di ogni server verrà esposta la sola porta del servizio specifico. Inoltre sarà semplificata la gestione della sicurezza dell'intera infrastruttura perché si avrà un unico punto di accesso verso l'esterno. Ogni politica di difesa da attacchi, ad esempio un DDoS, basterà implementarla e aggiornarla, testartla solo sulla frontiera definita dal reverse proxy server.
- Cache
I vantaggi offerti dalle soluzioni di reverse proxy per quanto riguarda la replicazione locale delle risorse (cache) può offrire vantaggi in scenari come quelli relativi a risorse largamente accedute e utilizzate delle quali può essere vantaggioso creare una copia locale o prossima all'utilizzatore/utilizzatori più assidue.
- SSL encryption
Il canale criptato da creare in questo scenario di interesse per questo articolo sarà unico verso il reverse proxy server dal quale si accederanno tutti i servizi.
Nginx come reverse proxy
Vediamo come configurare Nginx come reverse proxy.
Installazione in ubuntu server:
apt update
apt install nginx
Configurazione di base:
La prima cosa da fare è disabilitare l'host virtuale che viene preparato con l'installazione per Ubuntu:
unlink /etc/nginx/sites-enabled/default
Aggiungere il primo script di configurazione di un reverse proxy creando un file di configurazione apposito:
cd /etc/nginx/sites-available
nano reverse-proxy.conf
Inserire nel file appena creato il seguente testo che imposta un reverse proxy verso la porta 80 della porta 8000 del localhost:
server {
listen 80;
listen [::]:80;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
location / {
proxy_pass http://127.0.0.1:8000;
}
}
Nella directory "site-available" si tengono le configurazioni che si stanno testando, perchè vengano utilizzate dal motore vanno copiate o linkate in "site-enabled":
ln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/reverse-proxy.conf
Testiamo la soluzione:
nginx -t
Che dovrebbe restituire:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Puntando la porta 80 del reverse proxy dovremmo ottenere il servizio sulla 8000.
Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale
Commenti
Posta un commento