Squid

De Guifi.net - Wiki Català

25px Aquesta wiki forma part dels materials d'un curs
Curs:
Fitxers: ProxySquid.pdf (ProxySquid.odp)
Repositori SVN: http://anonymous@svn.projectes.lafarga.cat/svn/iceupc/DissenyXarxaLocalLinux
Usuari: anonymous
Paraula de pas: sense paraula de pas
Autors: Sergi Tur Badenas

Squid (calamar en angles) és segurament el servidor proxy i cache web open source més famós i utilitzat.

Característiques:

  • Llicència GNU General Public License.
  • Suporta diferents protocols però s'utilitza principalment per HTTP i FTP. Té suport parcial per SSL i TLS.
  • S'utilitza principalment per emmagatzemar pàgines web en cache i millorar la connexió a Internet
  • No proveïx de sistemes de filtratge (és pot fer amb afegitons també coneguts com add-ons)
  • Se li poden incorporar afegitons (SquidGuard, Calamaris, ufdbGuard)

Contingut

Introducció

Squid és una aplicació que bàsicament s'utilitza per a:

Web caching:

  • “Cachejar” és guardar la informació en una memòria que estigui més propera a l'usuari final.
  • Proxy HTTP. Els clients s'han de configurar per tal d'utilitzar el proxy com a medi de connexió a Internet.
  • Proxy transparent. No cal configuració dels clients (totes les comunicacions pel port 80 són interceptades). Cal tenir en compte que no es pot utilitzar amb HTTPS.

Reverse proxy | web server acceleration:

  • Permet utilitzar un servidor proxy com a suport d'un servidor web. La filosofia és inversa al web caching i permet alliberar carrega en un servidor web compartin st part de la carrega amb el proxy.
  • Apache permet implementar aquesta funcionalitat amb un mòdul.

Proxies (passarel·les) vs firewalls (tallafocs)

Quina diferència hi ha entre els tallafocs i els proxies? Tots dos són eines de control d'ús dels recursos d'una xarxa però que apliquen els seus mecanismes de control en nivells diferents del protocol OSI o TCP/IP. La següent taula relaciona els nivells OSI amb l'eina corresponent:

Nivell OSI Tallafocs Proxy
Nivell 1. Nivell físic No s'aplica No s'aplica
Nivell 2. Nivell d'enllaç No
Nivell 3. Nivell de xarxa (IP) No
Nivell 4. Nivell de transport (TCP) No
Nivells d'aplicació 5, 6 i 7. No

NOTA: Cal tenir en compte però que aquesta classificació de les tasques que realitzen els tallafocs i els proxies no és completament rígida. Per exemple, proxies com Squid també fan tasques de control d'accés per IP (nivell 3) o per MAC (nivell 2) o per port (nivell 4)

En resum, els tallafocs estan pensats per a treballar als nivells de xarxa i transport de la informació i els proxies estan pensats per treballar a nivell d'aplicació, és a dir amb les dades que es transporten.

En xarxes modernes el protocols més utilitzats a nivell de xarxa i transport són Ethernet i TCP/IP. Un tallafocs com iptables suporta aquests protocols i pot cobrir qualsevol requeriment de control en aquest nivells.

En canvi, a nivell d'aplicació tenim gairebé tants protocols com aplicacions que utilitzen la xarxa; per navegar per la xarxa utilitzem HTTP, per al correu electrònic utilitzem POP3, IMAP i SMTP, per a xarxes Windows utilitzem SMB/CFIS, per a xarxes Linux NFS, per a transferència de fitxers FTP... la llista és molt llarga.

Cal tenir en compte doncs que a nivell d'aplicació necessitem un proxy que suport el protocol que volem controlar. Squid és capaç de treballar amb HTTP, HTTPS, FTP i Gopher que són alguns dels protocols més utilitzats en xarxes. Per a filtrar altres protocols hauríeu d'utilitzar altres proxies.

NOTA: Cal tenir en compte que un tallafocs com p. ex. iptables pot perfectament crear normes de control d'accés basades en informació del nivell d'aplicació (per exemple filtrar les pàgines que continguin la paraula sexe). El problema és que no està dissenyat per aquesta tasca i per tant és molt millor utilitzar un proxy de nivell d'aplicació.

Avantatges i inconvenients

Avantatges:

  • Millor velocitat.
  • Millor control de l'accés a recursos.
  • Llistes ACL per controlar l'accés a Internet.
  • Permet filtrar a nivell d'aplicació (urls, continguts, horaris d'accés, etc.)

Inconvenients:

  • S'envaeix la privacitat dels clients del proxy (molta informació personal és registrada )
  • La cache pot ser un greu problema per a pàgines dinàmiques.
  • Squid, si s'utilitza directament és força laboriós i complicat de configurar. Tenim aplicacions (front-ends) que ens faciliten l'ús d'Squid.

Web caching

Com sap la cache quins objectes ha de guardar en memòria i quins no? Això depèn de com s'hagi desenvolupat la pàgina web i de com es configuri la memòria cau en el client. Un objecte pot ser marcat per tal que no sigui mai guardat en memòria cau (P. ex. pàgines dinàmiques) i la cache ignorarà aquest objecte.

NOTA: Tingueu en compte que parlem d'objectes i no de pàgines web. La majoria de pàgines web modernes són realment un conjunt d'objectes: fitxers HTML, imatges, codi de servidor com PHP, múltimedia, etc... Cadascun d'aquest objectes s'obté amb una petició HTTP especifica i per tant podem especificar diferents configuracions de cache per a cada objecte

.

També es pot marcar un objecte amb una edat màxima (max age, indica un temps) o un camp expires (indica una data concreta) que indica a la cache quin serà el màxim de temps abans de que es vegi obligada a tornar a demanar l'objecte.

L'objecte també pot tenir un camp amb la data de l'última modificació (last modified). Si la data de modificació és més nova que la data de l'objecte guardat aleshores cal tornar a demanar l'objecte.

Quan un objecte de la cache encara és correcte és diu que és un objecte fresc (FRESH) i si no és correcte es diu que està caducat (STALE). El protocol HTTP defineix 3 modes de controlar la memòria cau:

  • Freshness: permet indicar la "frescura" de les respostes HTTP de forma que la cache les pugui reutilitzar sense tornar-les a demanar. Aquesta informació normalment s'indica a les capçaleres de les respostes HTTP (HTTP response headers). Les capçaleres més utilitzades:
Expires: indica una data a partir de la qual l'objecte es considerarà caducat.
Cache-Control: indica durant quants segons l'objecte es considerarà fresc.
  • Validation: es pot utilitzar per comprovar si una resposta en memòria cau encara és vàlida. La capçalera utilitzada és:
Last-Modified: Si la data de modificació de l'objecte és posterior a la data de l'objecte en memòria cau aleshores està caducat.
  • Invalidation: Alguns request com POST, PUT O DELETE poden invalidar un objecte de la memòria cau.

Podeu utilitzar el plugin de firefox Web Developer que entre d'altres coses us permet consultar els response headers (al menú Information > View Response Headers) de qualsevol pàgina. També són molt interessants les eines com webscarab.

Per exemple els response headers d'aquesta pàgina són:

Date: Sun, 24 Jan 2010 15:53:35 GMT
Server: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4 with Suhosin-Patch mod_ssl/2.2.11 OpenSSL/0.9.8g
X-Powered-By: PHP/5.2.6-3ubuntu4
Content-Language: ca
Vary: Accept-Encoding,Cookie
X-Vary-Options: Accept-Encoding;list-contains=gzip,Cookie;string-contains=wikidb_mediawiki_Token;string-contains=wikidb_mediawiki_LoggedOut;string- 
contains=wikidb_mediawiki__session
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: private, must-revalidate, max-age=0
Last-Modified: Sun, 24 Jan 2010 15:53:28 GMT
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8

200 OK

Recursos:

Memòria cau de Firefox

Consulteu:

Firefox#Cache

Com funciona Squid?

Fitxer:DiagramaDeFluxSquid.png

Instal·lació

En sistemes de la família Debian com p. ex. Ubuntu, podem instal·lar Squid des dels repositoris:

NOTA: Als repositoris també hi ha la versió 2.x amb el nom de paquet squid!

$ sudo apt-get install squid3
S'està llegint la llista de paquets... Fet 
S'està construint l'arbre de dependències       
Reading state information... Fet           
S'instal·laran els següents paquets extres:
  squid3-common
Paquets suggerits:
  squid3-client squid3-cgi resolvconf
S'instal·laran els següents paquets NOUS:
  squid3 squid3-common
0 actualitzats, 2 nous a instal·lar, 0 a eliminar i 44 no actualitzats.
Es necessita obtenir 966kB d'arxius.
Després de desempaquetar s'usaran 6312kB d'espai en disc addicional.
Voleu continuar [S/n]? s
Des:1 http://ch.archive.ubuntu.com feisty/universe squid3-common 3.0.PRE5-5 [245kB]
Des:2 http://ch.archive.ubuntu.com feisty/universe squid3 3.0.PRE5-5 [721kB]
966kB descarregats en 5s (165kB/s)    
S'està seleccionant el paquet squid3-common prèviament no seleccionat.
(S'està llegint la base de dades ... hi ha 322742 fitxers i directoris instal·lats actualment.)
S'està desempaquetant squid3-common (de .../squid3-common_3.0.PRE5-5_all.deb) ...
S'està seleccionant el paquet squid3 prèviament no seleccionat.
S'està desempaquetant squid3 (de .../squid3_3.0.PRE5-5_i386.deb) ...
S'està configurant squid3-common (3.0.PRE5-5) ...
S'està configurant squid3 (3.0.PRE5-5) ...
[: 68: ==: unexpected operator
Creating Squid HTTP proxy 3.0 spool directory structure
2007/07/03 17:53:13| Creating Swap Directories
2007/07/03 17:53:13| /var/spool/squid3 exists 
2007/07/03 17:53:13| Making directories in /var/spool/squid3/00
2007/07/03 17:53:13| Making directories in /var/spool/squid3/01
2007/07/03 17:53:13| Making directories in /var/spool/squid3/02
2007/07/03 17:53:13| Making directories in /var/spool/squid3/03
2007/07/03 17:53:13| Making directories in /var/spool/squid3/04
2007/07/03 17:53:13| Making directories in /var/spool/squid3/05
2007/07/03 17:53:13| Making directories in /var/spool/squid3/06
2007/07/03 17:53:13| Making directories in /var/spool/squid3/07
2007/07/03 17:53:13| Making directories in /var/spool/squid3/08
2007/07/03 17:53:13| Making directories in /var/spool/squid3/09
2007/07/03 17:53:13| Making directories in /var/spool/squid3/0A
2007/07/03 17:53:13| Making directories in /var/spool/squid3/0B
2007/07/03 17:53:13| Making directories in /var/spool/squid3/0C
2007/07/03 17:53:13| Making directories in /var/spool/squid3/0D
2007/07/03 17:53:13| Making directories in /var/spool/squid3/0E
2007/07/03 17:53:13| Making directories in /var/spool/squid3/0F
* Restarting Squid HTTP Proxy 3.0 squid3                     

Observeu com és crea la memòria cau per emmagatzemar fitxers a:

/var/spool/squid3

I el servidor Squid es arrencat automàticament i s'executarà sempre a l'inici del sistema.

L'executable és el fitxer /usr/sbin/squid3:

$ dpkg -L squid3 | grep sbin
/usr/sbin
/usr/sbin/squid3

I els fitxers de configuració:

$ dpkg -L squid3 | grep etc
/etc
/etc/logrotate.d
/etc/logrotate.d/squid3
/etc/squid3
/etc/squid3/squid.conf
/etc/squid3/msntauth.conf
/etc/resolvconf.d
/etc/resolvconf.d/update-libc.d
/etc/resolvconf.d/update-libc.d/squid3
/etc/init.d
/etc/init.d/squid3

Cal també que tingueu en compte el paquet:

$ dpkg -L squid3-common
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/squid3-common
/usr/share/doc/squid3-common/README
/usr/share/doc/squid3-common/CREDITS.gz
/usr/share/doc/squid3-common/changelog.Debian.gz
/usr/share/doc/squid3-common/QUICKSTART
/usr/share/doc/squid3-common/RELEASENOTES.html
/usr/share/doc/squid3-common/SPONSORS
/usr/share/doc/squid3-common/copyright
/usr/share/doc/squid3-common/TODO.gz
/usr/share/doc/squid3-common/CONTRIBUTORS.gz
/usr/share/squid3
/usr/share/squid3/icons
/usr/share/squid3/icons/anthony-binhex.gif
/usr/share/squid3/icons/anthony-bomb.gif
/usr/share/squid3/icons/anthony-box.gif
/usr/share/squid3/icons/anthony-box2.gif
/usr/share/squid3/icons/anthony-c.gif
/usr/share/squid3/icons/anthony-compressed.gif
...
/usr/share/squid3/mib.txt
/usr/share/squid3/mime.conf
/usr/share/squid3/errors

Control del servei Apache. Execució, parada i reconfiguració d'Apache

Seguint els estàndards de Debian GNU/Linux (basat en el sistema d'scripts d'inicialització SystemV (http://en.wikipedia.org/wiki/System_V)) l'script de control del dimoni bind és:

/etc/init.d/squid3

Les accions que podem fer amb el servei són start|stop|restart|reload|force-reload.

Cada cop que fem un canvi a la configuració d'Apache2 hem de fer un restart o, millor encara, un reload del servei:

$ sudo /etc/init.d/squid3 reload

Tal com podem veure executant:

$ sudo updatedb
$ locate squid | grep rc
/etc/rc0.d/K30squid3
/etc/rc1.d/K30squid3
/etc/rc2.d/S30squid3
/etc/rc3.d/S30squid3
/etc/rc4.d/S30squid3
/etc/rc5.d/S30squid3
/etc/rc6.d/K30squid3  

El servei squid s'executa a partir del nivell 3.

Podeu trobar més informació a l'article Configuració de serveis en Linux.

Ports per defecte del servei

Possiblement squid és un dels pocs serveis que no apareix al fitxer /etc/services:

$ cat /etc/services | grep 3128

Però sapigueu que el port per defecte és:

3128

I podeu utilitzar nmap per comprovar el correcte funcionament del servidor:

$ nmap localhost
PORT     STATE SERVICE
22/tcp   open  ssh
53/tcp   open  domain
80/tcp   open  http
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
631/tcp  open  ipp
3128/tcp open  squid-http
3306/tcp open  mysql
5900/tcp open  vnc
...

Versió d'Squid

$ dpkg -l squid3
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Nom                                    Versió                                Descripció
+++-======================================-======================================-============================================================================================
ii  squid3                                 3.0.STABLE18-1                         A full featured Web Proxy cache (HTTP proxy)

Conèixer la versió que tenim d'Squid i les opcions de compilació

$ squid3 -v
Squid Cache: Version 3.0.STABLE18
configure options:  '--build=i486-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info'  
'--sysconfdir=/etc' '--localstatedir=/var' '--libexecdir=${prefix}/lib/squid3' '--disable-maintainer-mode' '--disable-dependency-tracking' '--srcdir=.' '--datadir=/usr/share
/squid3' '--sysconfdir=/etc/squid3' '--mandir=/usr/share/man' '--with-cppunit-basedir=/usr' '--enable-inline' '--enable-async-io=8' '--enable-storeio=ufs,aufs,diskd,null' 
'--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-underscores' '--enable-icap-client' '--enable-follow-x-forwarded-for' '--enable-
auth=basic,digest,ntlm,negotiate' '--enable-basic-auth-helpers=LDAP,MSNT,NCSA,PAM,SASL,SMB,YP,getpwnam,multi-domain-NTLM' '--enable-ntlm-auth-helpers=SMB' '--enable-digest-
auth-helpers=ldap,password' '--enable-negotiate-auth-helpers=squid_kerb_auth' '--enable-external-acl-helpers=ip_user,ldap_group,session,unix_group,wbinfo_group' '--enable-
arp-acl' '--enable-snmp' '--with-filedescriptors=65536' '--with-large-files' '--with-default-user=proxy' '--enable-epoll' '--enable-linux-netfilter' 'build_alias=i486-
linux-gnu' 'CC=cc' 'CFLAGS=-g -O2 -g -Wall -O2' 'LDFLAGS=-Wl,-Bsymbolic-functions' 'CPPFLAGS=' 'CXX=g++' 'CXXFLAGS=-g -O2 -g -Wall -O2' 'FFLAGS=-g -O2'

Recompilar el paquet Debian

Amb apt-get es molt senzill instal·lar una aplicació compilant-la:

$ cd /usr/src
$ sudo apt-get build-dep squid3
$ sudo apt-get -b source squid3
$ sudo apt-get install squid-langpack
$ sudo dpkg -i squid*.deb

Fixeu-vos que ha creat varios paquets Debian:

$ ls *deb
squid3_3.0.STABLE18-1_i386.deb      squid3-common_3.0.STABLE18-1_all.deb  squidclient_3.0.STABLE18-1_i386.deb
squid3-cgi_3.0.STABLE18-1_i386.deb  squid3-dbg_3.0.STABLE18-1_i386.deb

Per a més detalls consulteu apt-get opció source

Podeu controlar el procés de creació del Paquet Debian editant un fitxer:

$ sudo joe squid3-3.0.STABLE18/debian/rules

I per exemple afegir el suport per a fer log del user agent (navegadors). Afegiu:

--enable-useragent-log \

Per exemple, ha de quedar:

DEB_CONFIGURE_EXTRA_FLAGS := --datadir=/usr/share/squid3 \
               --sysconfdir=/etc/squid3 \
               --mandir=/usr/share/man \
               --with-cppunit-basedir=/usr \
               --enable-inline \
               --enable-async-io=8 \
               --enable-storeio="ufs,aufs,diskd,null" \
               --enable-removal-policies="lru,heap" \
               --enable-delay-pools \
               --enable-cache-digests \
               --enable-underscores \
               --enable-icap-client \
               --enable-follow-x-forwarded-for \
               --enable-auth="basic,digest,ntlm,negotiate" \
               --enable-basic-auth-helpers="LDAP,MSNT,NCSA,PAM,SASL,SMB,YP,getpwnam,multi-domain-NTLM" \
               --enable-ntlm-auth-helpers="SMB" \
               --enable-digest-auth-helpers="ldap,password" \
               --enable-negotiate-auth-helpers="squid_kerb_auth" \  
               --enable-external-acl-helpers="ip_user,ldap_group,session,unix_group,wbinfo_group" \
               --enable-arp-acl \
               --enable-snmp \
               --enable-useragent-log \
               --with-filedescriptors=65536 \
               --with-large-files \
               --with-default-user=proxy

NOTA: Si es vol activar --enable-ssl \ aleshores cal instal·lar abans: $ sudo apt-get install libssl-dev

Si instal·leu el paquet nou ara veure:

$ sudo apt-get install squid-langpack
$ sudo dpkg -i squid*.deb

Ara podeu comprovar que té activat useragent

$ squid3 -v | grep agent
...
acl-helpers=ip_user,ldap_group,session,unix_group,wbinfo_group' '--enable-arp-acl' '--enable-snmp' '--enable-useragent-log' '--with-filedescriptors=65536' 
...

Configuració

Manual

Segons la versió hi ha diferents manuals que podeu trobar a:

http://wiki.squid-cache.org/SquidFaq/ConfiguringSquid#Do_you_have_a_squid.conf_example.3F

Per a 3.0 el trobareu a:

http://www.squid-cache.org/Versions/v3/3.0/cfgman/

Configuració del client del proxy (Proxy no transparent). Navegador web Firefox

Consulteu Configuració_de_clients_proxy.

Anem al menú Edita/Preferències:

Seleccionem la pestanya Avançat i després la pestanya Xarxa:

Fitxer:SquidNavegador.png

Fitxer:SquidNavegador2.png

NOTA: El port normalment és el 3186:

$ sudo nmap localhost
Starting Nmap 4.20 ( http://insecure.org ) at 2007-11-18 20:19 CET
Interesting ports on localhost (127.0.0.1):
Not shown: 1687 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
23/tcp    open  telnet
80/tcp    open  http
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
631/tcp   open  ipp
3128/tcp  open  squid-http
3306/tcp  open  mysql
4662/tcp  open  edonkey
10000/tcp open  snet-sensor-mgmt

Si no em configurat les ACL molt possiblement rebrem un error com el següent a l'intentar navegar:

Fitxer:SquidNoPermetAccedir.png

El següent apartat explica com configurar les ACL.

Autoconfiguració de proxys amb DHCP

Consulteu http://wiki.squid-cache.org/SquidFaq/ConfiguringBrowsers#head-5aa28de5e8308087a925cb7ef54ca070a16564d4

Fitxer proxy.cat:

function FindProxyForURL(url, host)
{
   if (isPlainHostName(host) ||
       dnsDomainIs(host, ".foobar"))
       return "DIRECT";
    else
        if (isInNet(myIpAddress(), "192.168.1.3", "255.255.0.0"))
            return "PROXY 192.168.1.3:3128; DIRECT";
        else
            return "DIRECT";
}

Un altre...

function FindProxyForURL (url,host)
	{ if ((url.substring(0,5) != "http:") && 
	      (url.substring(0,6) != "https:") &&
	      (url.substring(0,4) != "ftp:") &&
	      (url.substring(0,7) != "gopher:")) {
	      return "DIRECT"; 
	      }
	  if (isPlainHostName(host) || shExpMatch(host,"192.168.*") || shExpMatch(host,"127.*") || dnsDomainIs(host,"correu.edu365.com") || 
dnsDomainIs  (host,".intranet") || (url.substring(11,23) == "xtec.es:8800") || dnsDomainIs (host,"xat.edu365.com") || dnsDomainIs 
(host,".gencat.net")  || dnsDomainIs (host,".gencat.es")) {
	      	 return "DIRECT";
              } 
	  else
	  	return "PROXY 192.168.0.2:8080; PROXY proxy.xtec.es:8080; DIRECT"; 
	}


Aquest fitxer es penja a Internet, i permet configurar els proxys automàticament.


Recursos:

Configuració del proxy amb DHCP. Segona part

TODO

Exemple IES Nicolau Copèrnic:

 function FindProxyForURL(url, host)
  {
     if (isInNet(host, "192.168.0.0", "255.255.0.0")) {
       return "DIRECT";
   } else {
      if (shExpMatch(url, "http:*"))
         return "PROXY 192.168.11.1:800" ;
      if (shExpMatch(url, "https:*"))
         return "PROXY 192.168.11.1:800" ;
      if (shExpMatch(url, "ftp:*"))
         return "PROXY 192.168.11.1:800" ;
      return "DIRECT";
   }
}

El col·loques a:

http://www.iescopernic.com/proxy.pac

Servidor de DHCP:

option local-pac-server code 252 = text;
option local-pac-server "http://www.iescopernic.com/wpad.dat";

O (recurs ecualug):

# Configuracion automatica de proxy
option wpad-url code 252 = text;
option wpad-url "http://wpad.midominio.com:81/proxy.pac\n";


Recursos

Configuració del servidor

Fitxer de configuració. /etc/squid/squid3.conf

Els fitxers de configuració són:

$ dpkg -L squid3 | grep etc
/etc
/etc/logrotate.d
/etc/logrotate.d/squid3
/etc/squid3
/etc/squid3/squid.conf
/etc/squid3/msntauth.conf
/etc/resolvconf.d
/etc/resolvconf.d/update-libc.d
/etc/resolvconf.d/update-libc.d/squid3
/etc/init.d
/etc/init.d/squid3

El fitxer important de configuració és:

/etc/squid3/squid.conf

Per defecte el fitxer conté molts camps de comentari que podeu eliminar amb l'ordre grep:

$ cat squid.conf | grep -v '^#\|^$\|^;'

El fitxer per defecte de configuració conté el següent:

$ cat squid.conf | grep -v '^#\|^$\|^;'
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443		# https
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 CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
icp_access deny all
htcp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid3/access.log squid
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern (cgi-bin|\?)	0	0%	0
refresh_pattern .		0	20%	4320
icp_port 3130
coredump_dir /var/spool/squid3

Podeu consultar la referència dels paràmetres d'Squid al manual:

Comentem línia a línia el fitxer per defecte. Les línies acl:

acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443		# https
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 CONNECT method CONNECT

Defineixen elements ACL (Accés Control List). La sintaxi és la següent:

acl aclname acltype argument ...
acl aclname acltype "file" ...

On

  • acl_name: És el nom que li donem a la llista d'accés
  • acl_type: indica el tipus de llista. Hi han molts tipus de llista que podeu consultar al manual (també podeu consultar els desplegables de webmin). Algunes de les més important permeten declarar adreces IP, rangs d'adreces, MACs, URLs, expressions regulats, ports, etc.
  • argument: Segons el tipus de llista pot ser un text, una IP, una MAC, una expressió regular, una URL, un mime-type...
  • file: Es pot indicar un fitxer on trobar les acl (una per línia)

Alguns exemples:

acl macaddress arp 09:00:2b:23:45:67
acl myexample dst_as 1241
acl password proxy_auth REQUIRED
acl fileupload req_mime_type -i ^multipart/form-data$
acl javascript rep_mime_type -i ^application/x-javascript$

Consulteu l'apartat #ACLs per tal d'obtenir més informació.

Tornant al fitxer bàsic de configuració. La primera línia:

acl manager proto cache_object

Defineix un acl de tipus proto (protocol) anomenada manager amb argument cache_object. El protocol cache_object és el protocol que utilitza l'eina cachemgr per accedir a squid. La següent acl:

acl localhost src 127.0.0.1/32

Defineix que és localhost. Les acl es declaren per tal de ser utilitzades per altres directives en línies posteriors del fitxer de configuració. Per exemple les acl localhost i manager s'utilitzen a:

http_access allow manager localhost
...
http_access allow localhost
http_access deny all

Recordeu que les acces entry són ANDs i per tant:

http_access allow manager localhost
http_access deny manager

Només permet les consultes de [Squid#cachemgr | cachemgr]] des de localhost (la resta estan impedides per la línia deny). Després permetem utilitzar el proxy squid a la màquina localhost i deneguem la resta

NOTA: Tingueu doncs en compte, que per defecte la configuració d'Squid no ens permet utilitzar el servidor des de altres màquines de la xarxa. Consulteu Com_definir_quins_seran_els_clients_que_podran_utilitzar_el_servidor_Squid. Cal tenir en compte que el port sortirà obert però no passarem les ACL del servidor

El següent element ACL és defineix però no s'utilitza:

acl to_localhost dst 127.0.0.0/8

La següent línia és necessària per al correcte funcionament de les connexions HTTPS a través del Proxy:

acl SSL_ports port 443

El protocol HTTP té diferents [Request methods]. Els més coneguts són GET, POST i HEAD. Però el protocol [[HTTPS] no pot ser caxejat i per tant amb aquest port s'utilitza el Request Method CONNECT que el que fa és un túnel directe, Més endavant al fitxer trobem les directives:

acl CONNECT method CONNECT
http_access deny CONNECT !SSL_ports

Que només permet utilitzar el metode HTTP CONNECT al port 443.

Algunes ACL poden ser llistes d'ítems. Per exemple:

acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443		# https
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

Defineix una llista de ports anomenada Safe_ports. Més endavant al fitxer de configuració:

http_access deny !Safe_ports

Impedeix l'accés HTTP a qualsevol port que no sigui un dels especificats com a segurs. Això és així per tal d'evitar usos il·lícits d'Squid com per exemple utilitzar-lo de relay SMTP. A la wiki d'Squid expliquen amb més detall per que certs ports poden ser insegurs.

Després trobem les directives:

icp_access deny all
htcp_access deny all

Per defecte no estan activats els protocols per a fer Cache distribuït. Els protocols són ICP i HTCP. De totes maneres més endavant s'indica el port ICP:

icp_port 3130

La directiva:

http_port 3128

Defineix el port al qual escolta peticions el servidor Squid.

La directiva:

access_log /var/log/squid3/access.log squid

Defineix a on es guarda el log d'acces. Aquí Squid registra tots els accessos al servidor i és el fitxer bàsic per a realitzar informes del proxy.

Les directives:

[ hierarchy_stoplist] cgi-bin ?

Després venen les indicacions

refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern (cgi-bin|\?)	0	0%	0
refresh_pattern .		0	20%	4320

La sintaxi de refresh_pattern és:

refresh_pattern [-i] regex min percent max [options]

On:

  • regex: s'utilitzen expressions regulars (per defecte són case-sensitive, es pot desactivar amb l'opció -i).
  • Min: és el temps en minuts que un objecte sense un temps d'expiració implícit pot ser considerat un objecte fresc. El valor recomanat és 0, qualsevol altre valor pot provocar que les aplicacions dinàmiques no funcionin correctament si el programador de l'aplicació no ha establert explícitament el temps d'expiració.
  • Percent: és el percentatge de temps respecte a l'edat de l'objecte (temps des de la última modificació) que un objecte sense un temps explícit d'expiració pot ser considerat un objecte fresc.
  • Max: defineix quina és la edat màxima del objecte per tal de poder-lo considerar fresc
  • Opcions:
  • override-expire
  • override-lastmod
  • reload-into-ims
  • ignore-reload
  • ignore-no-cache
  • ignore-no-store
  • ignore-private
  • ignore-auth
  • refresh-ims

Per tant:

refresh_pattern ^ftp:		1440	20%	10080

Controla quan es refresquen les peticions a una URL amb el protocol FTP (^ indica inici de la url). 1440 és un dia (24 hores) en minuts. Són els valor estàndard del protocol FTP. El mateix pel protocol gopher:

refresh_pattern ^gopher:	1440	0%	1440

Les pàgines dinàmiques (CGI) no tenen cache:

refresh_pattern (cgi-bin|\?)	0	0%	0

La resta:

refresh_pattern .		0	20%	4320

És a dir que:

Si no hi ha temps d'expiració indicat aleshores es torna a demanar l'objecte
Si hi ha data explicita
La edat màxima d'un objecte és 3 dies (7320 minuts) i es pot considerar fresc un màxim del 205 (14,4h)

el protocol per definir si un fitxer de la cache és fresc (FRESH) o no (STALE) és:

FRESH if expires < now, else STALE
STALE if age > max
FRESH if lm-factor < percent, else STALE
FRESH if age < min
else STALE

I finalment hi ha la directiva d'on posar els core_dumps (en cas que succeixin)

coredump_dir /var/spool/squid3

Recursos:

Modificar el fitxer de configuració

És més còmode treballar amb un fitxer sens comentaris. Fer una còpia de l'original i elimineu els comentaris amb:

$ cd /etc/squid3
$ sudo cp squid.conf squid.conf.reference
$ sudo bash -c "cat squid.conf | grep -i -v '^#\|^$\|^;' >  squid.conf.backup"
$ sudo mv squid.conf.backup squid.conf

Cada cop que modifiqueu el fitxer comproveu la sintaxi amb:

$ sudo squid3 -k parse

I aplique els canvis amb:

$ sudo /etc/init.d/squid3 reload

Com definir quins seran els clients que podran utilitzar el servidor Squid

Cal definir una ACL com per exemple:

acl myclients src 192.168.0.0/24

I utilitzar una llista d'accés http:

http_access allow myclients

ACLs

Les ACL (Accés Control List) defineixen les tasquest que es poden realitzar en un servidor Squid. Cal tenir en compte que tenim:

  • Elements ACL (ACL elements): es defineixen elements amb la directiva acl. Faciliten la definició d'ACLs
  • Llistes d'accés (ACL) (access entry)': hi ha una sèrie de directives per definir que es pot fer i que no. També s'anomenen acces_entry. Més aval les podeu consultar.

Per definir els elements ACL la sintaxi és:

acl aclname acltype argument ...
acl aclname acltype "file" ...

On

  • acl_name: És el nom que li donem a la llista d'accés
  • acl_type: indica el tipus de llista. Hi han molts tipus de llista que podeu consultar al manual (també podeu consultar els desplegables de webmin). Algunes de les més important permeten declarar adreces IP, rangs d'adreces, MACs, URLs, expressions regulats, ports, etc.
  • argument: Segons el tipus de llista pot ser un text, una IP, una MAC, una expressió regular, una URL, un mime-type... Podeu consultar tots els tipus a la wiki de Squid.
  • file: Es pot indicar un fitxer on trobar les acl (una entrada per línia)

Alguns exemples:

acl macaddress arp 09:00:2b:23:45:67
acl myexample dst_as 1241
acl password proxy_auth REQUIRED
acl fileupload req_mime_type -i ^multipart/form-data$
acl javascript rep_mime_type -i ^application/x-javascript$

Posteriorment cal definir la ACL amb alguna de les següents directives:

  • http_access: permet als clients especificats (navegadors) accedir al port de l'Squid. Aquesta és la forma principal de controlar l'accés a Squid. Es poden fer controls per IP, per rangs d'adreces, per tipus de navegador, per MAC...
  • http_reply_access: Permet als clients HTTP (navegadors) rebre la resposta a la petició (request) que han realitzat. S'utilitza per bloquejar certs continguts com p. ex. diferents tipus de continguts segons el seu mime-type ( directiva rep_mime_type acl).
  • icp_access: Permet a altres caches (p. ex. altres Squid) accedir a la cache del servidor mitjançant el protocol ICP.
  • miss_access: miss_access: Permet a certs clients reenviar els fitxers que falten a la cache (cache MISSES). Serveix per treballar amb caches distribuïdes.
  • cache: Defineix respostes que no han de ser catxejades.
  • url_rewrite_access: Controla quines peticions s'envien al redirector pool
  • ident_lookup_access: Controla quines peticions necessiten d'una cerca Ident (Ident looku).
  • always_direct: Controla quines peticions s'han d'enviar sempre directament als servidors originals de la petició.
  • never_direct: Contrari de l'anterior. Quines peticions no s'han d'enviar mai directament al servidor original
  • snmp_access: Controla l'accés de clients snmp.
  • broken_posts:
  • cache_peer_access: Serveix per treballar amb memòries cau distribuïdes.

Qüestions a tenir en compte:

  • No es poden definir dos ACL amb el mateix nom
  • Es poden definir diferents valors un per línia. Squid els converteix en una llista.
  • No tots els elements ACL els podrem utilitzar en tots les tasques de control d'accés. Per exemple la snmp_community només té sentit am snmp_access
  • Per utilitzar MACs cal fer servir l'opció --enable-arp-acl.
  • Els elements ACL de SNMP requereixen: --enable-snmp
  • Algunes ACL poden provocar retards en els temps de resposta. Per exemple utilitzar noms de màquina (src_domain i srcdom_regex) fan consultes DNS.
  • Les llistes ACL són de tipus OR. En cas que hi haguí més d'un element la llista es compleix si almenys es compleix un dels elements

Recursos: http://wiki.squid-cache.org/SquidFaq/SquidAcl

Llista completa de ACLs

Consulteu:

http://wiki.squid-cache.org/SquidFaq/SquidAcl#ACL_elements

Entendre les ACL. Com combinar ACLs

Cal tenir en compte que tenim:

  • Elements ACL (ACL elements): tots els elements definits a una llista són ORs.
  • Llistes d'accés (ACL) o acces entry: tots els elements definits són ANDs.

NOTA: No es poden utilitzar doncs altres combinacions d'ORs o ANDs.

Un exemple que no funciona:

acl ME src 10.0.0.1
acl YOU src 10.0.0.2 
http_access allow ME YOU

http_access allow és una accés entry i per tant ME i YOU són un AND, és a dir li esteu demanant que el client sigui alhora la IP 10.0.0.1 i 10.0.0.2. Hauria de ser:

acl ME src 10.0.0.1
acl YOU src 10.0.0.2
http_access allow ME
http_access allow YOU 

o:

acl US src 10.0.0.1 10.0.0.2
http_access allow US

Depurar les ACL. Fitxer de log cache.log

Es pot activar la depuració amb:

debug_options ALL,1 33,2

I torneu a iniciar Squid:

$ sudo /etc/init.d/squid3 restart

Ara al fitxer /var/log/squid3/cache.log:

$ sudo tail -f /var/log/squid3/cache.log

Veureu informació de cada petició i per que és acceptada o no. Podeu augmentar el nivell de depuració posant:

debug_options ALL,1 33,2 28,9

La sintaxi és força senzilla, Squid ésta dividit en seccions. ALL val dir totes les seccions i si només volem depurar una secció la hem d'indicar pel seu número. Les seccions les podeu consultar a:

http://www.linofee.org/~jel/proxy/Squid/debug.shtml

Les seccions que hem elevat el nivell de depuració són:

28 Access Control
33 Client-side Routines

Va de 1 a 9, sent 9 l'opció més xerraire.

Browser ACLs

Permeten fer normes d'accés depenent del navegador. Per exemple per crear una ACL per a Firefox:

acl firefox browser -i firefox

NOTA: És important l'opció -i que ignora majúscules/minúscules si no no funciona correctament ja que molst user agents tenen la primera lletra en majúscules, p.ex. Firefox

NOTA: firefox és una expressió regular per tant quadra amb qualsevol navegador on al user-agent aparegui la paraula firefox

Després es pot utilitzar, per exemple, amb:

http_access deny !firefox

que només permetrà navegar amb firefox.

Si teniu activat el user agent log els podeu consultar amb:

$ sudo tail -f /var/log/squid3/useragent.log
192.168.1.126 [02/Feb/2010:11:27:56 +0100] "Mozilla/5.0 (X11; U; Linux i686; ca; rv:1.9.1.7) Gecko/20100106 Ubuntu/9.10 (karmic) Firefox/3.5.7"
192.168.1.126 [02/Feb/2010:11:27:57 +0100] "Mozilla/5.0 (X11; U; Linux i686; ca; rv:1.9.1.7) Gecko/20100106 Ubuntu/9.10 (karmic) Firefox/3.5.7"
192.168.1.126 [02/Feb/2010:11:27:57 +0100] "Mozilla/5.0 (X11; U; Linux i686; ca; rv:1.9.1.7) Gecko/20100106 Ubuntu/9.10 (karmic) Firefox/3.5.7"

Especificar una ACL per a una xarxa

acl localnet src 10.0.0.0/8	# RFC1918 possible internal network

Canvis en els DNS

A la carpeta:

/etc/resolvconf.d/update-libc.d

Hi ha un script que recarrega squid quan hi ha un canvi al fitxer:

/etc/resolv.conf

és a dir si hi ha algun canvi en les DNS de la màquina.

Port de funcionament d'squid

És un dels pocs serveis que no apareix al fitxer /etc/services. El port que s'utilitza normalment és el 3128 i es pot modificar utilitzant el paràmetre http_port del fitxer /etc/squid/squid.conf

# Squid normally listens to port 3128
http_port 3128

Amb webmin ho podem canviar a:

Fitxer:Portssquid.png

Podem comprovar el funcionament d'Squid amb les comandes:

$ sudo nmap localhost -p 3128
$ telnet localhost 3128

Opció -k

$ squid3 --help
squid3: invalid option -- '-'
Usage: squid [-cdhvzCDFNRVYX] [-s | -l facility] [-f config-file] [-[au] port] [-k signal]
       -a port   Specify HTTP port number (default: 3128).
       -d level  Write debugging to stderr also.
       -f file   Use given config-file instead of
                 /etc/squid3/squid.conf
       -h        Print help message.
       -k reconfigure|rotate|shutdown|interrupt|kill|debug|check|parse
                 Parse configuration file, then send signal to 
                 running copy (except -k parse) and exit.
       -s | -l facility
                 Enable logging to syslog.
       -u port   Specify ICP port number (default: 3130), disable with 0.
       -v        Print version.
       -z        Create swap directories
       -C        Do not catch fatal signals.
       -D        Disable initial DNS tests.
       -F        Don't serve any requests until store is rebuilt.
       -N        No daemon mode.
       -R        Do not set REUSEADDR on port.
       -S        Double-check swap during rebuild.
       -X        Force full debugging.
       -Y        Only return UDP_HIT or UDP_MISS_NOFETCH during fast reload.

Comprovar la sintaxi del fitxer de configuració

$ sudo squid3 -k parse

Si hi ha algun error us el dirà:

$ sudo squid3 -k parse
2010/05/07 05:49:24| Processing Configuration File: /etc/squid3/squid.conf (depth 0)
2010/05/07 05:49:24| cache_cf.cc(346) squid.conf:73 unrecognized: 'useragent_log'

Access Control Lists (ACLs)

Passos a seguir amb Webmin

  • Primer creem una ACL de tipus Adreces Client. Podem utilitzar una adreça específica o un rang
  • Un cop creada l'ACL l'afegim a la llista de restriccions
  • Afegim restricció de proxy
  • Escollim l'opció permet i la ACL que acabem de crear
  • Ara reordenem les restriccions per assegurar-nos que la nostra ACL esta abans que la restricció denega all.
  • MOLT IMPORTANT: Aplicar els canvis a Squid

Memòria cau (cache)

La memòria cau es guarda per defecte a:

/var/spool/squid3

Els fitxers que la componen són:

$ ls -la /var/spool/squid3
total 76
drwxr-xr-x  18 proxy proxy 4096 2010-01-23 18:17 .
drwxr-xr-x   8 root  root  4096 2010-01-23 18:17 ..
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 00
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 01
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 02
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 03
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 04
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 05
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 06
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 07
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 08
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 09
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 0A
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 0B
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 0C
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 0D
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 0E
drwxr-x--- 258 proxy proxy 4096 2010-01-23 18:17 0F
-rw-r-----   1 proxy proxy   52 2010-01-23 18:17 swap.state

Que cal tenir en compte:

  • Deixar sempre prou espai en disc per a la memòria cau. Si es queda sense espai Squid es trenca.
  • Val la pena tenir un bon marge de disc per evitar fragmentació. Com a mínim cal deixar un marge del 10%

La mida de la cau s'indica amb:

cache_dir ... 7000 16 256

On:

  • 7000: són 7GB de cau

Recursos:

cachemgr

El cache manager és un script CGI (cachemgr.cgi) que permet consultar les estadístiques de la cau i l'execució de l'squid. Per tal d'utilitzar aquesta aplicació cal tenir un servidor web com per exemple Apache. En sistemes de la família Debian cal instal·lar el paquet:

$ sudo apt-get install squid3-cgi

Els fitxers proporcionats són:

$ sudo dpkg -L squid3-cgi
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/squid3-cgi
/usr/share/doc/squid3-cgi/README
/usr/share/doc/squid3-cgi/copyright
/usr/share/doc/squid3-cgi/TODO.gz
/usr/share/doc/squid3-cgi/changelog.Debian.gz
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/cachemgr3.cgi.8.gz
/usr/lib
/usr/lib/cgi-bin
/usr/lib/cgi-bin/cachemgr3.cgi
/etc
/etc/squid3
/etc/squid3/cachemgr.conf 

es proporciona un petit manual:

$ man cachemgr3.cgi

L'script CGI està a:

/usr/lib/cgi-bin/cachemgr3.cgi

La configuració per Apache 2 és:

$ sudo joe /etc/apache2/sites-available/cachemgr

Afegiu:

ScriptAlias /Squid/cgi-bin/cachemgr.cgi /usr/lib/cgi-bin/cachemgr3.cgi

<Location /Squid/cgi-bin/cachemgr.cgi>
 order allow,deny
 allow from IP_DEL_CLIENT
</Location>

Activeu el site i torneu a iniciar Apache:

$ sudo a2ensite cachemgr
Enabling site cachemgr.
Run '/etc/init.d/apache2 reload' to activate new configuration!
$ sudo /etc/init.d/apache2 reload

Accediu amb Firefox:

http://IP_SERVIDOR//Squid/cgi-bin/cachemgr.cgi

Es pot protegir l'accés amb paraula de pas d'Apache:

<Location /Squid/cgi-bin/cachemgr.cgi>
 AuthUserFile /path/to/password/file
 AuthGroupFile /dev/null
 AuthName User/Password Required
 AuthType Basic
 require user cachemanager
</Location>

Recursos:

Exemples des de squidclient

Consultar el rendiment dels redirectors:

$ squidclient mgr:redirector
Usuari i paraula de pas

Només són necessaris per a apagar la cache (shutdown) o tornar a demanar una URL d'un objecte. Per la resta de dades informatives no cal. De totes formes es configura al fitxer squid.conf amb la directiva:

cachemgr_passwd
Cache Client List

És l'opció més interessant del menú, mostra tots els clients i les seves estadístiques.

Accés des del client

Consulteu #Client Squid.

No fer cau d'algunes pàgines. Connexions directes

acl gmail dstdomain .gmail.com
always_direct allow gmail

Exemples de configuració

Configurar els errors en català

Afegiu:

#Errors en català
error_directory /usr/share/squid-langpack/ca

Els idiomes son proveïts pel paquet:

squid-langpack

Impedir la descàrrega de fitxers grans

Cal utilitzar:

reply_body_max_size 

No fer cau de certs servidors

acl someserver dstdomain .someserver.com
cache deny someserver

Impedir l'accés a cert servidor

acl Cooking2 dstdomain www.gourmet-chef.com
http_access deny Cooking2
http_access allow all

Impedir totes les pàgines que continguin una paraula o paraules concretes

acl Cooking1 url_regex cooking
acl Recipe1 url_regex recipe
acl myclients src 172.16.5.0/24
http_access deny Cooking1
http_access deny Recipe1
http_access allow myclients
http_access deny all

Paràmetres d'Squid per configurar com a proxy d'apt-get (paquets debian)

# Mantenir els paquets Debian 30 dies i els Packages.gz un dia
refresh_pattern deb$ 43200 100% 43200
refresh_pattern Packages.gz$ 1440 100% 1440
#Augmentar la mida màxima d'objecte a la cache
maximum_object_size 102400 KB

cache_dir ufs /var/spool/squid 1000 16 256

Permetre només a un client concret accedir a una URL concreta

acl special_client src 10.1.2.3
acl special_url url_regex ^http://www.squid-cache.org/Doc/FAQ/$
http_access allow special_client special_url
http_access deny special_url

Permetre l'accés segons un horari

acl FOO src 10.1.2.3 10.1.2.4
acl WORKING time MTWHF 08:30-17:30
http_access allow FOO WORKING
http_access deny FOO

Per a usuaris concrets:

acl USER1 proxy_auth Dick
acl USER2 proxy_auth Jane
acl DAY time 06:00-18:00
http_access allow USER1 DAY
http_access deny USER1
http_access allow USER2 !DAY
http_access deny USER2

Impedir fitxers grans

#
# Restringim mida màxima de fitxers
#
request_header_max_size 10 KB
request_body_max_size 512 KB
reply_body_max_size 3584000 allow all

Noms de domini

.foo.com impedeix qualsevol pàgina del domini foo.com (www.foo.com, wiki.foo.com o elquesigui.foo.com)
foo.com Només impedeix foo.com

Servidor proxy transparent

Cal posar:

http_port 3128 intercept

NOTA: Abans es posava transparent. Ara és obsolet/deprecated i es recomana posar intercept que indica millor el que fa el servidor Squid

Consulteu:

NOTA: Molt important!: Squid no fa cache de pàgines HTTPS. Això és per evitar atacs man-in-the-middle. Amb un proxy transparent (AFAIK) no es poden filtrar pàgines HTTPS. Tingueu en compte que això implica que a moltes pàgines si podrà accedir igualment encara que filtreu, p. ex. https:///www.facebook.es

NOTA: També s'anomena Interception Caching, Transparent Proxying o Cache Redirection

Interception Caching is the process by which HTTP connections coming from remote clients are redirected to a cache server, without their knowledge or explicit configuration.

Avantatges

  • No cal configurar els clients. Aquesta és la raó per la qual en xarxes amb moltes màquines se sol valorar aquesta opció.
  • Es poden implementar millors im ñes fiables estrategies per tal de mantenir l'accés dels clients en case de que la infraestructura de cache no funcioni.

Inconvenients:

  • Interceptar HTTP trenca els estàndards TCP/IP per què els user agents (navegadors dels clients ) creuen que estan parlant directament alm el servidor original
  • Necessita IPv4 am suport per a NAT (iptables)
  • Provoca que no funcioni path-MTU (PMTUD) i és possible que alguns llocs remots no estiguin accessibles. Normalment això no és un problema per a clients connectats per Ethernet o DSL PPPoATM on el MTU de tots els enllaços entre la cache i el client és de 1500 o més. En canvi si els clients es connectant per DSL PPPoE ja que tenen normalment un MTU reduit (1472 és lo habitual).
  • A versions antigues de IE (abans de la 6) no funciona ctrl-reload de la fomra esperada.
  • Autenticació de proxy no funciona, i l'autenticació per IP tampoc funciona per què els usuaris provenen tots (tenen la IP d'origen de la màquina que intercepta) de la màquina que intercepta i no pas de la IP original.
  • No es pot utilitzar IDENT lookups (que de totes formes són molt insegures)
  • NOMÉS SUPORTA HTTP. NO FUNCIONA AMB gopher, SSL, o FTP. No es poden utilitzar ordres de redirecció amb altres protocols que no siguin HTTP
  • Intercepting Caches are incompatible with IP filtering designed to prevent address spoofing.
  • Clients are still expected to have full Internet DNS resolving capabilities; in certain intranet/firewalling setups, this is not always wanted.
  • Related to above: suppose the users browser connects to a site which is down. However, due to the transparent proxying, it gets a connected state to the interceptor. The end user may get wrong error messages or a hung browser, for seemingly unknown reasons to them.

IMPORTANT: No es pot utilitzar autenticació amb el mode Interception!

Recursos:

Configuració

Configuració del fitxer /etc/squid3/squid.conf:

httpd_accel_host virtual
httpd_accel_port 0
httpd_accel_whith_proxy on
httpd_accel_uses_host_header on

i sobretot:

http_port 3128 transparent

NOTA: A partir de Squid 3.1 cal:

http_port 3128 intercept

Cal tenir sysctl configurat amb:

# Controls IP packet forwarding
net.ipv4.ip_forward = 1 

# Controls source route verification
net.ipv4.conf.default.rp_filter = 0

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

Consulteu que tingueu:

$ cat /proc/sys/net/ipv4/ip_forward 
1
$ cat /proc/sys/net/ipv4/conf/all/rp_filter 
0
$ cat /proc/sys/net/ipv4/conf/all/accept_source_route 
0

També cal configurar IPTABLES.Consulteu la secció Proxy_transparent_amb_iptables de l'article Netfilter/iptables.

Amb webmin tenim l'apartat Port Redirection Setup:

Fitxer:PortRedirectionSetup.png

cache_peer, exemples de jerarquia amb pares i/o germans

cache_peer

és el paràmetre que ens permet personalitzar el nostre Squid per indicar-li amb quins altres proxy-cache s'ha de relacionar i quin tipus de relació hi ha de tenir: pares o germans.

La sintaxi bàsica és:

cache_peer servidor tipus http_port icp_port opcions


Un escenari amb un pare:

Si el nostre servidor de cache està per sota d'un altre servidor de cache, un pare, que té la IP 10.138.100.2, que escolta les peticions HTTP pel port 8080 i les peticions ICP pel port 3130, si no volem que ens desi a la nostra cache els objectes que ja estiguin a la cache del proxy pare:

cache_peer 10.138.100.2 parent 8080 3130 proxy-only

En xarxes on hi ha diversos servidors proxy, que emmagatzemen contingut d'Internet a les seves caches, és interessant que treballin de manera conjunta. Tenir definits caches com a germans (sibbling) és interessant perquè abans de demanar una cosa a fora es fa la consulta a la mateixa LAN (optimitzem ampla de banda per evitar descarregar coses que ja tenim a la mateixa xarxa).


Per autenticar-nos a un pare, si falla, al següent

Es tracta d'una solució molt útil de cara a preveure fallades. Si un proxy falla (per manteniment per exemple) l'squid intentarà fer una connexió al següent de la llista amb autenticació. Així podem reenviar el transit del nostre proxy a un altre.

cache_peer 10.139.xx.01 parent 3128  3128  proxy-only no-query no-digest  default login=USUARI:CONTRASSENYA
cache_peer 10.139.xx.02 parent 3128  3128  proxy-only no-query no-digest  default login=USUARI:CONTRASSENYA
cache_peer 10.139.xx.03 parent 3128  3128  proxy-only no-query no-digest  default login=USUARI:CONTRASSENYA

Si el primer falla intentarà la connexió amb el següent fins que en trobi un que funcioni.

Alerta: No comprova quin és millor, senzillament va intentant seqüencialment un per un i el primer que funciona s'hi queda.


Un escenari amb germans:

Si el nostre servidor de cache està treballant de manera paral·lela amb tres servidors de cache germans, que tenen les IP 10.138.101.2, 10.138.102.2 i 10.138.103.2, els tres escolten les peticions HTTP pel port 8080 i les peticions ICP pel 3130, si no volem que ens desi a la nostra cache els objectes que ja estan a les caches dels germans:

cache_peer 10.138.101.2 sibbling 8080 3130 proxy-only
cache_peer 10.138.102.2 sibbling 8080 3130 proxy-only
cache_peer 10.138.103.2 sibbling 8080 3130 proxy-only


Escenari amb pare i germans:

Podem fer les combinacions que ens calgui, per evitar sortir a fora si ja ho tenim a la LAN:

cache_peer 10.138.100.2 parent 8080 3130 proxy-only
cache_peer 10.138.101.2 sibbling 8080 3130 proxy-only
cache_peer 10.138.102.2 sibbling 8080 3130 proxy-only
cache_peer 10.138.103.2 sibbling 8080 3130 proxy-only

Font: Blog lluis.dalmau Més informació: Blog lluis.dalmau

Modificar/fer a mida les pàgines d'error

Les trobareu a la carpeta:

$ ls /etc/squid/errors
ERR_ACCESS_DENIED            ERR_DNS_FAIL           ERR_FTP_NOT_FOUND     ERR_INVALID_REQ   ERR_ONLY_IF_CACHED_MISS  ERR_TOO_BIG
ERR_CACHE_ACCESS_DENIED      ERR_FORWARDING_DENIED  ERR_FTP_PUT_CREATED   ERR_INVALID_RESP  ERR_READ_ERROR           ERR_UNSUP_REQ
ERR_CACHE_MGR_ACCESS_DENIED  ERR_FTP_DISABLED       ERR_FTP_PUT_ERROR     ERR_INVALID_URL   ERR_READ_TIMEOUT         ERR_URN_RESOLVE
ERR_CANNOT_FORWARD           ERR_FTP_FAILURE        ERR_FTP_PUT_MODIFIED  ERR_LIFETIME_EXP  ERR_SHUTTING_DOWN        ERR_WRITE_ERROR
ERR_CONNECT_FAIL             ERR_FTP_FORBIDDEN      ERR_FTP_UNAVAILABLE   ERR_NO_RELAY      ERR_SOCKET_FAILURE       ERR_ZERO_SIZE_OBJECT

Podeu crear un fitxer (/usr/local/squid/etc/porno.txt) amb un text com:

Our company policy is to deny requests to known porno sites.  If you
feel you've received this message in error, please contact
the support staff (support@this.company.com, 555-1234).

I després posar

acl porn url_regex "/usr/local/squid/etc/porno.txt"
deny_info ERR_NO_PORNO porn
http_access deny porn

NOTA: A les plantilles d'Error l'hora està en GMT. Per mostrar l'hora local cal posar %t en comptes de %T a les plantilles

Delay Pools

Cal tenir squid compilat amb l'opció --enable-delay-pools:

$ squid3 -v | grep pool
configure options:  '--build=i486-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' 
...
--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-underscores' '--enable-icap-client' '--enable-follow-x-forwarded-for'  
...

Directiva delay_pools:

delay_pools N

On N és el nombre de delay pools.

La directiva delay_class indica el tipus de delay pool:

delay_class id class 

On id identifica el delay pool i id_class la classe

Hi ha 3 classes a Squid 2.0:

  • Classe 1: Es defineix una única estructura de control, limitant el ús del canal sense distingir entre màquines client. També s'anomena un únic aggregate bucket. Es indicat per tal de controlar l'ús de l'ample de banda sense importa l'ús que en fan els clients.
  • Clase 2: Esta format per 256 Delay Pools de classe 1. Es parla d'un aggregate bucket i 256 individual buckets. S'utilitza en xarxes de classe C i Squid assigna un delay pool a cada possible client.
  • Clase 3: Són 256 Delay Pools de classe 2. 1 aggregate bucket, 256 network buckets, i 65,536 individual buckets. Xarxes de classe B.

Un exemple:

delay_pools 3
delay_class 1 3 ## el Delay Pool 1 és classe 3
delay_class 2 1 ## el Delay Pool 2 és classe 1
delay_class 3 2 ## el Dalay Pool 3 és classe 2 

Per especificar els paràmetres del delay pool:

delay_parameters id rate/size [ rate/size [rate/size]] 

Es defineixen tres rate/size:

  • El primer és obligatori.

NOTA: Les mides s'especifiquen en Bytes tant el rate com el size. Cal tenir en compte que les mides d'ample de banda són normalment en bps, bits per segon i per tant cal fer la conversió.

Exemple de conversió:

Si vegeu un valor de 76800, estem indicant els Bytes/s. Per passar a Kbps:

76800*8/1024=600Kbps

En una línia ADSL teòrica de 6Mbps, passant un test ADSL:

Download Speed: 2215 kbps (276.9 KB/sec transfer rate)
Upload Speed: 494 kbps (61.8 KB/sec transfer rate)

Vegem un exemple de Delay Pool de classe 1:

delay_parameters 1 76800/230400

S'utilitza un ampla de banda màxim de 76800bps (600Kb/s) permeten ràfages per a una mida màxima de 1800Kb (1,8M aprox.)

Altres exemples:

# asigno el canal a hosts en una red clase C sin límite global

delay_parameters 1 -1/-1 10000/200000  

# asigno canal en una red clase B a hosts individuales sin límites por subred

delay_parameters 2 340787/1022361 -1/-1 10000/200000 

# asigno canal en una red clase B a cada su red sin importar los hosts 

delay_parameters 3 340787/1022361 10000/200000 -1/-1  
Monitoritzar Delay Pools

Es pot fer amb l'ordre:

squidclient mgr:delay | less 

Les podeu observar en temps real amb watch:

$ watch -n 1 "squidclient mgr:delay | less" 

Per provar el correcte funcionament dels delay pools utilitzeu wget o iptraf ja que els navegadors fan mitges i poden emmanscarar el resultat final.

Fitxer de configuració de l'INS de l'Ebre

$ sudo cat /etc/squid3/squid.conf|more
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl SSL_ports port 563 # snews
acl SSL_ports port 993 # IMAP GMAIL
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 563 # 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 CONNECT method CONNECT
acl Aules_informatica src 192.168.7.0/255.255.255.0
acl unrestricted_ips src "/etc/squid3/src_unrestricted_ip.acl"
acl unrestricted_macs arp "/etc/squid3/src_unrestricted_mac.acl"

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost

visible_hostname ebrecop1
cache_mgr informatica@iesebre.com

#No cache
acl no_cache_hosts url_regex -i "/etc/squid3/dst_nocache_url.acl"
cache deny no_cache_hosts

cache_mem 750 MB
cache_dir aufs /var/spool/squid3 10000 16 256

#Errors en català
error_directory /usr/share/squid-langpack/ca
#Activar user agent log
#useragent_log /var/log/squid3/user_agent.log

strip_query_terms off  

#Navegadors
acl navegadors browser -i firefox
acl navegadors browser -i explorer
acl navegadors browser -i chrome

#Utilitzar usuaris del fitxer /etc/squid3/users
auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/users
auth_param basic children 30
auth_param basic realm Servidor Proxy del Institut de l'Ebre
auth_param basic credentialsttl 6 hours
auth_param basic casesensitive off

#Usuaris
acl guestuser proxy_auth guest
acl ncsa_users proxy_auth REQUIRED

#Clients sense restriccions
http_access allow unrestricted_ips unrestricted_macs

#Permetre totes les aplicacions que no siguin els navegadors
http_access allow Aules_informatica !navegadors
http_access allow ncsa_users

#TODO: Crear un delay pool per a l'usuari convidat:
#User: alumne
#Password: guest
#Forçar que funcioni més lentament  

delay_pools 1
delay_class 1 1

delay_parameters 1 640/400000

delay_access 1 allow guestuser
delay_access 1 deny all 

http_access deny all

#Activar SquidGuard
redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
redirect_children 50
redirector_bypass on

icp_access deny all
htcp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid3/access.log squid
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern (cgi-bin|\?)	0	0%	0
refresh_pattern .		0	20%	4320
icp_port 3130
coredump_dir /var/spool/squid3

Fitxers de hosts i llistes de denegació

Recursos:

Limitar el nombre de connexions simultànies d'un client

acl ACCOUNTSDEPT 192.168.5.0/24
acl limitusercon maxconn 3
http_access deny ACCOUNTSDEPT limitusercon

NO fer cache de certes pàgines. Directiva nocache

TODO

Utilitzar la directiva no_cache ...

Fitxers de Log

Consulteu a la wiki d'Squid el FAQ sobre els logs

Es pot modificar el format del fitxer de log amb la directiva logformat:

logformat <name> <format specification>

On <format specification> és una cadena de text amb format codes que comencen per %.

Format codes:

	        >a	Client source IP address
		>A	Client FQDN
		>p	Client source port
		<A	Server IP address or peer name
		la	Local IP address (http_port)
		lp	Local port number (http_port)
		ts	Seconds since epoch
		tu	subsecond time (milliseconds)
		tl	Local time. Optional strftime format argument
			default %d/%b/%Y:%H:%M:%S %z
		tg	GMT time. Optional strftime format argument
			default %d/%b/%Y:%H:%M:%S %z
		tr	Response time (milliseconds)
		>h	Request header. Optional header name argument
			on the format header[:[separator]element]
		<h	Reply header. Optional header name argument
			as for >h
		un	User name
		ul	User name from authentication
		ui	User name from ident
		us	User name from SSL
		ue	User name from external acl helper
		Hs	HTTP status code
		Ss	Squid request status (TCP_MISS etc)
		Sh	Squid hierarchy status (DEFAULT_PARENT etc)
		mt	MIME content type
		rm	Request method (GET/POST etc)
		ru	Request URL
		rp	Request URL-Path excluding hostname
		rv	Request protocol version
		et	Tag returned by external acl
		ea	Log string returned by external acl
		<st	Reply size including HTTP headers
		>st	Request size including HTTP headers
		st	Request+Reply size including HTTP headers
		<sH	Reply high offset sent
		<sS	Upstream object size
		%	a literal % character

Els formats ja existents són:

logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
logformat squidmime %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt [%>h] [%<h]
logformat common %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st %Ss:%Sh
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh

Al fitxer de configuració per defecte la línia:

access_log /var/log/squid3/access.log squid

Determina que el format escollir és squid:

%ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt

o

time elapsed remotehost code/status bytes method URL rfc931 peerstatus/peerhost type
1264350783.235    391 192.168.1.14 TCP_REFRESH_UNMODIFIED/304 399 GET http://www.tv3.cat/cuines/img/menu/072.gif - DIRECT/194.224.66.35 image/gif

On

  • %ts: Seconds since epoch (marca de temps). A l'exemple: 1264350783
  • %tu: subsecond time (milliseconds): 235
  • %6tr: Response time (milliseconds). A l'exemple: 391
  • %>a: Client source IP address. A l'exemple: 192.168.1.14
  • %Ss/%03Hs: Squid request status (TCP_MISS etc) + / + HTTP Status Code. A l'exemple: TCP_REFRESH_UNMODIFIED/304
  • %<st: Reply size including HTTP headers. A l'exemple:339
  • %rm: Request method (GET/POST etc). A l'exemple:GET
  • %ru: Request URL. A l'exemple: http://www.tv3.cat/cuines/img/menu/072.gif
  • %un: Username (si s'aplica) (sinó surt un guió)
  • %Sh/%<A: Squid hierarchy status (DEFAULT_PARENT etc) + / + Server IP address or peer name. A l'exemple: DIRECT/194.224.66.35
  • %mt: MIME content type. A l'exemple: image/gif

Recursos:

Formats predefinits de fitxer de log

Hi ha els següents:

logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
logformat squidmime %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt [%>h] [%<h]
logformat common %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st %Ss:%Sh
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh

S'indica quin s'utilitza amb:

 access_log /var/log/squid3/access.log format

Per defecte teniu:

access_log /var/log/squid3/access.log squid

Squid Result codes

NOTA: IMS vol dir If-Modified-Since

TCP_HIT Un còpia de l'objecte vàlida s'ha obtingut de la memòria cau.

TCP_MISS L'objecte no era a la memòria cau.

TCP_REFRESH_HIT o TCP_REFRESH_UNMODIFIED L'objecte era a la memòria cau però estava caducat (STALE). La petició IMS (If-Modified-Since) ha retornat un codi de resposta HTTP 
"304 not modified".

TCP_REFRESH_FAIL_HIT L'objecte era a la memòria cau però estava caducat (STALE). La petició IMS ha fallat i es retorna l'objecte caducat

TCP_REFRESH_MISS L'objecte era a la memòria cau però estava caducat (STALE). La petició IMS ha retornat el nou contingut

TCP_CLIENT_REFRESH_MISS El client a demanat una nova versió del fitxer

TCP_IMS_HIT El client ha fer una petició IMS d'un objecte que estava fresc a la memòria cau.

TCP_SWAPFAIL_MISS Error! L'objecte s'esperava trobar-lo a la memòria cau però no s'ha trobat. 

TCP_NEGATIVE_HIT S'ha demanat un objecte que esta la memòria cau però amb una resposta negativa ("404 not found"). Depèn del negative TTL.
for negative_ttl in your squid.conf file.

TCP_MEM_HIT Una còpia del fitxer estava en memòria RAM i no a calgut accedir a disc.

TCP_DENIED L'accés a estat denegat per aquesta petició

TCP_OFFLINE_HIT L'objecte ha estat demanat en mode offline

TCP_STALE_HIT Tot i estar caducat l'objecte s'ha servit. 

TCP_ASYNC_HIT ...

TCP_ASYNC_MISS ...

També hi ha peticions similars per a UDP:

UDP_HIT, UDP_MISS, UDP_DENIED, UDP_INVALID...

Consulteu:

Control d'accés. access.log

En temps real podeu monitoritzar l'ús que s'està gent del proxy amb:

$ sudo tail -f /var/log/squid3/access.log
1183497461.620    206 87.219.199.153 TCP_NEGATIVE_HIT/404 619 GET http://xarxantoni.net:8080/favicon.ico - NONE/- text/html
1183497461.728      5 87.219.199.153 TCP_NEGATIVE_HIT/404 619 GET http://xarxantoni.net:8080/favicon.ico - NONE/- text/html
1183497487.892      5 87.219.199.153 TCP_NEGATIVE_HIT/404 619 GET http://xarxantoni.net:8080/favicon.ico - NONE/- text/html
1183497489.056   8714 87.219.199.153 TCP_MISS/200 4217 GET http://xarxantoni.net:8080/mediawiki/index.php? - DIRECT/217.149.150.24 text/html
1183497489.240     45 87.219.199.153 TCP_NEGATIVE_HIT/404 619 GET http://xarxantoni.net:8080/favicon.ico - NONE/- text/html
1183497509.789    772 87.219.199.153 TCP_MISS/302 568 POST http://xarxantoni.net:8080/mediawiki/index.php? - DIRECT/217.149.150.24 text/html
1183497510.528      5 87.219.199.153 TCP_NEGATIVE_HIT/404 619 GET

O podeu escollir les columnes que voleu visualitzar amb awk:

# tail -f /var/log/squid3/access.log | awk '{print$3 " " $8 " " $7}'

Llegir el fitxer de log amb dates humanes

Les dates dels fitxers de log d'Squid estan en epochs un format per a ordinadors. Per posar les dates en forma humà:

 $ sudo tail -f /var/log/squid/access.log | awk '{ print strftime("%c ", $1) $0; }'

A Debian:

$ sudo apt-get install gawk
$ sudo tail -f /var/log/squid/access.log | gawk '{ print strftime("%c ", $1) $0; }'

Consulteu:

Conversió d'epoch a data

Exemple d'ús dels fitxers de log

Consultar els navegador (browsers agents) utilitzats i mostrar una estadística d'ús:

$ sudo cat /var/log/squid/user_agent.log | awk '{print $4}' | sort|uniq -c | sort -n

/var/log/squid3/cache.log

$ sudo tail -f /var/log/squid3/cache.log 
2010/01/23 18:17:50|         0 Objects expired.
2010/01/23 18:17:50|         0 Objects cancelled.
2010/01/23 18:17:50|         0 Duplicate URLs purged.
2010/01/23 18:17:50|         0 Swapfile clashes avoided.
2010/01/23 18:17:50|   Took 1.00 seconds (  0.00 objects/sec).
2010/01/23 18:17:50| Beginning Validation Procedure
2010/01/23 18:17:50|   Completed Validation Procedure
2010/01/23 18:17:50|   Validated 25 Entries
2010/01/23 18:17:50|   store_swap_size = 0
2010/01/23 18:17:50| storeLateRelease: released 0 objects

Es pot utilitzar per Depurar.

Activar el log dels user-agents (navegadors)

NOTA: Cal tenir en compte que les versions binaries dels paquets d'Squid com per exemple els d'Ubuntu no han esta compilats amb suport per a user-agent. Si executeu Squid directament veureu:

$ sudo /usr/sbin/squid3
2010/02/02 09:17:32| cache_cf.cc(346) squid.conf:57 unrecognized: 'useragent_log'

La compilació s'ha de fer amb l'opció:

--enable-useragent-log

Consulteu Squid#Recompilar_el_paquet_Debian.

Es pot comprovar si teniu suport per a user agent amb:

$ squid3 -v | grep userangent

Cal afegir la següent línia al fitxer de configuració d'Squid /etc/squid3/squid.conf:

useragent_log /var/log/squid3/useragent.log

On el camí del fitxer de log el podeu escollir (ha de ser una carpeta on el procés squid pugui escriure, és a dir que hi tingui permisos l'usuari que executa el procés - proxy):

$ ls -la var/log/squid3
total 23332
drwxr-xr-x  2 proxy proxy     4096 2010-10-18 06:38 .
drwxr-xr-x 15 root  root      4096 2010-10-18 06:38 ..
-rw-r-----  1 proxy proxy  6900886 2010-10-18 11:33 access.log
-rw-r-----  1 proxy proxy    56112 2010-10-17 20:24 access.log.1
-rw-r-----  1 proxy proxy     1624 2010-10-16 22:03 access.log.2.gz
-rw-r-----  1 proxy proxy  4487605 2010-10-18 07:52 cache.log
-rw-r-----  1 proxy proxy  1495481 2010-10-17 06:54 cache.log.1
-rw-r-----  1 proxy proxy    76722 2010-10-16 06:49 cache.log.2.gz
-rw-r-----  1 proxy proxy 10545941 2010-10-18 11:33 store.log
-rw-r-----  1 proxy proxy   258017 2010-10-18 06:24 store.log.1
-rw-r-----  1 proxy proxy    36695 2010-10-17 06:24 store.log.2.gz

Podeu consultar el User-agent de Firefox posant la URL:

about:config

I consultant el paràmetre:

general.useragent.extra.firefox

NOTA: De fet també el podeu modificar des d'aquí o utilitzant el plugin User Agent Switcher

Format del fitxer de log dels user agents

Format de log d'Apache. Analitzadors de logs d'Apache

Cal posar

emulate_httpd_log on

Para emular el formato de log del apache, esto nos sirve para utilizar los analizadores de logs de apache

Client Squid

S'intal·la amb:

$ sudo apt-get install squidclient

Serveix per provar un servidor squid des de la línia de comandes:

$ squidclient -h proxy.domini.com -p 800 http://www.upc.edu

Accés al manager des del client squid

Vegeu també cachemgr

$ sudo apt-get install squidclient
$ squidclient mgr:info
HTTP/1.0 200 OK
Server: squid/3.0.STABLE18
Mime-Version: 1.0
Date: Sun, 24 Jan 2010 20:25:42 GMT
Content-Type: text/plain
Expires: Sun, 24 Jan 2010 20:25:42 GMT
Last-Modified: Sun, 24 Jan 2010 20:25:42 GMT
X-Cache: MISS from localhost
X-Cache-Lookup: MISS from localhost:3128
Via: 1.0 localhost (squid/3.0.STABLE18)
Proxy-Connection: close

Squid Object Cache: Version 3.0.STABLE18
Start Time:	Sun, 24 Jan 2010 20:25:40 GMT
Current Time:	Sun, 24 Jan 2010 20:25:42 GMT
Connection information for squid:
	Number of clients accessing cache:	1
	Number of HTTP requests received:	0

Number of ICP messages received: 0

	Number of ICP messages sent:	0
	Number of queued ICP replies:	0
	Number of HTCP messages received:	0
	Number of HTCP messages sent:	0
	Request failure ratio:	 0.00
	Average HTTP requests per minute since start:	0.0
	Average ICP messages per minute since start:	0.0
	Select loop called: 140 times, 13.891 ms avg
Cache information for squid:

Hits as % of all requests: 5min: 0.0%, 60min: 0.0%

	Hits as % of bytes sent:	5min: -0.0%, 60min: -0.0%
	Memory hits as % of hit requests:	5min: 0.0%, 60min: 0.0%
	Disk hits as % of hit requests:	5min: 0.0%, 60min: 0.0%
	Storage Swap size:	5296 KB
	Storage Swap capacity:	 5.2% used, 94.8% free
	Storage Mem size:	108 KB
	Storage Mem capacity:	 1.3% used, 98.7% free
	Mean Object Size:	15.00 KB
	Requests given to unlinkd:	0
Median Service Times (seconds)  5 min    60 min:
	HTTP Requests (All):   0.00000  0.00000
	Cache Misses:          0.00000  0.00000
	Cache Hits:            0.00000  0.00000
	Near Hits:             0.00000  0.00000
	Not-Modified Replies:  0.00000  0.00000
	DNS Lookups:           0.00000  0.00000
	ICP Queries:           0.00000  0.00000
Resource usage for squid:
	UP Time:	1.945 seconds
	CPU Time:	0.052 seconds
	CPU Usage:	2.67%
	CPU Usage, 5 minute avg:	0.00%
	CPU Usage, 60 minute avg:	0.00%
	Process Data Segment Size via sbrk(): 2580 KB
	Maximum Resident Size: 0 KB
	Page faults with physical i/o: 0
Memory usage for squid via mallinfo():
	Total space in arena:    2848 KB
	Ordinary blocks:         2812 KB      2 blks
	Small blocks:               0 KB      0 blks
	Holding blocks:         27704 KB     14 blks
	Free Small blocks:          0 KB
	Free Ordinary blocks:      35 KB
	Total in use:           30516 KB 100%
	Total free:                35 KB 0%
	Total size:             30552 KB
Memory accounted for:
	Total accounted:         2174 KB   7%
	memPool accounted:       2174 KB   7%
	memPool unaccounted:    28377 KB  93%
	memPoolAlloc calls:      3205
	memPoolFree calls:       1090
File descriptor usage for squid:
	Maximum number of file descriptors:   65535
	Largest file desc currently in use:     15
	Number of file desc currently in use:   10
	Files queued for open:                   0
	Available number of file descriptors: 65525
	Reserved number of file descriptors:   100
	Store Disk files open:                   0
Internal Data Structures:
	   380 StoreEntries
	    27 StoreEntries with MemObjects
	    26 Hot Object Cache Items
	   353 on-disk objects

El podeu consultar en temps real amb l'ordre watch:

 $ watch -n 1 "squidclient mgr:info"

Pàgines del cache manager

client_list

$ squidclient mgr:client_list | more
HTTP/1.0 200 OK
Server: squid/3.0.STABLE18
Mime-Version: 1.0
Date: Mon, 17 May 2010 10:16:53 GMT
Content-Type: text/plain
Expires: Mon, 17 May 2010 10:16:53 GMT
Last-Modified: Mon, 17 May 2010 10:16:53 GMT
X-Cache: MISS from localhost
X-Cache-Lookup: MISS from localhost:3128
Via: 1.0 localhost (squid/3.0.STABLE18)
Proxy-Connection: close

Cache Clients:
Address: 192.168.2.57
Name:    192.168.2.57
Currently established connections: 0
    ICP  Requests 0
    HTTP Requests 27
        TCP_MISS                  23  85%
        TCP_CLIENT_REFRESH_M       4  15% 
...


Podeu veure la llista completa a:

http://tilt.lib.tsinghua.edu.cn/docs/books/squid/TheDefinitiveGuideChinese/0596001622/squid-CHP-14-SECT-2.html

Autenticació

Squid permet que els usuaris del Proxy s'hagin d'autenticar abans de poder-lo utilitzar. L'autenticació es pot fer amb:

  • LDAP: Protocol Lightweight Directory Access Protocol
  • NCSA: Fitxer NCSA-style d'usuaris i paraules de pas
  • MSNT: Utilitza un domini Windows NT per l'autenticació
  • PAM: Unix Pluggable Authentication Modules.
  • SMB: Utilitza Samba o el protocol SMB de xarxes Windows.
  • getpwam: Utilitza el fitxer de password de Unix.
  • SASL: Llibreries SALS.
  • mswin_sspi: Windows native authenticator
  • YP: Utilitza la base de dades de NIS.
  • NTLM: Sistema que suporta el xifratge de les dades d'autenticació.
  • MySQL: Autenticació mitjançant una base de dades

La directiva d'Squid que s'utilitza per activar l'autenticació és auth param. La sintaxi és:

auth_param scheme parameter [setting]

IMPORTANT: No és possible utilitzar autenticació amb un Proxy transparent

Extret del fitxer original de configuració proporcionat per Squid:

#       format: auth_param scheme parameter [setting]
#
#       The order in which authentication schemes are presented to the client is
#       dependent on the order the scheme first appears in config file. IE
#       has a bug (it's not RFC 2617 compliant) in that it will use the basic
#       scheme if basic is the first entry presented, even if more secure
#       schemes are presented. For now use the order in the recommended  
#       settings section below. If other browsers have difficulties (don't
#       recognize the schemes offered even if you are using basic) either 
#       put basic first, or disable the other schemes (by commenting out their
#       program entry).
#
#       Once an authentication scheme is fully configured, it can only be
#       shutdown by shutting squid down and restarting. Changes can be made on
#       the fly and activated with a reconfigure. I.E. You can change to a
#       different helper, but not unconfigure the helper completely.
#
#       Please note that while this directive defines how Squid processes
#       authentication it does not automatically activate authentication.
#       To use authentication you must in addition make use of ACLs based
#       on login name in http_access (proxy_auth, proxy_auth_regex or
#       external with %LOGIN used in the format tag). The browser will be
#       challenged for authentication on the first such acl encountered  
#       in http_access processing and will also be re-challenged for new 
#       login credentials if the request is being denied by a proxy_auth 
#       type acl.
#
#       WARNING: authentication can't be used in a transparently intercepting
#       proxy as the client then thinks it is talking to an origin server and
#       not the proxy. This is a limitation of bending the TCP/IP protocol to
#       transparently intercepting port 80, not a limitation in Squid.
#       Ports flagged 'transparent' or 'tproxy' have authentication disabled. 
#
#       === Parameters for the basic scheme follow. ===
#
#       "program" cmdline
#       Specify the command for the external authenticator.  Such a program
#       reads a line containing "username password" and replies "OK" or
#       "ERR" in an endless loop. "ERR" responses may optionally be followed
#       by a error description available as %m in the returned error page.  
#       If you use an authenticator, make sure you have 1 acl of type proxy_auth.
#
#       By default, the basic authentication scheme is not used unless a
#       program is specified.
#
#       If you want to use the traditional NCSA proxy authentication, set
#       this line to something like
#
#       auth_param basic program /usr/lib/squid3/ncsa_auth /usr/etc/passwd
#
#       "children" numberofchildren
#       The number of authenticator processes to spawn. If you start too few
#       Squid will have to wait for them to process a backlog of credential 
#       verifications, slowing it down. When password verifications are
#       done via a (slow) network you are likely to need lots of
#       authenticator processes.
#       auth_param basic children 5
#
#       "concurrency" concurrency
#       The number of concurrent requests the helper can process.
#       The default of 0 is used for helpers who only supports   
#       one request at a time. Setting this changes the protocol used to
#       include a channel number first on the request/response line, allowing
#       multiple requests to be sent to the same helper in parallell without 
#       wating for the response.
#       Must not be set unless it's known the helper supports this.
#       auth_param basic concurrency 0
# 
#       "realm" realmstring
#       Specifies the realm name which is to be reported to the
#       client for the basic proxy authentication scheme (part of
#       the text the user will see when prompted their username and
#       password). There is no default.
#       auth_param basic realm Squid proxy-caching web server
#
#       "credentialsttl" timetolive
#       Specifies how long squid assumes an externally validated
#       username:password pair is valid for - in other words how
#       often the helper program is called for that user. Set this
#       low to force revalidation with short lived passwords.  Note
#       setting this high does not impact your susceptibility
#       to replay attacks unless you are using an one-time password
#       system (such as SecureID).  If you are using such a system,
#       you will be vulnerable to replay attacks unless you also   
#       use the max_user_ip ACL in an http_access rule.
#
#       "casesensitive" on|off
#       Specifies if usernames are case sensitive. Most user databases are
#       case insensitive allowing the same username to be spelled using both
#       lower and upper case letters, but some are case sensitive. This
#       makes a big difference for user_max_ip ACL processing and similar.
#       auth_param basic casesensitive off
 

Consulteu:

Helpers

S'anomenen així els binaris o scripts que s'utilitzen per a implementar els diferents mètodes d'autenticació. Els podeu tornar a la carpeta:

/usr/lib/squid3/

Són els fitxers acabats en auth:

$ ls /usr/lib/squid3/ | grep auth
digest_ldap_auth
digest_pw_auth
getpwname_auth
msnt_auth
ncsa_auth
ntlm_auth
pam_auth
sasl_auth
smb_auth
smb_auth.pl
smb_auth.sh
squid_kerb_auth
squid_ldap_auth
yp_auth

Directives d'Squid


Les podeu consultar totes a:

http://www.squid-cache.org/Doc/config/

Excepcions a l'autenticació. auth-bypass

auth-bypass permet indicar llocs web als quals no se'ls aplicarà autenticació:

TODO Example:


Navegadors Es pode combinar acls que detecten el tipus de navegador per tal de no aplicar autenticació a lo que no siguin navegadors.

Recursos:

NCSA

Primer cal crear el fitxers d'usuaris i paraules de pas. Per al primer usuari cal crear el fitxers amb l'opció -c

$ sudo htpasswd -c /etc/squid3/passwd user
New password: 
Re-type new password: 
Adding password for user user

La resta d'usuaris es poden crear amb:

$ sudo htpasswd /etc/squid3/passwd user2

El fitxer conté els usuaris i les paraules de pas xifrades:

$ cat /etc/squid3/passwd
user:zDlXpFhxK0hUQ
user2:b8esg7No8XZgc

Assegureu-vos que l'usuari amb que s'executa Squid pot llegir el fitxer:

$ sudo chmod o+r /etc/squid3/passwd

Localitzem el helper:

$ dpkg -L squid3 | grep ncsa_auth
/usr/lib/squid3/ncsa_auth

Configurem Squid:

$ sudo joe /etc/squid3/squid.conf

Afegiu el bloc:

auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

després de les ACL

On:

  • program: El helper de ncsa
  • children: El número de processos d'autenticació que s'engeguen. Quan més usuaris tingueu que utilitzin el sistema de forma concurrent major haurà de ser aquest número
  • realm: Nom del reialme d'autenticació. És part del text que veuran els usuaris quan els hi preguntin per l'usuari i la paraula de pas
  • credentialsttl: Temps que es mantindrà un usuari logat
  • casesensitive: Especifica si els noms d'usuari són case sensitive.

Després d'aquest bloc definiu la acl:

acl ncsa_users proxy_auth REQUIRED

I ara definiu abans del:

http_access deny all 

la línia:

http_access allow ncsa_users

NOTA: tingueu en compte que si teniu una acl que permet accedir a tots els clients segons un rang d'IPs, ara ja no necessiteu aquesta línia. Borreu-la

I apliqueu els canvis:

$ sudo /etc/init.d/squid3 reload

Proveu el navegador, us demanarà un usuari i paraula de pas.

Si ara observeu el fitxers de log veure que ja surt l'usuari:

$ sudo tail -f /var/log/squid3/access.log
...
1265094172.358    168 192.168.1.126 TCP_MISS/200 518 GET http://www10.gencat.cat/dursi/ca/posat/img/separador_ligerob.gif user DIRECT/83.247.128.163 image/gif
1265094172.398     83 192.168.1.126 TCP_MISS/200 762 GET http://www.gencat.cat/js/gencatAnalitica_id.js user DIRECT/83.247.129.60 application/x-javascript
1265094172.424    193 192.168.1.126 TCP_MISS/200 1764 GET http://www10.gencat.cat/dursi/ca/posat/img/ajuda.gif user DIRECT/83.247.128.163 image/gif


NOTA: ncsa National Center for Supercomputing Applications són qui van desenvolupar el servidor web httpd (precedent d'Apache)

Només demanar paraula de pas als navegadors

Moltes eines del sistema utilitzen Internet i n'hi forces que no suporten autenticació de Proxy o que simplement no suporten proxy. Podem configurar squid per tal que només apliqui la restricció d'autenticació al navegador web:

http_access allow clients !firefox
http_access allow ncsa_users
http_access deny all

On l'ACL de firefox és:

acl firefox browser -i firefox

També podeu utilitzar una llista de navegadors:

#Navegadors
acl navegadors browser -i firefox 
acl navegadors browser -i explorer
acl navegadors browser -i chrome  

aleshores:

http_access allow clients !navegadors
http_access allow ncsa_users
http_access deny all

Firefox i recordar paraules de pas

Quan introduïu per primer cop el vostre nom d'usuari i paraula de pas amb Firefox us preguntarà si voleu guardar la paraula de pas. Li podeu dir que la guardi permanentment.

Per borrar la paraula de pas aneu al menú Edita (Eines a Windows) i l'opció Preferències. Aneu a l'apartat Seguretat i feu clic a contrasenyes desades. Localitzeu l'usuari i contrasenya i l'esborreu.

Heu de tancar tot el navegador per tornar a iniciar una sessió.

NTLM

Squid + LDAP o Active Directory

Documentació

Hi ha una entrada del manual:

$ man squid_ldap_auth
squid_ldap_auth(8)                                                                                                                                        squid_ldap_auth(8)

NAME
       squid_ldap_auth - Squid LDAP authentication helper 

SYNOPSIS
      squid_ldap_auth -b "base DN" [-u attribute] [options] [ldap_server_name[:port]|URI]...
      squid_ldap_auth -b "base DN" -f "LDAP search filter" [options] [ldap_server_name[:port]|URI]...

DESCRIPTION
       This  helper  allows Squid to connect to a LDAP directory to validate the user name and password of Basic HTTP authentication.  LDAP options are specified as parame‐
       ters on the command line, while the username(s) and password(s) to be checked against the LDAP directory are specified on subsequent lines of input  to  the  helper,
       one username/password pair per line separated by a space.

       As  expected  by  the basic authentication construct of Squid, after specifying a username and password followed by a new line, this helper will produce either OK or
       ERR on the following line to show if the specified credentials are correct according to the LDAP directory.

       The program has two major modes of operation. In the default mode of operation the users DN is constructed using the base DN and user attribute. In the other mode of
       operation a search filter is used to locate valid user DN's below the base DN.

       -b basedn (REQUIRED)
              Specifies the base DN under which the users are located.

       -f filter
              LDAP  search  filter  to locate the user DN. Required if the users are in a hierarchy below the base DN, or if the login name is not what builds the user spe‐
              cific part of the users DN.

              The search filter can contain up to 15 occurrences of %s which will be replaced by the username, as in  "uid=%s"  for  RFC2037  directories.  For  a  detailed
              description of LDAP search filter syntax see RFC2254.  

      -u userattr
             Specifies  the name of the DN attribute that contains the username/login.  Combined with the base DN to construct the users DN when no search filter is speci‐
             fied (-f option). Defaults to 'uid'

             Note: This can only be done if all your users are located directly under the same position in the LDAP tree and the login name is used for  naming  each  user
             object.  If your LDAP tree does not match these criterias or if you want to filter who are valid users then you need to use a search filter to search for your
             users DN (-f option).

      -U passwordattr
             Use ldap_compare instead of ldap_simple_bind to verify the users password.  passwordattr is the LDAP attribute storing the users password.

      -s base|one|sub
             search scope when performing user DN searches specified by the -f option. Defaults to 'sub'.

             base object only, one level below the base object or subtree below the base object

      -D binddn -w password
             The DN and password to bind as while performing searches. Required by the -f flag if the directory does not allow anonymous searches.

             As the password needs to be printed in plain text in your Squid configuration it is strongly recommended to use a account with minimal associated  privileges.
             This to limit the damage in case someone could get hold of a copy of your Squid configuration file.

      -D binddn -W secretfile
             The DN and the name of a file containing the password to bind as while performing searches.

             Less insecure version of the former parameter pair with two advantages: The password does not occur in the process listing, and the password is not being com‐
             promised if someone gets the squid configuration file without getting the secretfile.

      -P     Use a persistent LDAP connection. Normally the LDAP connection is only open while validating a username to preserve resources at the LDAP server. This  option
             causes the LDAP connection to be kept open, allowing it to be reused for further user validations. Recommended for larger installations.

      -O     Only  bind  once  per  LDAP connection. Some LDAP servers do not allow re-binding as another user after a successful ldap_bind.  The use of this option always
             opens a new connection for each login attempt. If combined with the -P option for persistent LDAP connection then the connection used for  searching  for  the
             user DN is kept persistent but a new connection is opened to verify each users password once the DN is found.

      -R     do not follow referrals

      -a never|always|search|find
             when to dereference aliases. Defaults to 'never'

             never dereference aliases (default), always dereference aliases, only while searching or only to find the base object

      -H ldapuri
             Specity the LDAP server to connect to by LDAP URI (requires OpenLDAP libraries).  Servers can also be specified last on the command line.

      -h ldapserver
             Specify the LDAP server to connect to. Servers can also be specified last on the command line.

      -p ldapport
             Specify  an alternate TCP port where the ldap server is listening if other than the default LDAP port 389. Can also be specified within the server specificia‐
             tion by using servername:port syntax.

      -v 2|3 LDAP protocol version. Defaults to 2 if not specified.

      -Z     Use TLS encryption

      -Scertpath
             Enable LDAP over SSL (requires Netscape LDAP API libraries)

      -cconnect_timeout
             Specify timeout used when connecting to LDAP servers (requires Netscape LDAP API libraries)

      -tsearch_timeout
             Specify time limit on LDAP search operations
            The DN and the name of a file containing the password to bind as while performing searches.

             Less insecure version of the former parameter pair with two advantages: The password does not occur in the process listing, and the password is not being com‐
             promised if someone gets the squid configuration file without getting the secretfile.

      -P     Use a persistent LDAP connection. Normally the LDAP connection is only open while validating a username to preserve resources at the LDAP server. This  option
             causes the LDAP connection to be kept open, allowing it to be reused for further user validations. Recommended for larger installations.
      -O     Only  bind  once  per  LDAP connection. Some LDAP servers do not allow re-binding as another user after a successful ldap_bind.  The use of this option always
             opens a new connection for each login attempt. If combined with the -P option for persistent LDAP connection then the connection used for  searching  for  the
             user DN is kept persistent but a new connection is opened to verify each users password once the DN is found.

      -R     do not follow referrals

      -a never|always|search|find
             when to dereference aliases. Defaults to 'never'

             never dereference aliases (default), always dereference aliases, only while searching or only to find the base object

      -H ldapuri
             Specity the LDAP server to connect to by LDAP URI (requires OpenLDAP libraries).  Servers can also be specified last on the command line.

      -h ldapserver
             Specify the LDAP server to connect to. Servers can also be specified last on the command line.

      -p ldapport
             Specify  an alternate TCP port where the ldap server is listening if other than the default LDAP port 389. Can also be specified within the server specificia‐
             tion by using servername:port syntax.

      -v 2|3 LDAP protocol version. Defaults to 2 if not specified.

      -Z     Use TLS encryption

      -Scertpath
             Enable LDAP over SSL (requires Netscape LDAP API libraries)

      -cconnect_timeout
             Specify timeout used when connecting to LDAP servers (requires Netscape LDAP API libraries)

      -tsearch_timeout
             Specify time limit on LDAP search operations

      -d     Debug mode where each step taken will get reported in detail.  Useful for understanding what goes wrong if the results is not what is expected.

EXAMPLES
      For directories using the RFC2307 layout with a single domain, all you need to specify is usually the base DN under where your users are located and the server name:

             squid_ldap_auth -b "ou=people,dc=your,dc=domain" ldapserver

      If you have sub-domains then you need to use a search filter approach to locate your user DNs as these can no longer be constructed direcly  from  the  base  DN  and
      login name alone:

             squid_ldap_auth -b "dc=your,dc=domain" -f "uid=%s" ldapserver

      And similarily if you only want to allow access to users having a specific attribute

             squid_ldap_auth -b "dc=your,dc=domain" -f "(&(uid=%s)(specialattribute=value))" ldapserver

      Or  if the user attribute of the user DN is "cn" instead of "uid" and you do not want to have to search for the users then you could use something like the following
      example for Active Directory:

             squid_ldap_auth -u cn -b "cn=Users,dc=your,dc=domain" ldapserver

      If you want to search for the user DN and your directory does not allow anonymous searches then you must also use the -D and -w flags to specify a user DN and  pass‐
      word to log in as to perform the searches, as in the following complex Active Directory example

             squid_ldap_auth  -P  -R -b "dc=your,dc=domain" -D "cn=squid,cn=users,dc=your,dc=domain" -w "secretsquidpassword" -f "(&(userPrincipalName=%s)(objectClass=Per‐
             son))" activedirectoryserver

NOTES
      When constructing search filters it is strongly recommended to test the filter using ldapsearch before you attempt to use squid_ldap_auth. This to  verify  that  the
      filter matches what you expect.

AUTHOR
      This manual page was written by Henrik Nordstrom <hno@squid-cache.org>

      squid_ldap_auth is written by Glenn Newton <gnewton@wapiti.cisti.nrc.ca> and Henrik Nordstrom <hno@squid-cache.org>

KNOWN ISSUES
      Will crash if other % values than %s is used in -f, or if more than 15 %s is used.
QUESTIONS
      Any  questions  on  usage can be sent to Squid Users <squid-users@squid-cache.org>, or to your favorite LDAP list/friend if the question is more related to LDAP than
      Squid.

REPORTING BUGS
      Report bugs or bug-fixes to Squid Bugs <squid-bugs@squid-cache.org> or ideas for new improvements to Squid Developers <squid-dev@squid-cache.org>

SEE ALSO
      ldapsearch(1),
      Your favorite LDAP documentation
      RFC2254 - The String Representation of LDAP Search Filters,

Configuració

El helper per a Ldap el trobareu al fitxer:

$ file /usr/lib/squid3/squid_ldap_auth
/usr/lib/squid3/squid_ldap_auth: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

Es tracta d'un executable.

A la configuració d'Squid cal posar quelcom similar a:

auth_param basic program /usr/lib/squid/squid_ldap_auth -v 3 -b "dc=yourcompany,dc=com" -D uid=some-user,ou=People,dc=yourcompany,dc=com  -w password -f uid=%s   
ldap.yourcompany.com
 
auth_param basic children 5
auth_param basic realm Web-Proxy
auth_param basic credentialsttl 1 minute

acl ldap-auth proxy_auth REQUIRED

http_access allow ldap-auth
http_access allow localhost
http_access deny all

On:

  • -b: defineix el context (la branca de l'arbre Ldap) on voleu buscar usuaris que tinguin accés al proxy.
  • -h: Defineix el nom de màquina del servidor Ldap al qual us voleu connectar.
  • -D: Usuari que es connecta al directori Ldap. Si no l'indiqueu la connexió serà anònima
  • '-w: Paraula de pas de l'usuari. No es posa si la connexió és anònima.
  • Filtre (-f): Filtre que s'ha d'aplicar al cerca usuaris: a l'exemple es busca per l'atribut uid (user identifier). %s és el nom que introdueix l'usuari al intentar.se connectar.

IMPORTANT: Fitxeu-vos que l'anterior configuració no és gens segura, per diverses raons: la paraula de pas del servidor Ldap es guarda sense xifrar en un fitxer de text, a més si feu $ ps aux

El millor que podeu fer és connectar-vos al servidor Ldap anònimament, sense especificar la paraula de pas ni el usuari:

auth_param basic program /usr/lib/squid/squid_ldap_auth -v 3 -b "dc=yourcompany,dc=com"  -f uid=%s   

Utilitzar grups Ldap

TODO:

In addition to simple authentication you may also want to grant different privileges to different users. The easiest way is to use LDAP groups. A group is just a list of dinstiguished names. Example group:

   * dn=cn=Tim,ou=IT-Services,o=Company
   * dn=cn=Tina,ou=Management,o=Company

Assume that these two users are allowed to use Google where all other users are not allowed. First you need to define the LDAP group mapping:

external_acl_type ldapgroup %LOGIN /usr/lib/squid/squid_ldap_group -b o=Company

  -f (&(objectclass=person)(cn=%v)(groupMembership=cn=%a,ou=Proxygroups,o=Company))
  -D cn=Tim,ou=IT-Services,o=Company -w timspassword -h ldapserver

The filter expression looks a little complicated. It just means that we are looking for any user (person) with the name we are looking for (%v) who is a member of the group we are looking for (groupMembership). You can now just create any number of groups in the tree like

cn=googleallowed,ou=Proxygroups,o=Company

Then this pile of ACLs should block off everyone from google.com who is not a member of that group:

acl ldapgroup-googleallowed external ldapgroup googleallowed
acl google dstdomain google.com
http_access deny google !ldapgroup-googleallowed

You may be curious how such a group authorizator works. Simple. It just reads line after line from STDIN (like the console) where each line looks like

username groupname

and returns either OK or ERR depending on whether the user is a member of that group or not.

Recursos

Script per tal que els usuaris puguin canviar-se la paraula de pas

MySQL

NOTA: El paquet binari que es pot baixar dels repositoris d'Ubuntu no està compilat per suportar base de dades. Cal compilar Squid a partir de codi font:

$ sudo wget http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE3.tar.gz
$ sudo mv squid-2.7.STABLE3.tar.gz /opt
$ cd /opt
$ sudo tar zxvf squid-2.7.STABLE3.tar.gz
$ sudo cd /opt/squid-2.7.STABLE
$ sudo ./configure –enable-basic-auth-helpers=DB
$ sudo make
$ make install
$ sudo cp /usr/local/squid/libexec/squid_db_auth /opt
$ sudo rm -rf squid-2.7.STABLE
$ rm -rf /usr/local/squid
$ sudo apt-get install squid3
$ sudo cp /opt/squid_db_auth /usr/lib/squid

Logging

Eines gràfiques

Squid a Webmin

El mòdul Squid de Webmin esta pensat per a la versió 1 d'Squid. Per que funcioni correctament amb la versió 3 cal modificar la configuració del mòdul (part superior esquerrà Module Config):

Fitxer:SquidwebminConfiguracio.png

El fitxer de configuració és:

/etc/squid3/squid.conf

Rendiment (Performance)

Monitoritzar el rendiment

Ús de la memòria:

$ squidclient mgr:info | grep arena
	Total space in arena:    8180 KB
$ squidclient mgr:info | grep Resident

Maximum Resident Size: 0 KB

$ squidclient mgr:info | grep sbrk

Process Data Segment Size via sbrk(): 7904 KB

Es pot consultar el nombre de Page faults amb:

$ squidclient mgr:info | grep 'Page faults'
Page faults with physical i/o: 0

Una page fault succeix quan el procés squid ha d'accedir a un àrea de memòria de la swap, es a dir, quan squid està utilitzant la swap. ES recomanable que això no passi mai (a poder ser) i per tant quan més baix sigui el número de page faults millor. Cal tenir en compte que el valor mostrar és el moment en que s'executa. Podeu executar:

$ squidclient mgr:5min | grep page_fault
page_faults = 0.000000/sec

$ squidclient mgr:60min | grep page_fault
page_faults = 0.000000/sec

Per obtenir els rates dels últims 5 minuts i dels últims 60 minuts.

També és interessant el paràmetre quantitat de peticions HTTP:

# squidclient mgr:info | grep 'Number of HTTP requests'
Number of HTTP requests received:       535805

Es poden consultar uns rates amb:

# squidclient mgr:info | grep 'Average HTTP requests'
Average HTTP requests per minute since start:   108.4
# squidclient mgr:5min | grep 'client_http.requests'
client_http.requests = 3.002991/sec
# squidclient mgr:60min | grep 'client_http.requests'
client_http.requests = 2.636987/sec

Temps de servei (mediana):

$ squidclient mgr:info | more
...
Median Service Times (seconds)  5 min    60 min:
	HTTP Requests (All):   0.07825  0.32154
	Cache Misses:          0.61549  0.72387
	Cache Hits:            0.00000  0.00000
	Near Hits:             0.10281  0.19742
	Not-Modified Replies:  0.00000  0.00000
	DNS Lookups:           0.84544  0.56687
 	ICP Queries:           0.00000  0.00000
# squidclient mgr:5min | grep client_http.all_median_svc_time
client_http.all_median_svc_time = 0.127833 seconds

Warning:

high_response_time_warning 700

Temps de resposta DNS:

$ squidclient mgr:5min | grep dns.median_svc_time
dns.median_svc_time = 1.055573 seconds
$ squidclient mgr:60min | grep dns.median_svc_time
dns.median_svc_time = 0.677101 seconds

Número de descriptors de fitxers:

$ squidclient mgr:info | grep 'Number of file desc currently in use'
	Number of file desc currently in use:  425

Ús de CPU

$ squidclient mgr:60min | grep cpu_usage 

Informació de l'store dir:

$ squidclient mgr:storedir
HTTP/1.0 200 OK
Server: squid/3.0.STABLE18
Mime-Version: 1.0
Date: Mon, 17 May 2010 10:36:35 GMT
Content-Type: text/plain
Expires: Mon, 17 May 2010 10:36:35 GMT
Last-Modified: Mon, 17 May 2010 10:36:35 GMT
X-Cache: MISS from localhost
X-Cache-Lookup: MISS from localhost:3128
Via: 1.0 localhost (squid/3.0.STABLE18)
Proxy-Connection: close

Store Directory Statistics:
Store Entries          : 5319
Maximum Swap Size      :   102400 KB
Current Store Swap Size:    92160 KB
Current Capacity       : 90% used, 10% free  

Store Directory #0 (ufs): /var/spool/squid3
FS Block Size 4096 Bytes
First level subdirectories: 16
Second level subdirectories: 256
Maximum Size: 102400 KB
Current Size: 92160 KB
Percent Used: 90.00%
Filemap bits in use: 5256 of 16384 (32%)
Filesystem Space in use: 17521760/206424760 KB (8%)
Filesystem Inodes in use: 106527/13107200 (1%)
Flags: SELECTED
Removal policy: lru
LRU reference age: 0.02 days

Squid-rrd

Podeu trobar els fitxers a:

http://acacha.org/~sergi/squid-rrd.tar.gz

Els passos seguits per instal·lar squid-rrd a una Ubuntu han estat:

$ cd /var/www/
$ sudo mkdir squid-rrd/
$ cd squid-rrd/
$ sudo wget http://www.squid-cache.org/~wessels/squid-rrd/poll.pl
$ sudo wget http://www.squid-cache.org/~wessels/squid-rrd/create.sh
$ sudo wget http://www.squid-cache.org/~wessels/squid-rrd/1day-cgi
$ sudo wget http://www.squid-cache.org/~wessels/squid-rrd/htaccess
$ sudo mv htaccess .htaccess
$ sudo mv 1day-cgi 1day.cgi 
$ sudo chmod +x ./create.sh 
$ sudo ./create.sh 

Canvieu els shebangs que molts apunten a fitxers de /usr/share/local.

$ sudo perl poll.pl localhost
$ sudo joe /etc/cron.d/squid-rdd

Afegiu la línia:

*/5 * * * * root /var/www/squid-rrd/poll.pl localhost

Canvieu la línia on s'indica el path de l'eina rrdtool a:

my $rrdtool = '/usr/bin/rrdtool';
$ sudo chmod +x /var/www/squid-rrd/poll.pl 

Proveu l'script:

$ sudo /var/www/squid-rrd/poll.pl localhost

Configureu apache:

$ cd /etc/apache2/conf.d/
$ sudo joe squid-rrd

Afegiu:

<Directory "/var/www/squid-rrd">
 AllowOverride Indexes
 Options +ExecCGI
 AddHandler cgi-script .cgi
</Directory>
$ sudo a2enmod expires
$ sudo /etc/init.d/apache2 restart
$ cd /var/www/squid-rrd/
$ sudo chmod 775 .
$ sudo chown www-data:www-data .

Al fitxer:

$ sudo joe /var/www/squid-rrd/1day.cgi

Canvieu el path de l'eina 1day.cgi al shebang poseu:

#!/usr/bin/rrdcgi

I finalment:

$ sudo chmod +x /var/www/squid-rrd/1day.cgi

Benchmark

Monitoritzar

Es pot utilitzar SNMP, per activar SNMP al servidor Squid cal primer definir una ACL. Per exemple, al fitxer /etc/squid3/squid.conf:

acl snmppublic snmp_community public

El port per defecte on squid escolta peticions SNMP és el 3401. Es pot canviar amb:

snmp_port 3401

Per permetre que l'agent SNMP pugui fer consultes al servidor Squid:

snmp_access allow snmppublic localhost 
snmp_access deny all

L'anterior configuració només permet l'accés a Squid per SNMP des de la màquina localhost.

NOTA: Si no es defineix cap accés SNMP concret per defecte l'accés és denegat

Finalment es pot definir a quines interfícies escoltar peticions SNMP

snmp_incoming_address 0.0.0.0
snmp_outgoing_address 0.0.0.0 

Que són els valors per defecte (totes les interfícies)

Cacti

Es poden exportar una gràfiques de Cacti, utilitzant plantilles en format XML que trobareu a:

Utilitzeu el menú Importar plantilles de Cacti. Abans cal haver activat SNMP a Squid tal com s'ha comentat a l'apartat anterior.

Jerarquia d'Squids o Squid distribuit. Squid Mesh

TODO

Els protocols utilitzats són:

NOTA: Tingueu en compte que a la configuració per defecte està impedit l'accés a aquest protocols.

Filtrar continguts

Com indicar acls que no passaran pel redirector

Podeu utilitzar redirector_access

Com aplicar múltiples redirectors

IPCOP ho fa quan per exemple es te instal·lat el plugin urlfilter

A squid.conf:

...
url_rewrite_program /usr/sbin/redirect_wrapper
url_rewrite_children 50
...

El fitxer /usr/sbin/redirect_wrapper conté:

$ cat /usr/sbin/redirect_wrapper
#!/bin/sh
/usr/sbin/squidGuard | /usr/sbin/updxlrator

Per tant amb una simple pipe es poden aplicar múltiples redirectors.

Impedir missatgeria instantània

Messenger

Prèviament cal haver xapat amb iptables el port 1836

NOTA: S'ha observat que també cal tancar l'accés a hotmnail per tal d'impedir que les últimes versions de messenger funcionin

# MSN Messenger

acl msn urlpath_regex -i gateway.dll
acl msnd dstdomain messenger.msn.com gateway.messenger.hotmail.com
acl msn1 req_mime_type application/x-msn-messenger

http_access deny msnd
http_access deny msn
http_access deny msn1

Impedir eines de navegació anònima

Consulteu Com evitar les eines de navegació anònima. S'indica entre d'altres com prevenir Tor, Ultrasurf i Proxies anònims.

Impedir Streaming

Youtube

http://www.bellera.cat/josep/videocache/
http://cachevideos.com/
## The videos come from several domains
acl youtube_domains dstdomain .youtube.com .googlevideo.com .ytimg.com 

http_access deny youtube_domains

Fer cache de youtube

Redirectors

Squirm

Redirectors a mida

PHP

Cada X temps enviar a una pàgina concreta

#
# startpage.pl (Squid Proxy Redirector)
# joan.llopart@guifi.net 03-2008

# Redirects proxy user to a defined startpage every certain time.

use strict;

#
# --- CONFIG ---
#
# Startpage will be shown every ... (time in seconds)
my $ref_time = 3600; # 1 hour
#
# Redirection to this webpage
my $startp = "302:http://guifi.net";
#
# Directory to save user/timestamp DB
# (squid owner needs write permissions in this directory)
my $dat_dir = "/tmp";
#
# Track users by IP or username. Username only effective if proxy uses
# some kind of authentication.
my $match = "user"; # user / IP


# Autoflush STDOUT on each printed character
local $| = 1; 

$SIG{INT} = sub { die "Bye!"; };


while ( 1 ) {

  # Get stuff from squid
  my $buff_in = <>;
  chomp( $buff_in );    
  my ( $url, $src_add, $ident, $method) = split( / /, $buff_in );

  # Quits if squid does
  if( !$url || !$src_add || !$ident || !$method ) { die("Bye!"); };

  # Match by username or IP
  my $id = ($match eq "user") ? $ident : $src_add;

  # Check user's timestamp 
  open(DATA, "<$dat_dir/startpage.dat");
  my $newdat=;
  # (flag1) 0 = new user / 1 = timestamp OK / 2 = update timestamp
  my $flag1=0; 
  while ( my $line= ) {
    chomp($line);
    my( $user, $ltime ) = split( /:/, $line );
    if( $user eq $id ) {
      $flag1=1;
      if( ($ltime + $ref_time) < time() ) {
        $flag1=2;
        $ltime=time();
      }
    } 
    $newdat.="$user:$ltime\n";    
  }
 close(DATA);  


  # If new user or user timestamp changed, update DB
  if( $flag1!=1 ) {
    # New user? add it ...
    if( !$flag1 ) { $newdat.="$id:".time()."\n"; }
    open(DATA, ">$dat_dir/startpage.dat");
    print DATA $newdat;
    close(DATA);
  }

  # Show startpage if necessary
  if( $flag1!=1 ) {
    print $startp." ".$src_add." ".$ident." ".$method."\n";
  } else {
    print $url." ".$src_add." ".$ident." ".$method."\n";
  }
  

} # while( 1 ) 

El poseu en el lloc que us agradi mes, en aquest l'exemple l'he guardat a /home/joan/scripts, amb el nom startpage.pl. Editeu el /etc/squid/squid.conf, busqueu on hi ha el Tag de url_rewrite_program i hi afegiu:

url_rewrite_program /home/joan/scripts/startpage.pl

SquidGuard

Consulteu

SquidGuard

DansGuardian

Consulteu:

DansGuardian

IPCOP

Consulteu IPCOP

Configuració d'Squid a IPCOP

Consulteu IPCOP#Proxy_SQUID

Fòrum en castellà de pfSense, http://forum.pfsense.org/index.php/board,10.0.html (administrat per www.bellera.cat/josep/consultes)

Informes

Squidtaild

Definition: squidtaild: Squid log monitoring program Squidtaild is a very fast, highly configurable Perl program that will dynamicly create html pages that display the 
violations that people made one or more of the filters you have applied to the squid proxy logging system.

squidview

$ apt-cache search squidview
squidview - monitors and analyses squid access.log files


Calamaris

En sistemes Debian com Ubuntu és pot instal·lar des dels repositoris amb:

$ sudo apt-get install calamaris

Tal i com indica el resum del paquet:

$ sudo apt-cache search calamaris
calamaris - log analyzer for Squid or Oops proxy log files

Es tracta d'un analitzador dels logs d'Squid que ens permet obtenir informes d'ús del proxy. Podeu veure una demo d'informe de calamaris en format text a:

http://cord.de/tools/squid/calamaris/calamaris-2.out

O en format HTML a:

http://cord.de/tools/squid/calamaris/calamaris-2.html

Els fitxers instal·lats són:

$ dpkg -L calamaris
/.
/usr
/usr/bin
/usr/bin/calamaris
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/calamaris.1.gz
/usr/share/perl5
/usr/share/perl5/calamaris
/usr/share/perl5/calamaris/calAxestype.pm
/usr/share/perl5/calamaris/calAxestype3d.pm
/usr/share/perl5/calamaris/calBars3d.pm
/usr/share/doc
/usr/share/doc/calamaris
/usr/share/doc/calamaris/README
/usr/share/doc/calamaris/TODO
/usr/share/doc/calamaris/README.Debian
/usr/share/doc/calamaris/copyright
/usr/share/doc/calamaris/examples
/usr/share/doc/calamaris/examples/EXAMPLES.gz
/usr/share/doc/calamaris/examples/EXAMPLES.v3.gz
/usr/share/doc/calamaris/NEWS.Debian.gz
/usr/share/doc/calamaris/changelog.gz
/usr/share/doc/calamaris/BUGS.gz
/usr/share/doc/calamaris/changelog.Debian.gz
/etc
/etc/calamaris
/etc/calamaris/calamaris.conf
/etc/cron.daily
/etc/cron.daily/calamaris
/var
/var/log
/var/log/calamaris
/var/www
/var/www/calamaris
/var/www/calamaris/daily
/var/www/calamaris/weekly
/var/www/calamaris/monthly 

Segons el manual de l'aplicació:

$ man calamaris

Podem obtenir informes executant:

$ sudo cat /var/log/squid3/access.log | calamaris

El resultat seria quelcom similar a:

$ cat /var/log/squid3/access.log | calamaris
# Summary
Calamaris statistics                                                            
--------------------------------------------------------- -------------- ------ 
lines parsed:                                                      lines  23115 
invalid lines:                                                     lines      0 
parse time:                                                          sec     12 
parse speed:                                                   lines/sec   1926 
--------------------------------------------------------- -------------- ------ 
Proxy statistics                                                                
--------------------------------------------------------- -------------- ------ 
Total amount:                                                   requests  23115 
Total Bandwidth:                                                    Byte   405M 
Proxy efficiency (HIT [kB/sec] / DIRECT [kB/sec]):                factor   1.13 
Average speed increase:                                                %   0.36 
--------------------------------------------------------- -------------- ------ 
Cache statistics                                                                
--------------------------------------------------------- -------------- ------ 
Total amount cached:                                            requests   6751 
Request hit rate:                                                      %  29.21 
Bandwidth savings:                                                  Byte 12974K 
Bandwidth savings in Percent (Byte hit rate):                          %   3.13 
--------------------------------------------------------- -------------- ------   
 

# Incoming requests by method
method                          request      %  sec/req   Byte       %  kB/sec  
------------------------------ --------- ------ ------- -------- ------ ------- 
GET                                20850  90.20    0.85  413074K  99.53   23.33 
POST                                2250   9.73    1.50  1991606   0.47    0.58 
HEAD                                  15   0.06    0.45     6135   0.00    0.89 
------------------------------ --------- ------ ------- -------- ------ ------- 
Sum                                23115 100.00    0.91  415025K 100.00   19.68 


# Incoming UDP-requests by status
no matching requests             


# Incoming TCP-requests by status
status                          request      %  sec/req   Byte       %  kB/sec  
------------------------------ --------- ------ ------- -------- ------ ------- 
HIT                                 6751  29.21    0.09 13285256   3.13   22.18 
MISS                               16360  70.78    1.25  401840K  96.82   19.61 
ERROR                                  4   0.02    0.94   216243   0.05   55.91 
------------------------------ --------- ------ ------- -------- ------ ------- 
Sum                                23115 100.00    0.91  415025K 100.00   19.68 
 
# Outgoing requests by status
status                          request      %  sec/req   Byte       %  kB/sec  
------------------------------ --------- ------ ------- -------- ------ ------- 
DIRECT Fetch from Source           16360 100.00    1.25  401840K 100.00   19.61 
SIBLING                                0   0.00    0.00        0   0.00    0.00 
PARENT                                 0   0.00    0.00        0   0.00    0.00 
------------------------------ --------- ------ ------- -------- ------ ------- 
Sum                                16360 100.00    1.25  401840K 100.00   19.61 
  

# Outgoing requests by destination
neighbor type                   request      %  sec/req   Byte       %  kB/sec  
------------------------------ --------- ------ ------- -------- ------ ------- 
DIRECT                             16360 100.00    1.25  401840K 100.00   19.61 
------------------------------ --------- ------ ------- -------- ------ ------- 
Sum                                16360 100.00    1.25  401840K 100.00   19.61  

Calamaris 2.99.4.0
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Cord Beermann. Authors: Cord Beermann and Michael Pophal.
Calamaris comes with ABSOLUTELY NO WARRANTY. It is free software, and you are
welcome to redistribute it under certain conditions. See source for details.
http://Calamaris.Cord.de/

Podeu concatenar tants fitxers de log com vulgueu:

$ sudo cat /var/log/squid3/access.log| sudo cat /var/log/squid3/access.log.1 | calamaris

Calamaris també s'utilitza a IPCOP. Consulteu l'apartat:

IPCOP#Calamaris_addon

Recursos:

Exemples d'ús de calamaris

Extrets del manual:

$ cat /var/log/squid/access.log | nice -39 calamaris -amH 'daily worf' | mail root
$ cat /var/log/squid/access.log | calamaris -a -o daily.`date +"%w"` > /dev/null
if [ $DAYOFWEEK = "0" ]; then calamaris -a -i daily.1:daily.2:daily.3:daily.4:daily.5:daily.6:daily.0 -zmH "weekly worf" | mail root fi

Crear un informe HTML

$ sudo calamaris -a -F html /var/log/squid/access.log >/var/www/default/html/calamaris/index.html

L'opció -a mostra tots els informes útils. Equival a:

--size-distribution-report 10 --domain-report 20 --performance-report 60 --requester-report 20 --status-report --type-report 20 
--response-time-report --errorcode-distribution-report

Sense la opció -F html el resultat seria un fitxer de text.

I el podeu consultar si no teniu entorn gràfic amb lynx:

$ lynx /var/www/default/html/calamaris/index.html

Informes automàtics amb cron

Al instal·lar calamaris automàticament se us ha instal·lat un tasca de cron:

/etc/cron.daily/calamaris

Que executa cada dia un script que es configura al fitxer:

$ cat /etc/calamaris/cron.conf
# configuration file for calamaris
# by Philipp Frauenfelder <pfrauenf@debian.org>
# 1998-10-09 

# There are three categories: daily, weekly and monthly. For each of these
# one line is responsible. There must be a line for each category but only 
# one. 

# cat: [daily|weekly|monthly]
# mailto: mailaddress, eg. root
# webto: path incl. file name, eg. /var/www/calamaris/daily.html. 
#        The script does currently not check wether the directory 
#        exists and fails with a rather ugly error.
# todo: [nothing|mail|web|both]
# title: try it :-)

# cat:mailto:webto:todo:title
daily:root:/var/www/calamaris/daily/index.html:mail:'Squid diari'
weekly:root:/var/www/calamaris/weekly/index.html:mail:'Squid setmanalment'
monthly:root:/var/www/calamaris/monthly/index.html:mail:'Squid mensual'
# what log files should be parsed: [auto|squid|oops]
#       auto: tries to find the log files in this order: squid, oops
#       squid: parses a squid log file if available
#       oops: parses a oops log file if available
cache=auto

Amb la configuració per defecte només s'envien correus electrònics (al correu intern de root que si no el teniu redireccionat no arribarà a ningú. Consulteu Mail) i a més amb squid3 no us funcionarà. Cal posar:

...
# cat:mailto:webto:todo:title
daily:sergi.tur@domini.cat:/var/www/calamaris/daily/index.html:both:'Squid diari'
weekly:sergi.tur@domini.cat:/var/www/calamaris/weekly/index.html:both:'Squid setmanalment'
monthly:sergi.tur@domini.cat:/var/www/calamaris/monthly/index.html:both:'Squid mensual'
# what log files should be parsed: [auto|squid|oops]
#       auto: tries to find the log files in this order: squid, oops
#       squid: parses a squid log file if available
#       oops: parses a oops log file if available
cache=squid3

NOTA: Canvieu sergi.tur@domini.cat per el vostre correu electrònic.

Cron/Anacron s'executarà cada dia amb cron.daily (vegeu anacron). Podeu forçar la execució i comprovar que no teniu cap error amb:

$ sudo /etc/cron.daily/calamaris

No us funcionarà per que cal corregir unes errors (està pensat per a squid en comptes d'squid3):

$ sudo joe /etc/cron.daily/calamaris

Feu Ctrl+k+f i busqueu squid. Amb Ctrl+l us podeu moure a la següent cerca, salteu els comentaris on aparegui la paraula squid (/var/log/squid3, /var/log/squid3/access.log).

També canvieu la línia:

CACHE=auto

per:

CACHE=squid3


Com veureu es creen automàticament unes pàgines web a:

/var/www/calamaris

Si no existeix la carpeta la creeu:

$ sudo mkdir -p /var/www/calamaris
$ sudo mkdir -p /var/www/calamaris/daily
$ sudo mkdir -p /var/www/calamaris/monthly
$ sudo mkdir -p /var/www/calamaris/weekly

A les qual podeu accedir (si teniu la configuració d'Apache per defecte) amb:

http://IP_SERVIDOR_PROXY/calamaris

També és habitual canviar el fitxer /etc/cron.daily/calamaris:

$ sudo joe  /etc/cron.daily/calamaris

I afegir més opcions a la variable:

CALAMARISOPTIONS="--size-distribution-report 10 --domain-report 500 --performance-report 60 --requester-report 500 --status-report --type-report 20 --response-time-report \
--errorcode-distribution-report -f auto --config-file ${CALAMARIS_CONF_FILE}"

I buscar les referències a squid i canviar-les per squid3:

...
# squid or oops?
CACHE=squid3
...
# look for cache log files  
if [ "$CACHE" = "auto" ]; then
    if [ -r /var/log/squid3/access.log ]; then
       CACHE=squid3
       CACHELOGDIR=/var/log/squid3

Resolució de problemes

/etc/cron.daily/calamaris: no cache log files found, exiting cleanly

Si no us funciona l'automatisme de cron proveu d'executar-los a mà:

$ sudo /etc/cron.daily/calamaris
/etc/cron.daily/calamaris: no cache log files found, exiting cleanly

Si teniu Squid3 cal tenir en compte que la carpeta dels fitxers de log és:

 /var/log/squid3

En comptes de:

 /var/log/squid

Editeu el fitxer:

/etc/cron.daily/calamaris

I busqueu i remplaceu totes les entrades incorrectes de:

squid

per

squid3

També cal modificar el fitxer de configuració. Per defecte està pensat per a squid (no squid3) i a més només envia notificacions per correu (i només a l'usuari root de la màquina local). Poseu:

$ sudo joe /etc/calamaris/cron.conf
# configuration file for calamaris
# by Philipp Frauenfelder <pfrauenf@debian.org>
# 1998-10-09

# There are three categories: daily, weekly and monthly. For each of these
# one line is responsible. There must be a line for each category but only
# one.

# cat: [daily|weekly|monthly]
# mailto: mailaddress, eg. root
# webto: path incl. file name, eg. /var/www/calamaris/daily.html.
#        The script does currently not check wether the directory
#        exists and fails with a rather ugly error.
# todo: [nothing|mail|web|both]
# title: try it :-)

# cat:mailto:webto:todo:title
daily:sergi.tur@domini.com:/var/www/calamaris/daily/index.html:both:'Squid diari'
weekly:sergi.tur@domini.com:/var/www/calamaris/weekly/index.html:both:'Squid setmanalment'
monthly:sergi.tur@domini.com:/var/www/calamaris/monthly/index.html:both:'Squid mensual'
# what log files should be parsed: [auto|squid|oops]
#       auto: tries to find the log files in this order: squid, oops
#       squid: parses a squid log file if available
#       oops: parses a oops log file if available
cache=squid3

NOTA: Canvieu sergi.tur@domini.com pel vostre correu electrònic

Sarg

$ sudo apt-get install sarg

Tal com diu la comanda:

$ apt-cache search --names-only sarg
sarg - squid analysis report generator

Sarg crea unes pàgines web:

$ dpkg -L sarg | grep www
/var/www
/var/www/squid-reports

Si teniu la configuració per defecte d'Apache i podreu accedir amb:

http://IP_SERVIDOR_PROXY//squid-reports

Al principi, la pàgina pot estar buida de continguts. Es creen continguts de forma automàtica amb cron

$ dpkg -L sarg | grep cron
/etc/cron.daily
/etc/cron.daily/sarg
/etc/cron.weekly
/etc/cron.weekly/sarg
/etc/cron.monthly
/etc/cron.monthly/sarg

Si mireu el contingut dels fitxers, veureu que s'utilitza l'script /usr/sbin/sarg-reports:

$ cat /etc/cron.daily/sarg
#!/bin/sh

if [ -x /usr/sbin/sarg-reports ]; then
  /usr/sbin/sarg-reports daily
fi

Podeu forçar les execucions amb:

$ sudo /usr/sbin/sarg-reports daily
$ sudo /usr/sbin/sarg-reports weekly
$ sudo /usr/sbin/sarg-reports monthly

NOTA: Si us dona un error tingueu en compte que la carpeta del log a Squid 3 és /var/log/squid3 en comptes de /var/log/squid. Canvieu al fitxer:

/etc/squid/sarg.conf

La línia.

access_log /var/log/squid/access.log

per:

access_log /var/log/squid3/access.log

Recursos:

Informes d'SquidGuard

Cal comprovar-ho!.

# /usr/bin/sarg -z -L /var/log/squid3/blocked.log -l /var/log/squid3/access.log -o /var/www/squid-reports/Manual -d 14/10/2009-15/10/2009

webalizer

$ sudo apt-get install webalizer
$ dpkg -L webalizer

Execució:

$ sudo webalizer 
Webalizer V2.01-10 (Linux 2.6.27-11-server) locale: ca_ES.UTF-8
Usant el registre /var/log/apache2/access.log.1 (clf)
Using default GeoIP database
Creant resultats a /var/www/webalizer
Resultats del servidor 'router'
Llegint fitxer històric... webalizer.hist
Generant resultats per August 2009
Generant resultats resumits
Guardant informació a l'històric...
731 registres en 2,50 segons, 292/sec

Hi ha un mòdul de webmin per a webalizer.

Generar trànsit per a fer informes de proves amb wget

Eines_per_a_tests_de_càrrega#Generar_tr.C3.A0nsit_amb_siege_i_fitxers_access.log_d.27un_Proxy_d.27un_entorn_d.27Execuci.C3.B3

Utilitzar un proxy remot amb túnels SSH

Una manera de securitzar el transit web (navegar xifrant les dades) és utilitzar SSH. Vegeu Túnel SSH. Si teniu accés a un servidor SSH i en aquell servidor també teniu instal·lat un proxy squid, podeu fer el seguent:

$ ssh -L 6666:localhost:3128 usuari@ip_servidor_ssh_i_prozy

I deixeu la connexió SSH oberta. Ara al navegador només cal que poseu com a dades del proxy:

IP: localhost
Port : 6666

Consulteu Configuració de clients Proxy per tal de tenir més informació de com configurar el navegador.

I podeu comprovar utilitzant qualsevol pàgina "Qual és mi ip" (busqueu Qual és mi IP a Google) qu esteu navegant a través de proxy. Tingueu en compte que les dades viatgen des de la vostra maquina al servidor SSH de forma segura (i per tant és una solució quan treballeu en xarxes LAN no confiables i per tal d'evitar eines com Ettercap o Dsniff).

Fer connexions anònimes

Federació d'un proxy amb guifi.net

Què és un proxy federat

Si editeu un servei de Proxy (només si en sou el propietari o en sou administrador), trobareu un apartat que diu:

Federació del proxy:
 IN - Els usuaris d'altres proxis poden fer-lo servir
 OUT - els usuaris del proxi poden fer-ne servir d'altres

El que dóna lloc a 4 possibles combinacions :

  • ni IN ni OUT - Com s'ha dit avans, el proxy no estarà federat, per tant cap usuari extern al proxy el pot fer servir, i cap usuari del proxy pot fer servir els altres de guifi.net (exemple -> un proxy privat)
  • només OUT - El usuaris del proxy poden utilitzar qualsevol dels proxys que estiguin federats com a IN, pero els usuaris d'altres proxys no poden utilitzar-lo (exemple -> la guixa o el seminari)
  • només IN - Els usuaris del proxy nomes poden utilitzar el seu, pero qualsevol usuari d'un proxy marcat com a OUT pot fer servir aquest. (exemple -> ??? no crec que ni hagi cap, però les combinacions és lo que tenen)
  • IN i OUT - El proxy federat per exel·lència : els usuaris poden fer servir tots els proxys federats amb IN, i els usuaris d'altres proxys federats OUT poden fer-lo servir. (exemple -> esperança, elserrat, puntas ...)

Els proxies com altres serveis de la xarxa guifi.net es poden publicitar a la web de guifi.net. Per exemple, podeu accedir a la pàgina del node que conté el proxy de l'institut de l'Ebre:


Si entreu a aquesta pàgina amb un usuari de guifi.net veureu que hi ha un enllaç/pestanya (usuaris), que és l'últim, a sota el nom del node (en aquest cas "TortosaINSEbre"). Les opcions són:

dades trastos distàncies gràfiques enllaços mapa de perfils serveis usuaris

Escolliu l'última. Si feu clic a usuaris, us llistarà els usuaris.

També teniu un boto que diu: "Afegir usuari".

IMPORTANT: Si us dona l'error: "Pàgina no trobada!" és que potser esteu donant d'alta l'usuari des del servei i no pas des del node

Al servidor on hi ha el proxy cal instal·lar (els passos són per a Debian o Ubuntu)

$ sudo joe /etc/apt/sources.list

I afegiu la línia:

deb http://tramuntana.evt.cat/mirror/debian/ ./

Per aplicar els canvis

$ sudo apt-get update

El paquet a instal·lar és

$ sudo apt-get install guifi-proxy

NOTA: Tingueu en compte que se suposa que el proxy Squid ja el teniu instal·lat i configurat!

IMPORTANT: Si teniu el proxy amb Squid3, el paquet guifi-proxy uns instal·larà la versió 1 d'Squid i podeu tenir problemes si s'executen al mateix temps. Executeu:

sudo update-rc.d -f squid remove

Els fitxers instal·lats són:

$ dpkg -L guifi-proxy
/.
/etc
/etc/cron.d
/etc/cron.d/guifi-proxy
/etc/guifi-proxy
/etc/logrotate.d
/etc/logrotate.d/guifi-proxy
/usr
/usr/share
/usr/share/guifi-proxy
/usr/share/guifi-proxy/guifi-proxy.sh
/usr/share/doc
/usr/share/doc/guifi-proxy
/usr/share/doc/guifi-proxy/README.Debian
/usr/share/doc/guifi-proxy/copyright
/usr/share/doc/guifi-proxy/changelog.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/guifi-proxy.1.gz
/var
/var/log
/var/log/guifi-proxy

"L'executable" és:

/usr/share/guifi-proxy/guifi-proxy.sh

Amb el següent contingut:

#!/bin/sh

#--- DEFAULT CONFIG ---
node=2619; # overwrite by config file
base_url='http://www.guifi.net'
passwd_dir='/etc/guifi-proxy/'
passwd=${passwd_dir}'passwd'
passwd_md5=${passwd_dir}'passwd.md5'
tmp='/tmp/passwd'
tmp_md5='/tmp/passwd.md5'
tmp_web_md5='/tmp/passwd_web_md5.txt'
# Enable for Debian/Ubuntu 
reload='/etc/init.d/squid reload'
# Enable for Fedora/RedHat
#reload='service squid reload'
#--- END DEFAULT CONFIG --- 

#--- LOAD CONFIG FILE ---
config='/etc/guifi-proxy/config.sh' 

if [ -f $config ]
  then
  . $config
fi
#--- END LOAD CONFIG FILE --- 

#echo $node;
#echo $base_url;
#echo $passwd_dir;
#echo $passwd;
#echo $tmp;
#echo $reload;


# Check if download passwd file is needed
# Download md5 checksum
wget $base_url/guifi/export/$node/federated_md5 -O $tmp_web_md5
# Calc md5sum of $passwd
touch $passwd
md5sum $passwd > $passwd_md5 
 
# Compare checksums
hash_web=`cut -d" " -f1 $tmp_web_md5`
hash_passwd=`cut -d" " -f1 $passwd_md5`
#echo "md5=$hash_web="
#echo "md5=$hash_passwd="

if [ $hash_web != $hash_passwd ]; then
  echo "[`date -R`] - Different Hash, New Passwd File";
  wget $base_url/guifi/export/$node/federated -O $tmp
  md5sum $tmp > $tmp_md5
  hash_tmp=`cut -d" " -f1 $tmp_md5`  
  if [ $hash_web = $hash_tmp ]; then
    echo "[`date -R`] - Download OK, copying Passwd file to $passwd";
    cp $tmp $passwd
    rm $tmp
    rm $tmp_md5
    rm $tmp_web_md5
    $reload
  fi;  
fi;

exit 0;

IMPORTANT: Noteu la línia reload='/etc/init.d/squid reload'. Si teniu squid3 la heu de canviar per reload='/etc/init.d/squid3 reload' o modificar el fitxer /usr/share/guifi-proxy afegint la línia:

$ cat /etc/guifi-proxy/config.sh

#!/bin/sh
#
# Script at /usr/share/guifi-proxy
#
# Server base url ex: http://www.guifi.net
base_url='http://www.guifi.net';
# Node ID
node=50;
reload='/etc/init.d/squid3 reload';

L'script el que fa es baixar-se la URL:

http://guifi.net/guifi/export/numero_servei_proxy/federated

Per exemple a:

http://guifi.net/guifi/export/2619/federated

La baixada es comprova que sigui correcte ja que hi ha un MD5 per a cada fitxer. Per exemple:

http://guifi.net/guifi/export/2619/federated_md5

Es configura cron per que a cada minut 55 es sincronitzi:

$ cat /etc/cron.d/guifi-proxy
#
# Regular cron jobs for the guifi-proxy package
#
55 *	* * *	root	/usr/share/guifi-proxy/guifi-proxy.sh >> /var/log/guifi-proxy/guifi-proxy.log 2>&1;

Vegeu que es guarda al fitxer de log (a més es configura logrotate) el resultat de les sincronitzacions:

$ sudo tail -f /var/log/guifi-proxy


Load Balancing i tcp_outgoing_address

Amb la directiva tcp_outgoing_address, podem canviar la IP d'origen del paquet que surt de l'Squid a l'hora de buscar una pàgina d'Internet. Combinant-ho amb Policy Routing (Source Policy Rounting), podem encaminar per diferents gateways diferents peticions a un servidor Squid.

TroubleShooting. Resolució de problemes

No es permet la connexió segura https (CONNECT) a un port no estàndard

La configuració estàndard d'Squid només permet utilitzar el port estàndard de HTTPs. Les connexions HTTPS es fan amb el mètode CONNECT:

$ sudo joe /etc/squid3/squid.conf
...
acl SSL_ports port 443
...
http_access deny CONNECT !SSL_ports

Per exemple no permet l'accés a QBID:

https://apps.cambrescat.es:8003/qBid/

Cal afegir ports per a HTTPS afegint la línia

acl SSL_ports port 8003

després de:

 acl SSL_ports port 443

IMPORTANT: D'aquesta manera s'està obrint un possible forat de sortida ja que s'estan permeten connexions directes amb CONNECT al port 8003 (es pot utilitzar per accedir a un proxy extern que escolti peticions al port que obriu)

Problemes amb clients FTP

S'ha de carregar un mòdul del kernel específic per fer el connection tracking de FTP:

# modprobe ip_nat_ftp

Recursos:

Error Iniciant Squid versió 1.0

Si us dona el següent error:

* Starting Squid HTTP proxy squid                                                                                                                              
* Creating squid spool directory structure
FATAL: Could not determine fully qualified hostname.  Please set 'visible_hostname'

Squid Cache (Version 2.6.STABLE14): Terminated abnormally.
CPU Usage: 0.004 seconds = 0.004 user + 0.000 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 0
Aborted (core dumped)
FATAL: Could not determine fully qualified hostname.  Please set 'visible_hostname' 

Squid Cache (Version 2.6.STABLE14): Terminated abnormally.
CPU Usage: 0.012 seconds = 0.012 user + 0.000 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 0
Aborted (core dumped)

Potser heu instal·lat el paquet squid en comptes del paquet squid3?

Squid Rebutja Connexions

Si tenim el següent error la navegar a través d'un proxy:

Fitxer:SquidRebutjaConnexions.png

Això vol dir que no tenim accés al proxy. Potser la IP o el port són incorrectes o s'ha perdut la connexió amb el proxy?

Consider increasing the number of url_rewriter processes..

$ sudo tail -f /var/log/squid/cache.log
...
WARNING: up to 13 pending requests queued
2009/01/29 13:43:49| Consider increasing the number of url_rewriter processes to at least 18 in your config file.

Cal modificar la variable url_rewrite_children. Com a valor per defecte és 5 que pot ser molt poc. Si disposem de RAM cal augmentar aquest valor.

Aquesta variable es troba al fitxer squid.conf. Un exemple en una màquina amb IPCOP:

# cat /var/ipcop/proxy/squid.conf
...
url_rewrite_children 5
NOTA: a IPCOP no es pot canviar aquest valor (ni cap altre) directament al fitxer. Cal fer-ho des de la interfície web

Per fer-ho amb IPCOP consulteu:

IPCOP#Augmentar_el_nombre_de_processos_de_URL_filter

WARNING! Your cache is running out of filedescriptors

$ sudo tail -f /var/log/squid/cache.log
...
2010/03/15 10:48:43| comm_open: socket failure: (24) Too many open files
...
2010/04/21 09:49:09| WARNING! Your cache is running out of filedescriptors
2010/04/21 09:49:20| WARNING: All url_rewriter processes are busy.
2010/04/21 09:49:20| WARNING: up to 25 pending requests queued

Sembla que una solució és augmentar el nombre de descriptors de fitxers amb

vi /etc/security/limits.conf

I afegir al final la línia :

* - nofile 4096

Guardar i sortir. Podem veure el nombre de descriptors que es permeten obrir fent

ulimit -a 

Però a la meva xarxa, encara que millorava, continuaven produïnt-se errors. Una solució pot ser modificar les directives quick_abort, que de fet a mi em solucionàven el problema. Entenc que els usuaris impacients (tots de fet) quan la línia ADSL funciona lenta, fan una ràpida successió de "Reloads" picant el botó de refresc del navegador i això fa que Squid es quedi sense descriptors de fitxers (en aquest cas sockets) amb les connexions que resten baixant quan es fa un abort de la pàgina que s'havia demanat.

#  TAG: quick_abort_min (KB)
#  TAG: quick_abort_max (KB)
#  TAG: quick_abort_pct (percent)
#       The cache by default continues downloading aborted requests
#       which are almost completed (less than 16 KB remaining). This
#       may be undesirable on slow (e.g. SLIP) links and/or very busy
#       caches.  Impatient users may tie up file descriptors and
#       bandwidth by repeatedly requesting and immediately aborting
#       downloads.
#
#       When the user aborts a request, Squid will check the
#       quick_abort values to the amount of data transfered until
#       then.
#
#       If the transfer has less than 'quick_abort_min' KB remaining,
#       it will finish the retrieval.
#
#       If the transfer has more than 'quick_abort_max' KB remaining,
#       it will abort the retrieval.
#
#       If more than 'quick_abort_pct' of the transfer has completed,
#       it will finish the retrieval.
#
#       If you do not want any retrieval to continue after the client
#       has aborted, set both 'quick_abort_min' and 'quick_abort_max'
#       to '0 KB'.
#
#       If you want retrievals to always continue if they are being
#       cached set 'quick_abort_min' to '-1 KB'.
#
#Default:
# quick_abort_min 16 KB
# quick_abort_max 16 KB
# quick_abort_pct 95
# pau
quick_abort_min 0 KB
quick_abort_max 0 KB


Vegeu també

Enllaços externs

<< Tornar a Servidor Proxy

Eines de l'usuari