29.4. Il file di configurazione /etc/squid/squid.conf

Tutte le impostazioni del server proxy Squid sono contenute nel file /etc/squid/squid.conf. Per l'avvio iniziale di Squid, non è necessario modificare il file. Tuttavia, è utile ricordare che i client esterni non sono inizialmente autorizzati ad accedere al proxy. Il proxy è disponibile per localhost. La porta di default è 3128. Il file di configurazione preinstallato /etc/squid/squid.conf fornisce informazioni dettagliate sulle opzioni e molti esempi. Quasi tutte le voci iniziano con # (le righe sono commentate) e le specifiche rilevanti sono riportate alla fine della riga. I valori indicati sono quasi sempre correlati ai valori di default, quindi se si rimuovono i simboli dei commenti senza modificare i parametri non ha generalmente alcun effetto. Se possibile, usare gli esempi e inserire le opzioni con i parametri modificati nella riga sottostante per poter ripristinare facilmente i valori di default e confrontarli con quelli modificati.

[Tip]Adattamento del file di configurazione dopo un aggiornamento

Dopo un aggiornamento da una versione precedente di Squid, è sempre consigliabile modificare il nuovo file /etc/squid/squid.conf e applicare solo le modifiche effettuate nel file precedente. Se si tenta di usare il vecchio file di configurazione squid.conf, è possibile che la configurazione non funzioni a causa delle modifiche apportate alle opzioni o nelle nuove opzioni.

29.4.1. Opzioni di configurazione generali (selezione)

http_port 3128

Questa è la porta utilizzata da Squid per ascoltare le richieste dei client. La porta di default è 3128, anche se viene comunemente utilizzata anche la porta 8080. Se necessario, è possibile specificare più numeri di porta separandoli con uno spazio.

cache_peer hostname type proxy-port icp-port

Immettere il proxy genitore, ad esempio nel caso in cui si desideri utilizzare il proxy dell'ISP. In hostname, immettere il nome e l'indirizzo IP del proxy da usare e in type immettere parent. In proxy-port immettere il numero della porta che viene fornito anche dall'operatore del proxy genitore per l'uso del browser, ossia 8080. Impostare icp-port su 7 o 0 se la porta ICP del proxy genitore non è nota e il suo uso è irrilevante per il provider. Inoltre, è possibile anche specificare un valore per default e no-query dopo i numeri di porta per evitare che venga utilizzato il protocollo IP. In questo caso Squid si comporta come un normale browser relativamente al proxy del provider.

cache_mem 8 MB

Questa voce definisce la quantità di memoria che può essere utilizzata da Squid per le risposte più comuni. L'impostazione di default è 8 MB. Questa voce non specifica la memoria utilizzata da Squid e non deve essere superata.

cache_dir ufs /var/cache/squid/ 100 16 256

La voce cache_dir definisce la directory in cui vengono salvati tutti gli oggetti sul disco. I numeri alla fine indicano lo spazio massimo su disco in MB e il numero di directory di primo e secondo livello. Non modificare il parametro ufs. Il valore di default è 100 MB di spazio occupato su disco nella directory /var/cache/squid e la possibilità di creare 16 sottodirectory ciascuna contenente oltre 256 sottodirectory. Quando si specifica lo spazio su disco utilizzabile, è necessario tenere conto anche dello spazio di riserva. In questo caso è opportuno impostare valori compresi tra il 50% (minimo) e l'80% (massimo) di spazio su disco libero. Gli ultimi due numeri relativi alle directory devono essere incrementati con cautela poiché un numero eccessivo di directory può ridurre le prestazioni del sistema. Se più dischi condividono la cache, immettere più righe cache_dir.

cache_access_log /var/log/squid/access.log, cache_log /var/log/squid/cache.log, cache_store_log /var/log/squid/store.log

Queste tre voci specificano le directory in cui Squid salva le azioni. Questi voci non devono essere generalmente modificate. Se Squid viene utilizzato da più sistemi contemporaneamente, è opportuno distribuire la cache e i file di registro su più dischi.

emulate_httpd_log off

Impostare questa voce su on per ottenere file di registro leggibili. Tuttavia, è utile ricordare che alcuni programmi di valutazione possono interpretare questa impostazione come valore.

client_netmask 255.255.255.255

Questa voce permette di nascondere gli indirizzi IP dei client nei file di registro. L'ultima cifra dell'indirizzo IP viene impostata su zero se si immette 255.255.255.0. Ciò permette di proteggere in qualche modo i client.

ftp_user Squid@

Questa voce permette di impostare la password che deve essere utilizzata da Squid per l'accesso a FTP anonimi. In alcuni casi è opportuno specificare un indirizzo e-mail valido perché alcuni server FTP controllano la presenza di un indirizzo per autorizzare l'accesso.

cache_mgr webmaster

Questa voce permette di impostare un indirizzo e-mail a cui inviare un messaggio nel caso in cui Squid si arresta inaspettatamente. L'impostazione di default è webmaster.

logfile_rotate 0

Se si esegue squid -k rotate, Squid ruota i file di registro protetti. I file sono numerati, quindi quando viene raggiunto un valore specifico, il file più vecchio viene sovrascritto. Il valore di default è 0 perché l'archiviazione e l'eliminazione dei file di registro in SUSE Linux vengono eseguiti da un lavoro cron impostato nel file di configurazione /etc/logrotate/squid.

append_domain <domain>

append_domain permette di specificare il dominio da aggiungere nel caso in cui non venga specificato alcun dominio. Generalmente è necessario immettere il proprio dominio. Quindi, se si immette www nel browser è possibile accedere al proprio server Web.

forwarded_for on

Se si imposta questa voce su off, Squid rimuove l'indirizzo IP e il oem del sistema del client dalle richieste HTTP. In caso contrario aggiunge all'intestazione una riga come:

X-Forwarded-For: 192.168.0.0
negative_ttl 5 minutes; negative_dns_ttl 5 minutes

Questi valori non devono essere generalmente modificati. Tuttavia, se si utilizza una connessione di accesso remoto, è possibile che Internet non sia sempre disponibile. Squid prende nota di tutte le richieste non andate a buon fine, quindi si rifiuta di emetterne di nuove anche nel caso in cui venga ristabilita la connessione a Internet. In questo caso, è necessario modificare minuti in secondi, fare clic su Ricarica nel browser e ristabilire la connessione di accesso remota dopo qualche secondo.

never_direct allow acl_name

Questo comando permette di forzare la connessione su un altro proxy per evitare che Squid acquisisca le richieste direttamente da Internet. Il proxy in questione deve essere stato immesso in cache_peer. Se si specifica all come acl_name tutte le richieste vengono inoltrate direttamente al server genitore. Questa operazione può essere necessaria, ad esempio, se si utilizza un provider che utilizza regole per l'uso dei proxy o che rifiuta l'accesso diretto a Internet al firewall.

29.4.2. Opzioni per il controllo degli accessi

Squid fornisce un sistema molto preciso per controllare l'accesso al proxy. Questo sistema può essere configurato in modo semplice e dettagliato mediante ACL, ossia usando elenchi con regole elaborati in sequenza. Prima di poter usare gli ACL, è necessario definirli. Alcuni ACL di default come all e localhost sono già presenti. La definizione di un ACL non è sufficiente a garantirne l'applicazione. Ciò si verifica infatti solo con le regole http_access.

acl <acl_name> <type> <data>

Per definire un ACL sono necessarie almeno tre specifiche. Il nome <acl_name> può essere selezionato in modo arbitrario. Per <type> è possibile selezionare una delle numerose opzioni disponibili nella sezione ACCESS CONTROLS del file /etc/squid/squid.conf. La specifica di <data> varia a seconda del tipo di ACL usato e può essere letto anche da un file, ad esempio tramite i nomi degli host, gli indirizzi IP o gli URL. Di seguito sono riportati alcuni esempi di base:

acl mysurfers srcdomain .my-domain.com
acl teachers src 192.168.1.0/255.255.255.0
acl students src 192.168.7.0-192.168.9.0/255.255.255.0
acl lunch time MTWHF 12:00-15:00
http_access allow <acl_name>

http_access definisce chi è autorizzato a usare il proxy e chi può accedere a contenuti specifici su Internet. In questo caso è necessario assegnare un ACL. localhost e all, già definiti in precedenza, permettono di autorizzare o rifiutare l'accesso tramite deny o allow. È possibile creare un elenco che contiene un qualsiasi numero di voci http_access ed elaborarle dal'alto verso il basso in base al momento in cui si verificano in modo da consentire o respingere l'acceso all'URL corrispondente. L'ultima voce deve sempre essere http_access deny all. Nell'esempio seguente localhost può accedere liberamente a tutti gli oggetti, mentre gli host non hanno alcun tipo di accesso.

http_access allow localhost
http_access deny all

In un altro esempio basato su queste regole, il gruppo teachers ha sempre accesso a Internet, mentre il gruppo studenti può accedervi solo dal lunedì al venerdì durante l'ora di pranzo.

http_access deny localhost
http_access allow teachers
http_access allow students lunch time
http_access deny all

L'elenco con le voci http_access deve essere immesso, a scopo di leggibilità, solo nella posizione designata nel file /etc/squid/squid.conf, ossia tra il testo:

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

and the last

http_access deny all
redirect_program /usr/bin/squidGuard

Questa opzione permette di specificare un proxy per il reindirizzamento, ad esempio squidGuard, per bloccare gli URL indesiderati. L'accesso a Internet può essere controllato singolarmente per vari gruppi di utenti grazie all'autenticazione proxy e ad ACL appropriati. squidGuard è un pacchetto che deve essere installato e configurato a parte.

auth_param basic program /usr/sbin/pam_auth

Se gli utenti devono essere autenticati sul proxy, impostare il programma corrispondente come pam_auth. Quando si accede a pam_auth per la prima volta viene visualizzata una finestra di login in cui è necessario immettere il nome utente e la password. Inoltre, è necessario comunque un ACL in modo che solo i client con un login valido possano usare Internet:

acl password proxy_auth REQUIRED

http_access allow password
http_access deny all

La voce REQUIRED dopo proxy_auth può essere sostituita con un elenco di nomi utente permessi o con il percorso della directory che contiene questo elenco.

ident_lookup_access allow <acl_name>

Questa voce permette di eseguire una richiesta ident per tutti i client con ACL definiti in modo da ricercare l'identità di ciascun utente. Se si applica all a <acl_name>, l'impostazione è valida per tutti i clienti. È necessario anche che sia in esecuzione un daemon ident su tutti i client. Per Linux installare il pacchetto pidentd, per Microsoft Windows è possibile scaricare gratuitamente il software necessario da Internet. Per essere certi che l'accesso venga consentito solo ai client con ident valido, definire l'ACL corrispondente:

acl identhosts ident REQUIRED

http_access allow identhosts
http_access deny all

Sostituire REQUIRED con l'elenco di nomi utente autorizzati. L'uso di ident rende le operazioni molto più lento perché le ricerche ident vengono ripetute per ciascuna richiesta.