Passa ai contenuti principali

Reverse proxy

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.


da: https://www.linuxbabe.com/it-knowledge/differences-between-forward-proxy-and-reverse-proxy

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.

da: https://it.wikipedia.org/wiki/Proxy

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.


Commenti

Post popolari in questo blog

Telecamere Ip con accesso "nascosto"

Telecamere Ip con accesso "nascosto" Storia triste di un auto-hacking obbligato che mi ha fatto scoprire come la nostra privacy è realmente messa a rischi. Storia Ho acquistato dal mercatino/fiera del Radioamatore di Fasano quattro telecamere IP. La scatola riporta "Smart Camera" LF4810. Ne ho montata una e testata in tutte le sue funzionalità per oltre un mese. Chiaramente la manualistica scarsissima, come da tradizione in questi prodotti cinesi di costo molto concorrenziale, consiste in un "pieghevole" di 4 facciate. Chiaramente non erano documentate le impostazioni necessarie per attivare i protocolli ONVIF e RTSP che mi sono indispensabili per l'uso che ne devo fare. Nonostante questa scarsa documentazione dopo l'installazione base fatta con l'apposita app: tutto sembrava corretto. Chiaramente la prima azione che ho compiuto è stata quella di cambiare la password che di default è "123". Subito dopo h...

Dynamic DNS con Duckdns.org in HTTPS

Obiettivo Avere un dominio https con certificato valido da usare come endpoint pubblico per Homeassistant e per un WebHook per i bot telegram. Fase 1 Registrazione del dominio in un servizio di dynamic DNS come https://www.duckdns.org/   : Scegliere per quale sistema operativo installare il client che si occuperà dell'aggiornamento dell'ip: Seguire la semplice guida per la configurazione del processo cron: Fase 2 Creazione del certificato e installazione sul server. Di tutto questo si occuperà una applicazione che si chiama certbot. $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt install python-certbot-apache $ sudo certbot --apache -d ol3.duckdns.org -d www.ol3.duckdns.org Fase 3 Esporre il servizio https sulla rete pubblica. Aprire o reindirizzare la porta 443 verso l'host sul quale si è fatta la configurazione di certbot dal proprio router. Il certificato di certbot è valido per novanta giorn...

JHipster - Uso base

Cosa è JHipster è un "generatore di applicazioni" che fornisce tutto lo stack necessario ad implementare una applicazione web e/o a microservizi basata su Spring Boot e AngularJs. E' dotato di un marketplace di componenti già pronte: https://www.jhipster.tech/#modules E' dotato di uno strumento web per la modellazione dello schema E-R: https://start.jhipster.tech/jdl-studio/ Prerequisiti - Java 8  - Node.js (usare la versione LTS 64-bit) - NPM viene installato con Node.js ma va aggiornato      $ npm install -g npm - Per usare il JHipster Marketplace, installare Yeoman:       $ npm install -g yo Uso base Gli step, presi dal sito ufficiale sono questi: 1. Installare JHipster:       $ npm install -g generator-jhipster Nota: per installare una versione specifica del generator:   $ npm install -g generator-jhipster@6.0.5 2. Crea una nuova directory ed entra dentro questa:   $ mkdir ...