19.2. Squid ed i Delay pools

L'idea di realizzare questa interessante features è partita dalla Western Australian University che intendeva limitare i costi riducendo il traffico. Il codice sorgente di questo hack fu introdotto nella versione 1 Squid e prendeva il nome di DELAY_HACK. Nella versione 2 di Squid questa funzione ha preso il nome di delay pools. Nella versione 2.2 di Squid, il codice del delay pools è stato totalmente riscritto per offrire maggiori performance ed affidabilità.

Per utilizzare questa funzionalità è necessario specificare la seguente opzione di ./configure

% ./configure --enable-delay-pools
  

e ricompilare Squid.

Attenzione: molto spesso i package binari forniti con le distribuzioni non sono compilati con il supporto per Delay pools.

Non è possibile limitare la velocità di una singola connessione HTTP ma è invece possibile limitare la banda per singole workstation o di intere subnet. È inoltre possibile limitare la banda per singoli utenti o gruppi di utenti. Per ridurre l'utilizzo di bandwidth su una specifica subnet viene definita una ACL che identifica la subnet stessa. Per limitare il traffico di una specifica workstation si definisce una ACL che identifica quella macchina. Per limitare un gruppo di macchine è possibile utilizzare un delay_pools di classe 2 o 3. Infine, per limitare il traffico di singoli utenti o gruppi di utenti, é possibile definire delle ACL basate sull'autenticazione degli utenti e su ACL esterne.

19.2.1. Limitare la banda per singole connessioni a 128 kbps

Un esempio che limita la banda a 128 Kbps per singole connessioni provenienti da 64 subnet (partendo dall'indirizzo 192.168.0.0 per finire all'indirizzo 192.168.63.255), impostiamo le ACL che identificano il traffico da limitare

acl only128kusers src 192.168.1.0/255.255.192.0 
acl all src 0.0.0.0/0.0.0.0 
   

impostiamo il TAG delay_pools

delay_pools 1 
delay_class 1 3 
delay_access 1 allow only128kusers 
delay_access 1 deny all 
delay_parameters 1 64000/64000 -1/-1 16000/64000 
   

19.2.2. Limitare la banda totale a 512 kbps

Vediamo ora un esempio con il quale limitiamo la banda totale di Squid a 512 Kbps, anche in questo caso impostiamo la ACL che identifica il traffico da limitare

acl all src 0.0.0.0/0.0.0.0
   

impostiamo il TAG delay_pools

delay_pools 1
delay_class 1 1
delay_access 1 allow all
delay_parameters 1 64000/64000    # 512 kbits = 64 kbytes per second
   

19.2.3. Limitare la banda con una linea a 2 Mbps

Ipotiziamo di avere a disposizione una connessione dedicata con una banda massima di 2 Mbps, definiamo ora alcune ACL che ci consentono di identificare il traffico da limitare

acl outgoing src 192.168.100.2/255.255.255.255
acl student src 192.168.200.0/255.255.255.0
acl admin src 192.168.300.0/255.255.255.0
acl magic_words1 url_regex -i 192.168
acl magic_words2 url_regex -i ftp .exe .mp3 .vqf .tar.gz .gz .rpm \
.zip .rar .avi .mpeg .mpe .mpg .qt .ram .rm .iso .raw .wav .mov
   

impostiamo il TAG delay_pools

delay_pools 2
   

abbiamo detto che la linea dedicata è un link HDSL a 2Mbits, il valore di 2 Mbits è pari a 256 Kbytes per secondo e 256 KB/s sono pari a 5 KB/s. Nell'esempio seguente impostiamo 256 KB/s di bandwith per l'intero network, ma solo 5 KB/s verranno riservati ad ogni nodo

delay_class 1 2
delay_parameters 1 256000/256000 5000/256000
delay_access 1 allow magic_words2
delay_access 1 allow student
delay_access 1 allow admin
   

con il valore -1/-1 indichiamo che non vi sono limiti di sorta per il traffico locale

delay_class 2 2
delay_parameters 2 -1/-1 -1/-1
delay_access 2 allow magic_words1
   

eliminiamo il download nel caso in cui il file sia più grande di 1MB

reply_body_max_size 1024 KB