Rimane l'ultimo problema: come possiamo far raggiungere guest_web dall'Internet?
Poniamo che il router esegua il NAT tra l'indirizzo IP pubblico statico 80.80.80.24:80 e l'indirizzo IP locale di host (DMZ: 192.168.0.24:80), ovvero, a seguito dell'immissione da browser remoto di http://80.80.80.24 (o URL corrispondente, quale ad esempio http://www.mioserverhost.com, se vi è corrispondenza nome-IP), risponde il nostro host (una volta che vi sia stato installato Apache).
Ho espressamente indicato che il NAT, cioè, come abbiamo capito, la traslazione degli indirizzi IP, viene abilitato per il server Web solamente per la porta 80, dacché normalmente così avviene, essendo le rimanenti porte chiuse a livello di firewall.
Ok, ma come fare per raggiungere, invece, guest_web? Semplice: mediante host stesso che funge da proxy di livello applicativo (reverse proxy).
In tal modo client e guest_web sono divisi da una ulteriore entità che si incarica di gestire lo scambio delle informazioni; quest'entità è Apache dell'host stesso. In sintesi, il browser remoto si connette al reverse proxy (Apache di host), il quale rindirizza la comunicazione HTTP (TCP su porta 80) verso un altro Apache, quello che gli verrà indicato nel suo file di configurazione, virtual host per virtual host. Per il browser è come se il web server di origine fosse l'Apache di host, anche se così non è.
Tale soluzione aumenta ulteriormente la sicurezza dell'insieme, in quanto dall'Internet si avrà accesso diretto al solo sistema host, e non a server_web. Di conseguenza, in caso di exploit, l'aggressore potrebbe (nel caso sfruttasse vulnerabilità di Apache) trovarsi su server host e non sul computer d'interesse. Vediamo come fare ad impostare Apache come reverse proxy.
Configurare l'Apache di host come reverse proxy
Affinchè Apache si occupi di rindirizzare (tutte) le connessioni HTTP come sopra spiegato è necessario abilitare i moduli opportuni (facenti già comunque parte dell'installazione standard) e modificare il file di configurazione relativo al virtual host di default.
Per abilitare i moduli di proxy per Apache, digitiamo da shell come utente root:
a2enmod proxy a2enmod proxy_http
Configuriamo ora Apache affinché le connessioni HTTP in arrivo a 192.168.0.24 siano rindirizzate verso 192.168.0.202, modificando appunto il file 000-default
:
mc -e /etc/apache2/sites-enabled/000-default
All'interno del file dovremmo includere le seguenti istruzioni:
<VirtualHost 192.168.0.24> # No forward proxy ProxyRequests Off # Chi può accedere alla funzionalità di proxy <proxy> Order deny,allow Allow from all </proxy> ProxyPass / http://192.168.0.202/ ProxyPassReverse / http://192.168.0.202/ ProxyPreserveHost On </VirtualHost>
La direttiva ProxyPreserveHost
è stata inserita per rendere il proxy davvero invisibile, agli occhi di browser e server agli estremi, di modo da non comportare possibili problemi di compatibilità dovuti alla sostituzione degli header HTTP da parte del proxy. Riavviando Apache il cerchio si chiude e potremmo usare, finalmente, la nostra configurazione sicura.