IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Recompilar el paquet debian

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

$ cd /usr/src
$ sudo apt-get install dpkg-dev apache2 squid-langpack
$ sudo apt-get build-dep squid3 squid-langpack squid-cgi
$ sudo apt-get source squid3

Per a més informació sobre paquets fonts Debian consulteu apt-get source i Debian_Source_Packages.

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.1.19/debian/rules

IMPORTANT: Canvieu squid3-3.0.STABLE18 pel que convingui ja que és possible que tingueu una versió més nova

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

Un cop fetes les modificacions toca construir el paquet:

$ sudo apt-get -b source squid3

Fixeu-vos que ha creat diversos 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

Si instal·leu el paquet nou ara veure:

$ 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' ...

Marque el paquet com a hold per que no s'actualitzin els paquets, cal fer-ho amb els gestors de paquets possibles (en el nostre cas aptitude i apt-get). Per això crearem un script:

$ sudo joe hold_squid.sh

I li poseu el següent:

#!/bin/bash
sudo aptitude hold squid3 squid-cgi squid3-cgi squid3-common squid3-dbg squidclient
sudo aptitude update
sudo aptitude safe-upgrade
sudo bash -c "echo squid3 hold | dpkg --set-selections"
sudo bash -c "echo squid3-cgi hold | dpkg --set-selections"
sudo bash -c "echo squid-cgi hold | dpkg --set-selections"
sudo bash -c "echo squid3-common hold | dpkg --set-selections"
sudo bash -c "echo squid3-dbg hold | dpkg --set-selections"
sudo bash -c "echo squidclient hold | dpkg --set-selections"
sudo apt-get update
sudo apt-get upgrade

Feu-lo executable i executeu-lo:

$ sudo chmod +x hold_squid.sh
$ ./hold_squid.sh

IMPORTANT: Si bloquejem el paquet només per a aptitude no tindrà efecte a apt-get i viceversa.

Configuraió 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: