Presentazione del Proxy Inverso
In questo tutorial ti spiegherò come configurare un reverse proxy con Apache su Ubuntu (Adattando i comandi di installazione di Apache, questo tutorial potrà essere facilmente trasposto ad altre distribuzioni).
Prima di entrare nella parte tecnica facciamo il punto su cosa è un Reverse proxy?
Un proxy inverso è un server (Web) posizionato prima del server Web di destinazione in cui è ospitato il servizio Web (sito Web).
Quando i computer consultano un servizio Web che utilizza un proxy inverso, non accedono direttamente al server dove si trova l’applicazione, la richiesta HTTP arriva prima sul proxy inverso, che poi effettua la richiesta stessa al server di destinazione.
È lo stesso principio di un server proxy che troviamo nelle aziende per andare su Internet.
L’utilizzo di un proxy inverso presenta diversi vantaggi:
- Salvataggio dell’indirizzo IP (v4), i siti web1 e sito2 avranno su Internet lo stesso indirizzo IP, quello del proxy inverso.
- Aumentare il livello di sicurezza (Mod Security, Crowdsec, Fail2ban)
- Riduci il carico sui server web con caching e/o offload SSL
- Riscrivere il contenuto HTML
- Centralizza la gestione dei certificati SSL
- …
Per questo tutorial ho utilizzato un singolo computer con Ubuntu 22.04, per simulare i server web su cui sono ospitati i siti web ho utilizzato Docker.
Installa Apache2 su Ubuntu
Per impostazione predefinita Apache2 è disponibile nei repository Ubuntu, per beneficiare dell’ultima versione di Apache da una versione più recente di Apache2, esaminerò il repository ppa:ondrej/apache2.
L’uso del repository ppa:ondrej/apache2 non è obbligatorio.
Aggiungi il repository ppa:ondrej/apache2:
sudo add-apt-repository ppa:ondrej/apache2
Confermare l’aggiunta del deposito premendo il tasto Invio.
Viene aggiunto il deposito.
Aggiorna l’elenco dei pacchetti:
sudo apt update
Installa Apache2:
sudo apt install apache2 -y
Attendi durante l’installazione di Apache2 sul server:
Apache2 è installato.
Abilita il proxy inverso su Apache2
Per impostazione predefinita Apache2 non può essere configurato come proxy inverso, poiché Apache2 viene utilizzato principalmente come server web.
Affinché Apache2 possa essere utilizzato come Reverse Proxy, è necessario attivare il modulo proxy_http che si trova nella cartella: /etc/apache2/mods-available.
Per visualizzare l’elenco dei moduli Apache2 attivi, puoi vederli elencando il contenuto della cartella /etc/apache2/mods-enabled.
Per attivare la mod proxy_http inserisci il seguente comando:
sudo a2enmod proxy_http
Abilitando la mod proxy_http, è stata abilitata anche la mod proxy.
Per prendere in considerazione i nuovi moduli, è necessario riavviare Apache2.
sudo systemctl restart apache2
Se guardiamo ancora nella cartella /etc/apache2/mods-enabled, possiamo vedere i due moduli proxy e proxy_http.
Creazione e configurazione di host virtuali
Il funzionamento dei virtualhost è identico sia che utilizziamo Apache2 come server Web o come proxy inverso, solo le istruzioni saranno diverse nel file di configurazione.
I file virtualhosts vengono creati prima nella cartella /etc/apache2/sites-available.
Vai alla cartella:
cd /etc/apache2/sites-available
Creeremo ora un file per la configurazione del sito Website1:
sudo nano reverse-proxy-website1.conf
Ecco il contenuto del file:
Le impostazioni devono essere adattate al vostro ambiente
Spiegazioni dei parametri:
Collocamento | Spiegazione |
---|---|
ServerName | Nome di dominio associato al virtualhost |
ProxyPreserveHost | On|Off ti permette di mantenere l’intestazione Host durante il trasferimento della richiesta al server di destinazione, se utilizzi virtualhost sul server Web di destinazione, devi lasciare questo parametro a On. |
ProxyRequests | Off se questa direttiva viene passata a On, ciò consente ad Apache2 di agire come proxy per accedere a Internet come Squid. Per motivi di sicurezza deve essere impostato su Off altrimenti è possibile utilizzare il servizio Apache2 come proxy per effettuare lo spoofing di un indirizzo IP. |
ProxyPass | Consente di abbinare il percorso nell’URL al server di destinazione. Qui inviamo tutte le richieste / al server web http://127.0.0.1:20001/ |
ProxyPassReverse | Generalmente troviamo lo stesso valore di ProxyPass, questo permette di regolare l’URL nell’intestazione HTTP |
Ora che la configurazione dell’host virtuale è completa, creeremo un collegamento simbolico nella cartella /etc/apache2/sites-enabled per attivare la configurazione.
sudo ln -s /etc/apache2/sites-available/reverse-proxy-website1.conf /etc/apache2/sites-enabled/
Prima di ricaricare la configurazione, testeremo la configurazione per garantire che non vi siano errori bloccanti:
apachectl configtest
Se la sintassi è corretta, puoi ricaricare la configurazione:
sudo systemctl reload apache2
Ora potremo testare la configurazione, prima di fare un test, assicuriamoci che il dominio (url) punti al proxy inverso e non al server web di destinazione. Effettuata questa verifica, avviando un browser si è andati all’URL del virtualhost.
Possiamo garantire il passaggio attraverso il proxy Apache2 Reverse esaminando i log trovati/var/log/apache2/other_vhosts_access.log
sudo tail -f /var/log/apache2/other_vhosts_access.log
Non entrerò nei dettagli, inserirò solo le catture, ma farò la stessa cosa per il sito Website2.
Nei log posso validare il passaggio tramite il Reverse proxy.
Per una migliore leggibilità dei log, è possibile separare i log in file diversi per ciascun host virtuale.
Nella configurazione dell’host virtuale aggiungeremo i parametri LogLevel, ErrorLog e CustomLog.
Ricaricare la configurazione per tenere conto delle modifiche:
sudo systemctl reload apache2.
Nella cartella /var/log/apache2 possiamo vedere i file:
I log di navigazione vengono ora salvati nel file dedicato al virtualhost:
Ora sai come configurare Apache come proxy inverso per proteggere i tuoi server web.