3. Installazione e configurazione del software necessario

In questo capitolo si spiega come installare il software necessario per limitare e controllare l'uso di banda.

3.1. Installazione di Squid con l'opzione "delay pools"

Come detto precedentemente, Squid ha una funzionalità chiamata "delay pools", che permette di controllare la banda disponibile per i download. Purtroppo nella maggior parte delle distribuzioni Squid viene fornito senza questa opzione.

Quindi se Squid è già installato c'è una una brutta notizia: si dovrà disinstallarlo e poi reinstallarlo nuovamente, abilitando i delay pool come illustrato più avanti.

  1. Per ottenere prestazioni ottimali dal proxy Squid è preferibile creare una partizione separata per la sua cache, chiamata /cache/; la sua dimensione dovrebbe essere all'incirca di 300 megabyte, variabile secondo i propri bisogni.

    In caso non si sappia creare una partizione separata, si può creare la directory /cache/ su una partizione principale, ma le prestazioni di Squid ne risentiranno un po'.

  2. Si crei un utente "squid" sicuro:

    # useradd -d /cache/ -r -s /dev/null squid >/dev/null 2>&1

    Nessuno potrà fare login come squid, nemmeno l'utente root.

  3. Si scarichino i sorgenti di Squid da http://www.squid-cache.org.

    Al momento della stesura, la versione più recente era Squid 2.4 stable1:

    http://www.squid-cache.org/Versions/v2/2.4/squid-2.4.STABLE1-src.tar.gz

  4. Si estragga il tutto in /var/tmp:

  5. # tar xzpf squid-2.4.STABLE1-src.tar.gz

  6. Si compili e si installi Squid (scrivere tutto su un'unica riga):

    # ./configure --prefix=/opt/squid --exec-prefix=/opt/squid --enable-delay-pools --enable-cache-digests --enable-poll --disable-ident-lookups --enable-truncate --enable-removal-policies

    # make all

    # make install

3.2. Configurazione di Squid per usare i delay pool

  1. Si configuri il file squid.conf (situato in /opt/squid/etc/squid.conf):

    #squid.conf
    # Ogni opzione in questo file è molto ben documentata nel file squid.conf originale
    # e su http://www.visolve.com/squidman/Configuration%20Guide.html
    #
    # Le porte su cui Squid si porrà in ascolto
    http_port 8080
    icp_port 3130
    # per i cgi-bin non verrà usata la cache
    acl QUERY urlpath_regex cgi-bin \?
    no_cache deny QUERY
    # Quantità di memoria usata da Squid. Beh, Squid ne userà ben di più.
    cache_mem 16 MB
    # 250 significa che Squid userà 250 megabyte di spazio su disco.
    cache_dir ufs /cache 250 16 256
    
    # File dove Squid salverà i log.
    cache_log /var/log/squid/cache.log
    cache_access_log /var/log/squid/access.log
    cache_store_log /var/log/squid/store.log
    cache_swap_log /var/log/squid/swap.log
    # Periodo di rotazione dei file prima di essere cancellati.
    # Leggere le FAQ per ulteriori informazioni.
    logfile_rotate 10
    
    redirect_rewrites_host_header off
    cache_replacement_policy GDSF
    acl localnet src 192.168.1.0/255.255.255.0
    acl localhost src 127.0.0.1/255.255.255.255
    acl Safe_ports port 80 443 210 119 70 20 21 1025-65535
    acl CONNECT method CONNECT
    acl all src 0.0.0.0/0.0.0.0
    http_access allow localnet
    http_access allow localhost
    http_access deny !Safe_ports
    http_access deny CONNECT
    http_access deny all
    maximum_object_size 3000 KB
    store_avg_object_size 50 KB
    
    # Impostare queste voci se si vuole che il proxy funzioni in modalità trasparente.
    # Avere un proxy trasparente significa che generalmente non si dovranno
    # configurare i browser di tutti i client, ma ci sono anche alcuni
    # inconvenienti.
    # Lasciare queste righe decommentate non darà problemi.
    httpd_accel_host virtual
    httpd_accel_port 80
    httpd_accel_with_proxy on
    httpd_accel_uses_host_header on
     
    # Tutti gli utenti della rete locale saranno visti dai server web esterni
    # come se usassero tutti Mozilla per Linux. :)
    anonymize_headers deny User-Agent
    fake_user_agent Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.6+) Gecko/20011122
     
    # Per rendere la connessione ancora più veloce, si scrivano due righe simili
    # a quelle qui sotto. Punteranno ad un proxy server di gerarchia superiore
    # che sarà usato dal nostro Squid. Ci si ricordi di impostare come server quello che
    # risulta più veloce!
    # Si misurino i ping, i traceroute e tutto il resto.
    # Ci si assicuri che le porte http e icp siano corrette.
    
    # Si tolgano i segni di commento (#) dalle righe che iniziano con "cache_peer" se
    # necessario. Questo è il proxy che verrà usato per tutte le connessioni...
    #cache_peer w3cache.icm.edu.pl parent 8080 3130 no-digest default
    
    # ...tranne per le connessioni ad indirizzi ed IP che iniziano con "!".
    # E` una buona idea non usare uno superiore
    #cache_peer_domain w3cache.icm.edu.pl !.pl !7thguard.net !192.168.1.1
    
    # Questo è comodo quando si vuole usare il Cache Manager.
    # Si copi cachemgr.cgi nella directory cgi-bin del proprio server web.
    # Lo si può raggiungere via browser digitando
    # l'indirizzo http://il-proprio-server-web/cgi-bin/cachemgr.cgi
    cache_mgr propria@email
    cachemgr_passwd secret_password all
     
    # Questo è il nome dell'utente con cui Squid si identificherà.
    cache_effective_user squid
    cache_effective_group squid
     
    log_icp_queries off
    buffered_logs on
     
     
    ##### DELAY POOLS
    # Questa è la parte più importante per il traffic shaping con Squid.
    # Per una descrizione dettagliata si consulti il file squid.conf o la 
    # documentazione su http://www.squid-cache.org
    
    # Non si vogliono limitare i download sulla rete locale.
    acl magic_words1 url_regex -i 192.168
    
    # Si vuole limitare i download di questi tipi di file.
    # Tutto questo va su una sola riga.
    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
    # Non sono compresi .html, .gif, .jpg e simili poiche' in genere non occupano 
    # una banda eccessiva.
    
    # Si vuole limitare la banda durante il giorno e permettere una piena 
    # occupazione di banda durante la notte.
    # Attenzione! Con la riga acl qui sotto probabilmente i download si
    # interromperanno alle 23:59. Si leggano le FAQ in questo testo se si vuole evitare
    # questo tipo di comportamento.
    acl day time 09:00-23:59
     
    # Ci sono due delay_pools diversi
    # Si legga la documentazione di Squid per familiarizzare con 
    # delay_pools e delay_class.
    delay_pools 2
     
    # Primo delay pool
    # Non si vuole ritardare il traffico locale.
    # Ci sono tre classi di delay pool; qui ci si limiterà ad usare solo la seconda.
    # Prima classe di delay(1) del secondo tipo(2).
    delay_class 1 2
     
    #-1/-1 significa che non ci sono restrizioni.
    delay_parameters 1 -1/-1 -1/-1
     
    #la parola magica magic_words1, pari a 192.168, definita in precedenza
    delay_access 1 allow magic_words1
     
    
    # Secondo delay pool.
    # Si vuole rallentare il download dei file menzionati in magic_words2.
    # Seconda classe di delay (2) del secondo tipo (2).
    delay_class 2 2
     
    # I numeri seguenti sono valori in byte;
    # ci si ricordi che Squid non considera i bit di start e di stop
    # 5000/150000 sono i valori per l'intera rete
    # 5000/120000 sono i valori per il singolo IP
    # dopo che i file scaricati superano i 150000 byte,
    # (o anche due o tre volte questo valore)
    # continueranno ad essere scaricati a circa 5000 byte/s
    delay_parameters 2 5000/150000 5000/120000
    
    # "day" è stato impostato precedentemente come l'intervallo tra le 09:00 e le 23:59.
    delay_access 2 allow day
    delay_access 2 deny !day
    delay_access 2 allow magic_words2
    
    
    #EOF

    Una volta configurato il tutto, ci si deve assicurare che tutto ciò che si trova sotto le directory /opt/squid e /cache appartenga all'utente "squid".

    # mkdir /var/log/squid/

    # chown squid:squid /var/log/squid/

    # chmod 770 /var/log/squid/

    # chown -R squid:squid /opt/squid/

    # chown -R squid:squid /cache/

    Adesso tutto è pronto per lanciare Squid. Quando lo si fa per la prima volta, si devono creare le sue directory di cache:

    # /opt/squid/bin/squid -z

    Si lanci Squid, controllando che tutto funzioni correttamente. Un buono strumento per la verifica è IPTraf; lo si può trovare su http://freshmeat.net. Ci si assicuri di aver impostato correttamente il proxy sui browser dei client (192.168.1.1 porta 8080 nel nostro esempio):

    # /opt/squid/bin/squid

    Se tutto funziona, si aggiunga la riga /opt/squid/bin/squid alla fine degli script di inizializzazione. Di solito è /etc/rc.d/rc.local.

    Altre utili opzioni di Squid potrebbero essere:

    # /opt/squid/bin/squid -k reconfigure (riconfigura Squid se si è modificato il file squid.conf)

    # /opt/squid/bin/squid -help :) autoesplicativo

    Si potrebbe anche copiare cachemgr.cgi nella directory cgi-bin del proprio server WWW, per utilizzare un utile Cache Manager.

3.3. Risoluzione dei problemi rimanenti

Bene, è stato installato Squid ed è stato configurato per fargli usare i delay pool. Scommetto che nessuno vuole essere vincolato, in special modo gli utenti ingegnosi della nostra LAN. Probabilmente cercheranno di evitare i limiti che gli abbiamo imposto solo per scaricare i loro mp3 preferiti un po' più velocemente (causandoci così un bel po' di mal di testa).

Suppongo che sulla nostra rete si starà usando l'IP masquerading, in modo che gli utenti possano usare IRC, ICQ, e-mail, ecc. Questo va bene, ma si deve essere sicuri che gli utenti della LAN usino il nostro Squid con delay pool per accedere alle pagine web ed usino ftp.

La maggior parte di questi problemi può essere risolto usando ipchains (Linux con kernel 2.2.x) o iptables (Linux con kernel 2.4.x).