13.6. Il Cache Manager

Il Cache Manager è una componente interna di Squid per la gestione remota tramite protocollo HTTP. É possibile utilizzare una applicazione web del tipo Common Gateway Interface (CGI), cachemgr.cgi(8), che consente di visualizzare le diverse informazioni e statistiche relative al processo Squid esposte dal Cache Manager. Per utilizzare correttamente cachemgr.cgi(8) è necessario installare un server web, che può anche non risiedere sulla macchina dove è in esecuzione Squid.

A partire dalla versione 2.5 STABLE10, cachemgr.cgi(8) utilizza il file cachemgr.conf per determinare a quali server si è autorizzati ad accedere. Ogni linea specifica una coppia server:port seguita da una descrizione opzionale:

# This file controls which servers may be managed by cachemgr.cgi
#
# The file consists of one server per line on the format
# hostname:port description
#
# Specifying :port is optional. If not specified then
# the default proxy port is assumed.
#
# hostname is matched using shell filename matching, allowing
# * and other shell wildcards.
localhost
cache.example.com:8080
  

Esistono anche applicazioni commerciali di terze parti che accedono direttamente allínterfaccia di Cache Manager senza utilizzare un server web.

13.6.1. Configurare cachemgr.cgi con Apache

In prima istanza assicurarsi che sia stato installato Apache e che la directory che contiene gli script cgi-bin utilizzi la direttiva ScriptAlias, è necessario modificare il file httpd.conf definendo la direttiva ScriptAlias per il singolo VirtualHost

<VirtualHost 192.168.0.4>
ScriptAlias /squid/cgi-bin/ /usr/local/squid/libexec/
</VirtualHost>
   

ora assicuriamoci che solo alcune workstation possano accedere al cachemanager, sempre all'interno della direttiva VirtualHost inseriremo le seguenti informazioni

<VirtualHost 192.168.0.4>
<Location /usr/local/libexec/squid/cachemgr.cgi>
order allow,deny
allow from workstation.domain.com
</Location>
</VirtualHost>
   

possiamo inserire più linee per ogni direttiva allow, possiamo autorizzare interi domini o intere subnet. In alternativa è anche possibile proteggere il Cache Manager impostando una password di accesso sul server web utilizzando la direttiva Location. Per proteggere l'accesso al Cache Manager con una password inseriremo le seguenti direttive nel file httpd.conf

<VirtualHost 192.168.0.4>
<Location /usr/local/libexec/squid/cachemgr.cgi>
AuthUserFile /etc/htpasswd
AuthGroupFile /dev/null
AuthName User/Password Required
AuthType Basic
require user cachemanager
</Location>
</VirtualHost>
   

il file /etc/htpasswd contiene gli userID le password in formato MD5, non dimentichiamo mai che il protocollo HTTP non è un protocollo sicuro in quanto i dati transitano sempre in chiaro, maggiori informazioni sul web server Apache sono disponibili alla URLs http://httpd.apache.org/.

13.6.2. Configurare cachemgr.cgi con IIS 6

É possibile utilizzare una macchina Windows per connettersi al Cache Manager di Squid, anche su sistemi non Windows.

Innanzitutto é necessario procurarsi un package binario per Windows ed estrarne il file cachemgr.cgi.

Quindi si deve definire una directory virtuale IIS cgi-bin e modificarne i permessi di accesso in questo modo:

Utente

Permessi

Administrators

Full Control

NETWORK SERVICE

Read & Execute

SYSTEM

Full Control



Definire una Allowed Web Server Extension "Squid cachemgr.cgi" ed aggiungere il file cachemgr.cgi nei Required Files.

Modificare la directory virtuale cgi-bin definendone l'Application Name come "cgi-bin" e assegnando "Scripts and Executables" come Execute Permissions

Disattivare infine l'accesso anonimo sulla directory virtuale e attivare uno schema di autenticazione, tipicamente Integrated Windows

Se si sta utilizzando IIS 5.0 (Windows 2000) o IIS 5.1 (Windows XP), si deve procedere in modo analogo, ma senza cambiare i permessi e non é necessario definire la Web Server Extension.

13.6.3. Impostare la password di accesso al Cache Manager

Tramite il Cache Manager è possibile visualizzare diverse informazioni sullo stato della cache ed è anche possibile bloccare il processo di Squid, è dunque una buona idea definirne dei livelli di accesso. Solitamente si impostano diversi livelli di sicurezza del Cache Manager ricorrendo all'utilizzo di più password utilizzando il TAG cachemgr_passwd. Rammentiamo ancora al lettore che il traffico http non è sicuro perchè i dati attraversano la rete in chiaro. Per proteggere questi dati da occhi indiscreti è possibile ricorrere agli standard SSL[1] o TLS[2] che sono alla base protocollo HTTPS (RFC 2818 - http://www.faqs.org/rfcs/rfc2818.html). L'utilizzo del TAG all'interno del file squid.conf è il seguente

cachemgr_passwd [password] [azione] [azione]
   

dove password è appunto la parola chiave che intendiamo utilizzare, il TAG azione corrisponde ad un comando del Cache Manager

cachemgr_passwd pippo shutdown
cachemgr_passwd paperino info stats/objects
   

con questo esempio viene impostata come password la parola pippo per consentire l'arresto di Squid tramite Cache Manager. Utilizzando la parola chiave paperino potremo visualizzare le informazioni relative al processo Squid.

13.6.4. Definire una ACL per consentire l'accesso al Cache Manager

L'accesso al Cache Manager avviene utilizzando il protocollo identificato in Squid come cache_object, il TAG che definisce l'utilizzo di questo protocollo è proto cache_obiect

acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
   

nell'esempio precedente, la macchina 127.0.0.1 è localhost, il webserver Apache è in funzione sulla stessa macchina che esegue Squid (localhost). A questo punto dobbiamo definire delle regole che consentono l'accesso al Cache Manager da parte di localhost

http_access deny manager !localhost
http_access allow all
   

nel caso in cui il server web é installato su una macchina diversa da localhost

acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl mywebserver src 192.168.0.4/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
http_access deny manager !localhost !mywebserver
http_access allow all
   

dopo aver installato e configurato Apache, definite le parole chiave per l'accesso alle varie funzionalità del Cache Manager ed infine aver definito le ACL, siamo finalmente in grado di utilizzare il cachemgr.cgi.

13.6.5. Interrogare il Cache Manager utilizzando la linea di comando

Anche se l'interfaccia web di cachemgr.cgi consente di visualizzare le informazioni sullo stato della cache in maniera chiara e dettagliata possiamo anche interrogare il Cache Manager direttamente, senza dover configurare alcun user-agent ed utilizzando dal prompt dei comandi l'utility squidclient(8). I prerequisiti per questo tipo di configurazione sono gli stessi che per l'accesso tramite cachemgr.cgi.

Nel caso in cui squidclient(8) non sia in path, potrebbe essere comodo definire un link simbolico all'interno del path di sistema che consenta di avviare il comando in maniera agevole:

% ln -s /usr/local/squid/bin/squidclient /usr/sbin/squidclient
   

ora possiamo finalmente interrogare il Cache Manager di Squid, nel caso in cui sia stata definita una password, basterà usare le opzioni -U e -W:

% squidclient -U manager -W pippo mgr:info | less
...
...
Squid Object Cache: Version 2.5.STABLE6
Start Time:     Sat, 25 Sep 2004 07:07:20 GMT
Current Time:   Sat, 25 Sep 2004 07:48:13 GMT
Connection information for squid:
   

ecco un'altro esempio di query via squidclient(8) che ci consentirà di determinare il numero di richieste HTTP in corso

% squidclient mgr:info | grep 'HTTP'
HTTP/1.0 200 OK
        Number of HTTP requests received:       11
        Average HTTP requests per minute since start:   0.2
        HTTP Requests (All):   0.00000  0.00000
   

elenchiamo ora una serie di interrograzioni al Cache Manager di Squid, il significato di queste query è stato già trattato dettagliatamente in precedenza nella sezione Utilizziamo Net-SNMP

13.6.5.1. Process size

% squidclient mgr:info | less
...
...
Process Data Segment Size via sbrk(): 2244 KB
        Maximum Resident Size: 0 KB
    

13.6.5.2. Page Fault Rate

% squidclient mgr:info | grep 'Page faults'
        Page faults with physical i/o: 464
    

13.6.5.3. HTTP Request Rate

% squidclient mgr:info | grep 'Number of HTTP requests'
        Number of HTTP requests received:       16
% squidclient mgr:info | grep 'Average HTTP requests'
        Average HTTP requests per minute since start:   0.2
% squidclient mgr:60min | grep 'client_http.requests'
client_http.requests = 0.004419/sec
    

13.6.5.4. ICP Request Rate

% squidclient mgr:counters | grep icp.queries_recv
icp.queries_recv = 0
    

13.6.5.5. DNS Service Time

% squidclient mgr:5min | grep dns.median_svc_time
dns.median_svc_time = 0.000000 seconds
    

13.6.5.6. File Descriptors

% squidclient mgr:info | grep 'Number of file desc currently in use'
        Number of file desc currently in use:   12
    

13.6.5.7. CPU Usage

% squidclient mgr:5min | grep cpu_usage
cpu_usage = 0.000000%
    

Note

[1]

SSL è l'acronimo di Secure Socket Layer

[2]

TSL è l'acronimo di Transport Layer Security