Squid come Reverse Proxy

By | novembre 20, 2016

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:

reverseproxysquid

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).

Save

Save

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *