Configurazione minimale generica
Questa e` una configurazione minimale adatta a Squid standard di Debian. Puo` andare come punto di partenza, ma e` chiaro che la configurazione di squid e` cosi` complessa che puo` anche darsi che non vada bene per niente per voi. Come sempre, YMMV. Il file e` /etc/squid.conf.
QUESTA GUIDA E` RIFERITA A SQUID 2.7, ma dovrebbe funzionare piu` o meno anche con Squid 3.x
Dal momento che rispetto al default cambia la configurazione della cache, consiglio di eseguire squid -z dopo avere messo in opera questa configurazione.
# porta su cui squid ascolta per l' HTTP http_port 8080 # quanta cache in RAM (anche di piu`, se hai ram) cache_mem 2048 MB # quanta cache sul disco e dove. cache_dir diskd /var/spool/squid 4096 64 256 # Cache sul disco disabilitata: # cache_dir null /tmp # Fai risoluzione inversa degli host che si connettono a squid e mostrali nel log. # Roba da paranoici, per sapere chi ha fatto cosa. Di solito non serve. # ATTENZIONE: PUO` RALLENTARE MOLTO SQUID se il dns locale non risolve a rovescio gli host della lan # log_fqdn on # Mostra nei log i termini delle GET http (dopo il carattere "?") # e` sempre per paranoici e control freaks. strip_query_terms off #Dove sono i log access_log /var/log/squid/access.log squid # TTL della pagine irraggiungibili e delle richieste DNS. # Tenuti bassi per evitare che un problema momentaneo diventi un'ora di down. negative_ttl 5 seconds positive_dns_ttl 60 seconds negative_dns_ttl 5 seconds # ACL per tutti acl QUERY urlpath_regex cgi-bin \? acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 901 # SWAT acl Safe_ports port 631 # cups acl purge method PURGE acl CONNECT method CONNECT acl local_lan src <ip address>/<mask> http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow local_lan http_access allow localhost http_access deny all icp_access allow all # hierarchy_stoplist cgi-bin ? no_cache deny QUERY # cache_mgr root # Personalizzazione hostname e utente per ftp anonimo. ftp_user Squid@<il tuo dominio> visible_hostname <hostname del server squid> # Append del dominio locale # Squid ignora le opzioni "search" del file resolv.conf, quindi di fatto # un host senza dominio non viene risolto. Questa riga risolve il problema append_domain <.yourdomain.tld>
Squid come transparent proxy
Questa configurazione consente di usare Squid sia come transparent proxy che come proxy "classico".
Per Sarge e` sufficiente inserire in squid.conf le seguenti voci:
httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on
Per Etch la configurazione e`:
http_port 8181 transparent
Poi, sul firewall, ridirigere le connessioni che escono verso la porta 80 alla porta giusta del proxy server. Se il proxy server gira sullo stesso pc del firewall, si puo` fare cosi`: (eth0 e` l'interfaccia LAN, e 3128 e` la porta di default su cui ascolta squid)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Se invece il proxy server e` una macchina diversa dal firewall, cosi`: (eth0 e` l'interfaccia LAN, 192.168.2.1:8080 sono host e porta su cui gira il proxy)
iptables -t nat -I PREROUTING -i eth0 -m state --state new -p tcp --dport 80 -j DNAT --to-destination 192.168.2.1:8080
Cache di Windows Update con Squid
Questa e` una configurazione di prova per tenere in cache i files di Windows Update, scaricando quindi un sacco di traffico dalla linea. Si tratta di un hack molto estremo, perche` di fatto io metto la roba in cache e ce la tengo ignorando eventuali modifiche ai files fatte dal server remoto. Va valutata. Per farla funzionare con Windows Update versione 5 (il quale ignora i settaggi del proxy) occorre per forza fare proxy trasparente. Se si vuole usare un proxy autenticato, e lasciare funzionare windows update, e` tutto un altro discorso. Prima di tutto non si puo` usare l'autenticazione assieme con il transparent proxy, poi windows update non si autentica.
Windows update nelle versioni piu` recenti (win7, win8) secondo me non beneficia piu` di questa configurazione, o almeno non capisco se e quanto sia realmente utile.
# devo mettere in cache files anche molto grossi (30 mega bastano ma non per i service pack, per quelli ne servono tipo 130) maximum_object_size 30000 KB # devo ignorare il fatto che windows update non vuole la cache. (RTFM!) refresh_pattern -i windowsupdate.com/.*\.(cab|exe) 4320 100% 43200 reload-into-ims refresh_pattern -i download.microsoft.com/.*\.(cab|exe) 4320 100% 43200 reload-into-ims
Autenticazione degli utenti su un dominio SMB
Ci sono diversi metodi per autenticare su SMB, veramente pure troppi. Un giro dentro a /usr/lib/squid permette di vedere quanti helper di autenticazione esistono. (non tutti per SMB)
/ntlm_auth_winbind - Fornito con winbind (samba). Gestisce i gruppi e scala bene. L'ho usato con successo un paio di volte.
/smb_auth - Fornito con Squid, semplice, gestisce i gruppi, ma forse non scala bene
/ntlm_auth - Fornito con Squid, semplice ma non gestisce i gruppi
NOTA: Sembra che Office quando cerca di accedere a internet per cose come importare pagine web in word non sia in grado di gestire correttamente l'autenticazione, la chiede diverse volte mentre scarica la pagina, direi una volta per ogni connessione http che fa, quindi il problema dovrebbe essere che non cacha le credenziali. Non so cosa succeda se la macchina e` registrata nel dominio (condizioni in cui i browser non chiedono nemmeno la password, perche` usano quella del dominio).
Liste di siti consentiti o negati
Se si usa l'autenticazione degli utenti, puo` essere necessario consentire alcuni siti anche senza autenticazione, per esempio per fare funzionare l'autoupdate di programmi antivirus o Windows Update (vedasi la sezione di Windows Update sotto Windows)
E` possibile definire dei files contenenti liste di siti consentiti o negati basandosi su pezzi del nome oppure su indirizzi IP (dei siti remoti). Questi sono esempi buttati li`, non li ho ancora provati.
# una acl che matcha su un file per consentire l'accesso acl alloweddomains dstdomain "/etc/squid/alloweddomains" # la stessa cosa, ma per negare l'accesso acl blockeddomain dstdomain "/etc/squid/blockeddomains" # una acl che matcha sul mac address del client (stessa subnet, ovviamente) acl fullaccessclients arp "/etc/squid/fullaccessclients" # consento l'accesso alla acl "alloweddomains" creata prima # questa va prima di un eventuale riferimento all'autenticazione, altrimenti non fa effetto. http_access allow alloweddomains # la stessa cosa per negare l'accesso in toto, autenticati o meno: http_access deny blockeddomain # nego l'accesso ai domini bloccati ma ai solo pc che non sono in fullaccessclients: http_access deny blockeddomain !fullaccessclients
Il file "alloweddomains" conterra` roba (questo e` un esempio con wildcards, di fatto) tipo:
.microsoft.com .windowsupdate.com .f-prot.com
Combinazione di ACL in AND
Se occorre dare l'accesso ai client facendo il match di piu` di una ACL in "AND" logico, si fa cosi`:
# Acl per consentire l'accesso a windows update e update dell' AV acl alloweddomains dstdomain "/etc/squid/alloweddomains" # Acl "a tempo", consente l'accesso solo dalle 3 alle 4 AM. acl updatetime time 03:00-04:00 # Acl per i soli pc dell'internet point acl internetpoint src 192.168.1.9/32 # regola che consente l'accesso ai soli pc dell'internet point ai soli domain consentiti # e solo dalle 3 alle 4 di notte (AND delle 3 acl definite prima) http_access allow alloweddomains updatetime internetpoint
Analisi dei log
Ci sono diversi analizzatori di log, che vale la pena di valutare:
- calamaris (c'e` in Debian)
Sarg (e` un po` bacato) http://web.onda.com.br/orso/index.html
Srg (il figlio piu` figo di Sarg) http://www.crc.net.nz/software/srg.php
Per leggere i log in modo un pochino piu` umano:
cat access.log | perl -l -a -n -e '$F[0] = scalar localtime $F[0]; print "@F"' | less
Tuning delle performance
Quando ho avuto problemi di prestazioni di Squid, ho risolto usando questi accorgimenti:
- Evitare che squid cerchi di fare risoluzioni DNS non necessarie (log_fqdn va a off)
- Installare una cache dns locale come per esempio dnsmasq sullo stesso host di squid e usarla per risolvere i nomi
- Togliere eventuali record ipv6 dal file /etc/hosts (localhost) a meno che non si usi davvero ipv6.
- Incrementare quando possibile la cache in ram
- Testare con diverse quantita` di cache su disco (anche nessuna) per vedere se mettendone troppa non si causano rallentamenti. La mia esperienza dice che comunque non cambia moltissimo, sia che la si usi che non la si usi.
Analisi delle performance
E` possibile usare squidclient (pacchetto a parte) per leggere le metriche interne di squid e ricavare qualche informazione sulle performance, usando dalla stessa macchina in cui e` installato squid il comando
squidclient -p 8080 -v mgr:info
Artica Proxy
Questa distribuzione dedicata (http://artica-proxy.com/) e` da provare.