Squid: Diferència entre les revisions
De Guifi.net - Wiki Català
Al (Discussió | contribucions) |
(→pfsense) |
||
Línia 3.112: | Línia 3.112: | ||
Consulteu [[IPCOP#Proxy_SQUID]] | 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= | =Informes= |
Revisió de 07:40, 14 març 2014
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
- 1 Introducció
- 2 Instal·lació
- 3 Configuració
- 3.1 Manual
- 3.2 Configuració del client del proxy (Proxy no transparent). Navegador web Firefox
- 3.3 Configuració del servidor
- 3.3.1 Fitxer de configuració. /etc/squid/squid3.conf
- 3.3.2 Modificar el fitxer de configuració
- 3.3.3 Com definir quins seran els clients que podran utilitzar el servidor Squid
- 3.3.4 ACLs
- 3.3.5 Canvis en els DNS
- 3.3.6 Port de funcionament d'squid
- 3.3.7 Opció -k
- 3.3.8 Comprovar la sintaxi del fitxer de configuració
- 3.3.9 Access Control Lists (ACLs)
- 3.3.10 Memòria cau (cache)
- 3.3.11 Exemples de configuració
- 3.3.11.1 Configurar els errors en català
- 3.3.11.2 Impedir la descàrrega de fitxers grans
- 3.3.11.3 No fer cau de certs servidors
- 3.3.11.4 Impedir l'accés a cert servidor
- 3.3.11.5 Impedir totes les pàgines que continguin una paraula o paraules concretes
- 3.3.11.6 Paràmetres d'Squid per configurar com a proxy d'apt-get (paquets debian)
- 3.3.11.7 Permetre només a un client concret accedir a una URL concreta
- 3.3.11.8 Permetre l'accés segons un horari
- 3.3.11.9 Impedir fitxers grans
- 3.3.11.10 Noms de domini
- 3.3.11.11 Servidor proxy transparent
- 3.3.11.12 cache_peer, exemples de jerarquia amb pares i/o germans
- 3.3.11.13 Modificar/fer a mida les pàgines d'error
- 3.3.11.14 Delay Pools
- 3.3.11.15 Fitxer de configuració de l'INS de l'Ebre
- 3.3.11.16 Fitxers de hosts i llistes de denegació
- 3.3.11.17 Limitar el nombre de connexions simultànies d'un client
- 3.3.11.18 NO fer cache de certes pàgines. Directiva nocache
- 4 Fitxers de Log
- 5 Client Squid
- 6 Autenticació
- 7 Eines gràfiques
- 8 Rendiment (Performance)
- 9 Monitoritzar
- 10 Jerarquia d'Squids o Squid distribuit. Squid Mesh
- 11 Filtrar continguts
- 12 Informes
- 13 Generar trànsit per a fer informes de proves amb wget
- 14 Utilitzar un proxy remot amb túnels SSH
- 15 Fer connexions anònimes
- 16 Federació d'un proxy amb guifi.net
- 17 Load Balancing i tcp_outgoing_address
- 18 TroubleShooting. Resolució de problemes
- 19 Vegeu també
- 20 Enllaços externs
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ç | Sí | No |
Nivell 3. Nivell de xarxa (IP) | Sí | No |
Nivell 4. Nivell de transport (TCP) | Sí | No |
Nivells d'aplicació 5, 6 i 7. | No | Sí |
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/
Consulteu Configuració_de_clients_proxy.
Anem al menú Edita/Preferències:
Seleccionem la pestanya Avançat i després la pestanya Xarxa:
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:
- http://www.xtec.cat/~mcguri/index_proxy.html
- http://www.xtec.cat/~mcguri/proxypac.txt
- http://squidproxy.wordpress.com/category/proxypac/
- http://homepages.tesco.net/J.deBoynePollard/FGA/web-browser-auto-proxy-configuration.html
- http://en.wikipedia.org/wiki/Proxy_auto-config
- http://www.hostsfile.org/pac.html
- http://en.wikipedia.org/wiki/Proxy_auto-config
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
- http://www.davidpashley.com/articles/automatic-proxy.html
- http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html
- http://www.ecualug.org/?q=2008/07/02/comos/parte_3_el_servidor_dhcp_y_dns_dinamico
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:
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:
- http://wiki.squid-cache.org/SquidFaq/CacheManager?highlight=%28cachemgr%29
- http://www.example.com/Squid/cgi-bin/cachemgr.cgi
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.
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:
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
- auth_param: Configura el helper i els seus paràmetres
- authenticate_cache_garbage_interval:
- authenticate_ttl: El temps que es manté una autenticació.
- authenticate_ip_ttl: Utilitzat conjuntament amb l'ACL max_user_ip.
- auth-bypass: permet especificar pàgines que no utilitzaran autenticació
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)
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
- http://www.babilonics.com/content/como-instalar-squid-en-debian-con-autentificacion-ldap-por-grupos-de-windows-2003
- http://linkat.xtec.cat/portal_linkat/wikilinkat/index.php/Squid_Ldap
- http://workaround.org/squid-ldap
- http://wiki.squid-cache.org/ConfigExamples/Authenticate/Ldap
- http://wiki.squid-cache.org/ConfigExamples/Authenticate/WindowsActiveDirectory
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)
- Sistema operatiu Linux
- Evitar l'ús de swap
- Sistema de fitxers: Tots van aprox. igual de bé
- Evitar RAID. Consulteu http://wiki.squid-cache.org/SquidFaq/RAID
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:
- ICP (Internet Cache Protocol): Protocol bàsic per a fer cache distribüida.
- HTCP (Hypertext_caching_protocol): Definit com el successor de ICP.
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
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
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é
- Squidguard
- DansGuardian
- Configuració de clients proxy
- IPCOP
- MRTG i Nagios es poden utilitzar per monitoritzar un servidor Squid.
- tinyproxy
- Canviar el format d'hora a l'access.log d'squid