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)

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:

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:

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.

LinuxDebian/Squid (last edited 2016-11-10 09:22:31 by Kurgan)