In questo capitolo si spiega come installare il software necessario per limitare e controllare l'uso di banda.
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.
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'.
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.
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
Si estragga il tutto in /var/tmp:
# tar xzpf squid-2.4.STABLE1-src.tar.gz
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
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.
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).
Ci si assicuri che nessuno bari usando un proxy che non sia il nostro. Proxy pubblici di solito usano le porte 3128 e 8080:
/sbin/ipchains -A input -s 192.168.1.1/24 -d ! 192.168.1.1 3128 -p TCP -j REJECT
/sbin/ipchains -A input -s 192.168.1.1/24 -d ! 192.168.1.1 8080 -p TCP -j REJECT
Si dovrà anche fare in modo che nessuno bari connettendosi direttamente ad internet (tramite IP masquerading) per scaricare le pagine web:
/sbin/ipchains -A input -s 192.168.1.1/24 -d ! 192.168.1.1 80 -p TCP -j REDIRECT 8080
Se tutto funziona, si aggiungano queste righe alla fine del nostro script di inizializzazione. Di solito è /etc/rc.d/rc.local.
Si potrebbe pensare di bloccare il traffico ftp (porte 20 e 21) per forzare gli utenti della nostra LAN ad usare Squid, ma questa non è una buona idea per almeno due ragioni:
Squid è un proxy http con supporto ftp, non un proxy ftp vero e proprio. Può scaricare da ftp, può anche inviare verso alcuni server ftp, ma non può eliminare o rinominare file su server ftp remoti.
Bloccando le porte 20 e 21, non si potranno eliminare o rinominare file su server ftp remoti.
IE5.5 ha un bug: non usa il proxy per ottenere la directory ftp. Si connette invece direttamente attraverso l'IP masquerading.
Bloccando le porte 20 e 21 non si potrà navigare nelle directory ftp usando IE5.5.
Quindi si dovranno bloccare i download ftp voluminosi usando altri metodi. Tratteremo questo argomento nel capitolo 4.
Ci si assicuri che nessuno bari usando un proxy che non sia il nostro. Proxy pubblici di solito usano le porte 3128 e 8080:
/sbin/iptables -A FORWARD -s 192.168.1.1/24 -d ! 192.168.1.1 --dport 3128 -p TCP -j DROP
/sbin/iptables -A FORWARD -s 192.168.1.1/24 -d ! 192.168.1.1 --dport 8080 -p TCP -j DROP
Si dovrà anche fare in modo che nessuno bari connettendosi direttamente ad internet (tramite IP masquerading) per scaricare le pagine web:
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Se tutto funziona, si aggiungano queste righe alla fine del nostro script di inizializzazione. Di solito è /etc/rc.d/rc.local.
Si potrebbe pensare di bloccare il traffico ftp (porte 20 e 21) per forzare gli utenti della nostra LAN ad usare Squid, ma questa non è una buona idea per almeno due ragioni:
Squid è un proxy http con supporto ftp, non un proxy ftp vero e proprio. Può scaricare da ftp, può anche inviare verso alcuni server ftp, ma non può eliminare o rinominare file su server ftp remoti.
Bloccando le porte 20 e 21 non si potranno eliminare o rinominare file su server ftp remoti.
IE5.5 ha un bug: non usa il proxy per ottenere la directory ftp. Si connette invece direttamente attraverso l'IP masquerading.
Bloccando le porte 20 and 21, non si potrà navigare nelle directory ftp usando IE5.5.
Si dovranno quindi bloccare i download ftp voluminosi usando altri metodi. Tratteremo questo argomento nel capitolo 4.