Chi lo avrebbe mai detto!!! Squid come reverse proxy? E bene si…
Squid, famoso e stabile Proxy, ha la grande funzionalità di essere utilizzato come un vero e proprio Reverse Proxy e acceleratore web grazie al caching. L’utilizzo come Reverse Proxy è molto utile se si deve gestire con un unico IP pubblico più siti web senza dover esporre i WebServer direttamente su Internet. Vediamo dunque come funziona e come configurarlo.
Innanzi tutto iniziamo a farci un idea visiva di come potrebbe essere utilizzato attraverso lo schema qui sotto:
In questa guida faremo riferimento proprio allo schema qui sopra, utilizzando come esempio:
- Squid Server 192.168.0.100 (Server Reverse Proxy)
- sito1 192.168.0.101 (Web Server sito1)
- sito2 192.168.0.102 (Web Server sito2)
- sito3 192.168.0.103 (Web Server sito3)
Il funzionamento è molto semplice, le richieste che i client o utenti faranno per visualizzare i siti, verranno forwardate su Squid che ha sua volta sarà configurato per rigirare le richieste al WebServer in base alla risorsa che i client stanno chiedendo.
Per prima cosa salviamo il file di configurazione originale facendoci una copia di backup:
# cp /etc/squid/squid.conf /etc/squid/squid.conf_bk
A questo punto è possibile cancellare l’intero contenuto del file di configurazione squid.conf e iniziare ad inserire solo le righe di configurazione essenziali.
Ecco come dovrebbe essere il file di configurazione di Squid per rendere possibile lo schema che abbiamo visto sopra.
Definiamo la porta 80 e VirtualHost di default:
http_port 80 accel defaultsite=www.sito1.com vhost acl Safe_ports port 80 # http acl CONNECT method CONNECT http_access deny !Safe_ports
Impostiamo le informazioni di contatto dell’amministratore di sistema in caso di errori:
cache_mgr admin@miosito.com
Impostazione di Caching:
cache_replacement_policy heap LFUDA memory_replacement_policy heap GDSF cache_mem 1500 MB maximum_object_size_in_memory 2 MB maximum_object_size 96 MB cache_dir ufs /var/spool/squid 10000 32 256 cache deny all
Impostazione della lingua degli errori (Opzionale):
error_default_language it
Impostazioni delle connessioni:
forwarded_for on acl max_con maxconn 50 http_access deny max_con all
ACL (Access Control List) dei siti web da abilitare:
# www.sito1.com acl sito1 dstdomain sito1.com www.sito1.com # www.sito2.com acl sito2 dstdomain sito2.com www.sito2.com # www.sito3.com acl sito3 dstdomain sito3.com www.sito3.com
Abilitiamo i siti sopra indicati e neghiamo tutto le altre richieste:
http_access allow sito1 http_access allow sito2 http_access allow sito3 http_access deny all always_direct allow all
Impostiamo i formati dei Log. Ricordo che il tipo di formato combined server per poter far leggere correttamente ad Awstats i log e generare le statistiche dei vari siti.
logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt logformat squidmime %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt [%>h] [%<h] logformat common %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st %Ss:%Sh logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
Per Awstats >7.1 utilizzare:
logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt logformat common %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st %Ss:%Sh logformat combined %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh logformat referrer %ts.%03tu %>a %{Referer}>h %ru logformat useragent %>a [%tl] "%{User-Agent}>h"
Separiamo i log in base ai siti:
# Log sito1 access_log /var/log/squid/www.sito1.com-access_log combined sito1 # Log sito2 access_log /var/log/squid/www.sito2.com-access_log combined sito2 # Log sito3 access_log /var/log/squid/www.sito3.com-access_log combined sito3
Log di cache:
cache_log /var/log/httpd/cache_log
Nascondiamo le informazioni di sistema e di Squid per avere maggiore sicurezza:
httpd_suppress_version_string on visible_hostname proxy.miosito.com
Una volta modificata la configurazione a vostro piacimento, dobbiamo dire al sistema dove rigirare le richieste. Questo si fa semplicemente indicando nel file hosts il nome della risorsa e l’ip. Nell’esempio fatto sopra aggiungieremo nel file hosts (/etc/hosts) le seguenti righe:
192.168.0.101 www.sito1.com sito1.com 192.168.0.102 www.sito2.com sito2.com 192.168.0.103 www.sito3.com sito3.com
A questo punto riavviamo o startiamo squid e proviamo a collegarci al nostro sito e vedere nei log cosa accade:
X.X.X.X - - [15/Jul/2016:06:13:55 +0100] "GET http://prometheusproject.it/ HTTP/1.1" 200 13986 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2009042315 Ubuntu/8.04 Firefox/3.0.10" TCP_MISS:HIER_DIRECT
Questo è tutto.
Nelle prossime guide vedremo come mettere in blacklist gli IP che vogliamo bannare dai siti, mettere in protezione, tramite autenticazione, alcune pagine del sito (es. http://miosito.com/wp-admin).