Si crei un utente "squid" sicuro:
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 |
# chown squid:squid /var/log/squid/
# chown -R squid:squid /opt/squid/
# chown -R squid:squid /cache/
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.
/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
/sbin/ipchains -A input -s 192.168.1.1/24 -d ! 192.168.1.1 80 -p TCP -j REDIRECT 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
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080