Squid Mini HOWTO

Da Faber Libertatis.

Indice della pagina

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.

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.

Installazione

L'installazione di squid è semplice: basta dare il comando

# apt-get install squid squid-common

Configurazione base

Iniziamo ora la configurazione editando il file squid.conf presente in /etc/squid/ . Nel file aggiungiamo al posto giusto o modifichiamo le seguenti direttive:

http_port 3128

è la porta in cui Squid rimane in ascolto

visible_hostname proxy.miodominio

è l'hostname del proxy

cache_dir ufs /var/spool/squid 500 16 256

definisce la directory dove verranno archiviate le pagine richieste. Il primo numero indica la dimensione della cache in Mb (in questo caso 500 Mb), il default è 100 Mb. Il secondo numero è il numero di sottodirectory di primo livello che verranno usate per la cache. Il terzo numero è il numero di sottodirectory di secondo livello.

cache_mgr root@miodominio

indichiami qui l'email dell'amministratore della cache

Se sono state modificate le impostazioni di cache_dir è necessario rigenerare la struttura della cache con il comando

# /etc/init.d/squid stop
# squid -z
# /etc/init.d/squid start

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. Ecco cosa aggiungere al file di configurazione per consentire la navigazione solo a determinati utenti:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic realm Proxy Cache Authentication

Il file contenente le password (/etc/squid/passwd) può 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 abilitate alla navigazione

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

Per rendere effettive le modifiche dobbiamo riavviare squid con il comando

# /etc/init.d/squid restart

Esempio di squid.conf

Ecco un esempio del file squid.conf

# File: squid.conf
# Created by Stefano Sasso (ste A dscnet PUNTO org)

# 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 le pagine dinamiche
acl CGI urlpath_regex cgi-bin \?
acl ASP urlpath_regex asp \?
acl PHP urlpath_regex php \?
acl JSP urlpath_regex jsp \?
no_cache deny CGI ASP PHP JSP

# 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 /var/spool/squid 500 16 256

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

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

# TAG: cache_store_log : i log di storage
cache_store_log /var/log/squid/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/share/squid/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

Autenticazione locale

Nel file /etc/squid/squid.conf si cerca una serie di righe commentate che iniziano tutte per auth_param (naturalmente davanti c'è il cancelletto #). Sotto si scrive:

auth_param basic program /usr/lib/squid/pam_auth -n squid
auth_param basic children 5
auth_param basic realm Nome del tuo proxy
auth_param basic credentialsttl 45 minutes

Il che significa: fai partire 5 child (processi figli del proxy squid) che facciano autenticazione via PAM (l'autenticazione standard in Linux) come programma squid, il nome del reame (quello che compare sulla finestra di autenticazione del browser) è "Nome del tuo proxy" e le credenziali durano 45 minuti (nei nostri internet point gratuiti è stato deciso di permettere sessioni di 45 minuti, dopo naturalmente uno si può riautenticare a meno che non lo si cacci via).

Poi, da qualche parte sotto la riga:

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

Inserire queste righe:

acl password proxy_auth REQUIRED
http_access allow password
http_access allow localhost

A questo punto si crei un file /etc/pam.d/squid come root, e scriverci dentro le seguenti righe:

@include common-auth
@include common-account
@include common-session

Dove si dice: per autenticarti, gestire la validità dell'account e la sessione usa sempre l'autenticazione con /etc/passwd.

Adesso si deve far riavviare squid:

sudo /etc/init.d/squid reload