Utilizzo di Squid come Proxy Server

di Stefano Sasso

1. Introduzione

In questo articolo vedremo come configurare Squid come proxy-cache. Squid si comporta come un intermediario che riceve le richieste dai vari client e le invia al server competente. Quando giunge una risposta ne salva una copia sul disco e ne manda una al client richiedente. Il vantaggio si dimostra quando più client richiedono lo stesso oggetto: il proxy server recupera la copia che aveva precedentemente salvato sul disco e la invia al client che l'ha richiesta senza dover contattare di nuovo il server.

2. Introduzione a Squid

Squid è uno dei proxy server Open Source più diffusi in quanto è molto stabile, flessibile e ad alte prestazioni; Squid supporta i protocolli HTTP, FTP e GOPHER, inoltre i protocolli SSL, HTTPS, TSL sono pienamente supportati in modalità tunneling tra client e server.

3. Installazione

3.1 Requisiti di sistema

I prerequisiti di Squid sono minimi: si richiedono la presenza di GCC e Perl, normalmente installati di default in ogni distribuzione.

3.2 Download dei sorgenti, compilazione, installazione

La prima operazione da fare è scaricare l'ultima versione stabile di Squid da www.squid-cache.org.(Al momento in cui scrivo la versione stabile è: squid-2.5.STABLE3)
Una volta effettuato il download dei sorgenti è necessario scompattare l'archivio:

tar xzvf squid-2.5.STABLE3.tar.gz

Ci portiamo nella directory appena creata

cd squid-2.5.STABLE3

e procediamo con la compilazione el'installazione

./configure --prefix=/usr/local/squid

make all

make install

Se l'operazione termina senza errori il binario principale di Squid si trova sotto /usr/local/squid/sbin/ .
Per rendere le cose più semplici è consigliato inserire la directory /usr/local/squid/sbin alla variabile PATH.

4. Configurazione base

Iniziamo ora la configurazione editando il file squid.conf presente in /usr/local/squid/etc/ . Nel file aggiungiamo al posto giusto le seguenti variabili:

http_port 3128

è la porta in cui Squid rimane in ascolto

visible_hostname proxy.miodominio

è l'hostname del proxy

cache_dir ufs /usr/local/squid/var/cache 500 16 256

definisce la directory dove verranno archiviate le pagine richieste. Il primo numero indica la dimensione della cache in Mb

cache_mgr root@miodominio

l'email dell'amministratore della cache

5. Controllo di accesso

Squid offre un sistema raffinato per il controllo dell'accesso alla cache: con l'uso di cosiddetti "acl" (= access control list); questo sistema è molto semplice da usare e configurabile in diversi modi. Si tratta di elenchi con regole che vengono elaborate una dopo l'altra.

La direttiva acl definisce un tipo di accesso. Si possono abilitare utenti, gruppi di indirizzi IP, orari di accesso, protocolli e così via...
Consente due forme utilizzabili:

acl aclname acltype stringa
acl aclname acltype "file"

Se si usa un file gli argomenti vanno inseriti uno per linea.

La situazione più comune che si presenta è consentire l'accesso alla cache solo alle macchine e agli utenti autorizzati.
Prima di iniziare bisogna attivare un programma per l'autenticazione esterna. Per fare questo ci portiamo nella cartella helpers/basic-auth/NCSA presente nella directory dei sorgenti, quindi lanciamo

make

make install

Una volta attivato il supporto all'autenticazione è possibile intervenire su squid.conf per apportare le dovute modifiche:

auth_param basic program /usr/local/squid/libexec/ncsa_auth /usr/local/squid/etc/passwd

auth_param basic realm Proxy Cache Authentication

Il file contenente le password (/usr/local/squid/etc/passwd) deve essere generato con l'utility htpasswd fornita con il web server Apache.

Ora, sempre su squid.conf aggiorniamo le ACL

acl password proxy_auth REQUIRED

Possiamo anche aggiungere gli indirizzi IP delle nostre reti

acl network1 src 192.168.0.0/255.255.255.0

acl network2 src 192.168.15.0/255.255.255.0

Ora non ci resta che attivare le politiche e negare tutto ciò che non è stato esplicitamente autorizzato (In alcuni squid.conf alcune delle seguenti righe potrebbero essere già presenti e decommentate, e quindi non occorre aggiungerle. L'importente è che tutte le politiche vengano scritte prima della riga http_access deny all eventualmente già presente.)

http_access deny !password

http_access allow localhost

http_access allow network1

http_access allow network2

http_access deny all

6. Avvio del server

Prima di avviare il server è necessario creare alcune directory:

cd /usr/local/squid/var

mkdir -m 777 cache logs

Ora dobbiamo inizializzare la cache con

/usr/local/squid/sbin/squid -z

Questo comando va lanciato dopo l'installazione e successivamente solo quando si vuole reinizializzare (= pulire, svuotare) la cache.

Per avviare il server digitare:

/usr/local/squid/sbin/squid

e per disabilitarlo:

/usr/local/squid/sbin/squid -k shutdown .

 

Ecco un esempio del file squid.conf


# File: squid.conf
# Created by stone (stone -at- dscnet.org)
# Date: 27/02/2004


# TAG: http_port : la posta in cui squid resta in ascolto
http_port 3128

# TAG: visible_hostname : il nome host che verrà visto
visible_hostname proxy.miodominio.com

# TAG: cache_mgr : l'email dell'amministratore della cache
cache_mgr root@miodominio.com

# ACL: access control list : non deve tenere in cache i cgi
acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY

# TAG: cache_mem : la ram utilizzata dalla cache; per avere prestazioni ottimali
# dovrebbe essere 1/4 della ram del sistema
cache_mem 128 MB

# TAG: cache_dir : la directory dove deve venir memorizzata la cache
# il primo numero si riferisce alla dimensione della cache in Mb
cache_dir ufs /usr/local/squid/var/cache 1024 16 254

# TAG: cache_access_log : il file di log per gli accessi
cache_access_log /usr/local/squid/var/log/access.log

# TAG: cache_log : i log della cache
cache_log /usr/local/squid/var/log/cache.log

# TAG: cache_store_log : i log di storage
cache_store_log /usr/local/squid/var/log/store.log

# TAG: emulate_httpd_log : scrive i log in una forma più leggibile
emulate_httpd_log on

# TAG: mime_table : il file di configurazione per i tipi MIME
mime_table /usr/local/squid/etc/mime.conf

# TAG: dns_nameservers : i/il nostro/i DNS
dns_nameservers 127.0.0.1 192.168.0.14 192.168.0.196

# ACL generali
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.0/255.255.255.0
acl SSL_ports port 443 563
acl Safe_ports 80 81 21 443 563 70 210 1025-65535
acl CONNECT method CONNECT

# ACL per l'accesso alla cache dalla/e nostra/e rete/i
acl mynet1 src 192.168.0.0/255.255.255.0
acl mynet2 src 10.0.0.0/255.0.0.0
acl mynet3 src 192.168.10.0/255.255.255.0

# Le regole per l'accesso alla cache e a internet
http_access allow localhost
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow mynet1
http_access allow mynet2
http_access allow mynet3
# Ora neghiamo tutto ciò che non è concesso esplicitamente
http_access deny all

icp_access allow localhost
icp_access allow mynet1
icp_access allow mynet2
icp_access allow mynet3
icp_access deny all
miss_access allow localhost
miss_access allow mynet1
miss_access allow mynet2
miss_access allow mynet3
miss_access deny all

# squid.conf END

 


www.gnustile.net