Apache2 Mod Proxy

La pagina sorgente di questi appunti è questa

Si raccomanda di eseguire anche la parte (sempre in questa pagina di secure your server), i proxy aperti possono essere molto pericolosi.

Il modulo fa da proxy o da gateway. Implementa le funzionalità da FTP, CONNECT (for SSL), HTTP/0.9, HTTP/1.0, and HTTP/1.1.
Ci sono diversi moduli oltre al mod_proxy, vi si trova anche mod_proxy_http, mod_proxy_ftp and mod_proxy_connect. In questo modo si possono caricare dinamicamente solo alcuni moduli usando la direttiva LoadModule.
C'è anche il modulo mod_cache che fornisce le funzionalità di caching insieme ad altri moduli relativi. Per contattare server remoti usando ssl/tls si usa mod_ssl.
Ognuno ha la sua pagina di configurazione

apt-get install libapache2-mod-proxy-html
a2enmod proxy
a2enmod proxy_connect
a2enmod proxy_http

Problema in redhat/centos 6

C'è una specie di impostazione di sicurezza che impedisce il proxy dando come errore qualcosa del tipo

Permission denied: proxy: HTTP: attempt to connect to

per risolvere bisogna lanciare questo comando
/usr/sbin/setsebool httpd_can_network_connect true

Con il comando sopra al riavvio però si perde l'impostazione per renderla permanente bisogna aggiungere l'opzione -P
setsebool -P httpd_can_network_connect on

Forward and Reverse Proxies

Queste sono le due modalità di configurazione di apache.

Forward proxy è un sito intermediario tra il client e il sito destinatario. Il client manda una richiesta al proxy, questo manda una richiesta al sito destinatario e restituisce la richiesta al client.
Un uso tipico è quello di fornire un accesso ai client che hanno qualche limitazione di firewall. Il forward proxy può usare mod_cache per ridurre l'uso della network.

Nelle impostazioni del client (il browser di solito) si deve specificare la connessione.

Il forward proxy viene attivato usando la direttiva ProxyRequest. Dato che i forward proxy permette ai client di connettersi ad altri server nascondendo la loro origine bisogna stare attenti a securizzare la cosa.

Il REVERSE proxy invece è trasparente, il client non si accorge nemmeno che questo stia avvenendo.

Usi tipici del reverse proxy sono fornire connettività a siti bloccati da fw, bilanciare il carico, fare caching per servizi lenti, raggruppare più server sotto la stessa url.

Un revers proxy viene attivato tramite la direttiva ProxyPass o attraverso il flag nella direttiva RewriteRule. Non è necessario mettere ad on ProxyRequest per configurare il reverse proxy.

Basic Examples

Ecco un esempio di forward proxy. Ovviamente Allow from all è molto pericolo.

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so

Servername testsuvpn.com

ProxyRequests On
ProxyVia On

<Proxy *>
    Order deny,allow
    Deny from all
    Allow from all
</Proxy>

Ecco un esempio di reverse proxy trasparente. In questo modo accediamo a un sito che sta sulla porta 8080 attraverso la porta 80.

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so

Servername testsuvpn.com
ServerAlias  test.com

ProxyRequests Off

<Proxy *>
        Order deny,allow
        Allow from all
</Proxy>

##### questa direttiva serve per preservare le url
ProxyPreserveHost On
###################

ProxyPass         /myapp  http://localhost:8080/myapp
ProxyPassReverse  /myapp  http://localhost:8080/myapp

Combinazione proxy pass e virtual host. Attenzione che va in ordine di inserimento quindi se inserisco prima il / prenderà tutto e non arriverà mai a /app1

<VirtualHost *>
        ServerName nomeserver.nomedominio.com
        ProxyPass               /app1     http://192.168.3.14:8080/app1
        ProxyPassReverse        /app1     http://192.168.9.14:8080/app1
        ProxyPass               /app2      http://192.168.9.14:8080/app2
        ProxyPassReverse        /app2      http://192.168.9.14:8080/app2
        ProxyPass               /app3    http://192.168.9.14:8080/app3
        ProxyPassReverse        /app3    http://192.168.9.14:8080/app3
        ProxyPass               /               http://192.168.9.14:8081/       
        ProxyPassReverse        /               http://192.168.9.14:8081/ 
        ErrorLog                /var/log/sites/nomeapp-error_log
        CustomLog               /var/log/sites/nomeapp-access_log common
</VirtualHost>

Proxy e Alias

Se dobbiamo fare in modo che un apache oltre a fare ProxyPass serva anche alcune pagina dobbiamo definire un alias. Il problema è che il proxy pass ha sempre la precedenza rispetto all'alias indipendentemente dalla posizione nel file di configurazione. Per risolvere questo problema dobbiamo dire al proxy pass di non risolvere questo tipo di url e quindi dopo che lui la scarta l'Alias funzionerà

        Alias "/gis" "/var/www/gis/"
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
        ProxyPass /gis !
        ProxyPass               /app  http://127.0.0.1:8180/app
        ProxyPassReverse        /app  http://127.0.0.1:8180/app

If you want to proxy ssl websites you need to have the directive SSLProxyEngine

       ProxyPass               /tab/admin/systeminfo       https://tab.mydomain.com/admin/systeminfo
        ProxyPassReverse        /tab/admin/systeminfo       https://tab.mydomain.com/admin/systeminfo

        SSLProxyEngine on

and probably but not sure
sudo a2enmod ssl
sudo a2enmod proxy_balancer
Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License