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


