jueves, octubre 26, 2006

Different log for each domain

With squid 2.6 in a reverse proxy configuration with several domains, it's possible to have log messagees to separate files per cache_peer_domain.

Example with two peer domains.
www.abc.com
www.xyz.com

---squid.conf----
acl abc dstdomain www.abc.com
acl xyz dstdomain www.xyz.com

access_log /path/to/xyz.log squid xyz
access_log none xyz
access_log /path/to/abc.log squid abc
access_log none abc
access_log /path/to/access.log squid
---squid.conf end---

lunes, octubre 23, 2006

HTTP1.0 / HTTP1.1

Squid is a HTTP/1.0 proxy. But all HTTP/1.1 clients and servers MUST interoperate with HTTP/1.0 to be compliant.

The main difference this brings to the protocol (apart from version number) is that aplications or servers can't use transfer-encoding. The rest of HTTP/1.1 is supported fine over HTTP/1.0.

Transfer-Encoding tells the receiver what encoding has been performed on the message in order for it to be safely transported.
All transfer-encoding values are case-insensitive. HTTP/1.1 uses transfer-encoding values in the TE header field and in the Transfer-Encoding header field. The latest HTTP specification defines only one transfer encoding, chunked encoding.

viernes, octubre 13, 2006

Relay server for SSL connections

If you have overladed web servers you can save the SSL load put in front of their a relay proxy for ssl connections. This means that this proxy will accept HTTPS connections and will translate them into HTTP requests on another server.

This can be achieve with:
https_port directive.
and setting up squid as an https accelerator for the http server.

Example configuration;
https_port 443 cert=/path/to/sslcert.pem defaultsite=your.site.name
cache_peer ip.of.apache 80 0 no-query originserver

Redirector in a reverse proxy scenario

A common technique using in a reverse proxy scenario where virtual hostnames are distributed to several internal servers is using a redirector. But with the new 2.6 squid there is a better way to achieve this feature.
You can forward the requests with:
cache_peer + cache_peer_acess + never_direct

This is the recommend method if the other server is supposed to act exactly like the real web site, including it's name.

2Gb access.log

"FATAL: logfileWrite: /var/log/squid/access.log: (11) Resource
> temporarily unavailable
"

A quit common cause for this message is the access.log reaching the magic 2GB barrier of 32-bit applications.

A common solution for this is compile squid with large cache files support.

From the configure script.

--with-large-files Enable support for large files (logs etc).
--enable-large-cache-files
Enable support for large cache files (>2GB).
WARNING: on-disk cache format is changed by this option

lunes, octubre 02, 2006

Use the no_cache directive correctly

If you don't want cache some object, the best directive to achieve it is the
no_cache directive

acl QUERY urlpath_regex cgi-bin \? \.asp$ \.php$
no_cache deny QUERY


The refresh_pattern directive only applies on pages where there is no explicit expiry information set by the origin server.

viernes, septiembre 15, 2006

Limit the amount of time spending in personal stuff during work hours

Several people in her works hours are doing personal stuff such as reading gmail, yahoo mail, reading blogs, etc. In order to avoid these kind of behaviour you can do some acctions to remember them they are working and it's not good wasting work hours with not related things.

Help to accomplish this task:

session helper from squid-2.6.
deny_info redirecting to a web page with a reminder.

lunes, septiembre 11, 2006

Recommended compile options

--prefix= if you want to install Squid in another location
than /usr/local/squid

--enable-storeio="ufs aufs null" on most platforms to allow choice of
more performing disk I/O.

--enable-auth to enable all authentication schemes to have them
available the day you want to use them.

--enable-delay-pools to enable the delay pools shaping capability.

--enable-snmp to enable monitoring & statistics collection using SNMP

--with-large-files if you are on a 32-bit platform to enable support
for large log files bigger than 2GB. Warning: Do not use this option on
64-bit platforms.

martes, septiembre 05, 2006

Golden Rule

Start with the first error, ignore the rest.

Some notes regarding NTLM

Squid 2.6Stable 3 now support the NTLM passthrough.

An alternative which is recommended and works for all proxies is to have the web site using https on authenticated content. https is tunneled via the proxy, not proxied, and therefore works fine even with non-HTTP-compliant authentication such as NTLM.

From now this blog will be in english language

martes, junio 06, 2006

Aumentar numero de Filedescriptores

Cuando compilamos una versión de squid, tenemos que tener en cuenta el número de filedescriptors que va a tener disponible. Cuando realizamos el configure, aparecerá una linea;

checking Maximum number of filedescriptors we can open... 1024

que es los que actualmente tenemos en nuestro sistema operativo disponibles.
Para aumentarlos;

#ulimit -HSn 2048

Volvemos a compilar, y comprobamos que efectivamente ha cogido bien el soporte de filedescriptors que ahora tendrá disponible.

checking Maximum number of filedescriptors we can open... 2048

1024 Filedescriptors








2048 Filedescriptors

martes, mayo 30, 2006

SNMP y Squid

Para ver los diferentes parametros que podemos monitorizar con squid en mrtg.

snmpwalk host:3401 -v 1 -c public .1.3.6.1.4.1.3495 -m /usr/local/squid/share/mib.txt

Para lo que previamente tendremos que haber configurado el acceso snmp en squid.conf
para que permita consultas a host.

viernes, mayo 19, 2006

Ocultar la versión de squid

Para ocultar la versión de squid que se muestra en una página de error;

Edita src/errorpage.c
Linea:69 :)

>De
"Generated %T by %h (%s)\n"
a
"Generated %T by %h \n"

Y vuelve a compilar squid.

Update on 6th September
From 2.6Stable1 it's available the httpd_supress_version_string directive (default off)

Bloquear Malware con Squid

Hoy en día existen URLS que ocultan todo tipo de efectos dañiños tales como Virus, troyanos gusanos y todo lo denominado malware.
Un usuario desea saber como se puede conseguir con squid filtrar archivos peligrosos por su extensión, pero las típicas reglas que bloquean
\.com$
\.scr$
\.bat$
estas extensiones no sirven cuando hoy en día existen multitud de técnicas para ocultar archivos en urls tales como
http://www.mikes.educv.ro/albums/cartao.scr?4d325356ae47122a6e7b8f1f07cae26d
La solución para esto pasa por integrar squid con listas de URLs disponibles para él.
Aquí se explica la configuración de squid.

jueves, mayo 11, 2006

SELINUX y SQUID

Un usuario de squid pregunta que su proxy no le permite navegar por sitios diferentes a los conectados a través del puerto 80, por ejemplo a un puerto destino 2004.
Habiendo habilitado localmente el squid para que se lo permita, sigue sin poder, pero ve un log tal que asi;


>> kernel: audit( 1147336762.851:321): avc: denied
>> >> > > { name_connect } for pid=10074 comm="squid" dest=2004
>> >> > > scontext=root:system_r:squid_t:s0
>> tcontext=system_u:object_r:port_t:s0
>> >> > > tclass=tcp_socket

La solución es deshabilitar la política SELINUX que tiene en el sistema y provoca que no le permita a squid crear conexiones salientes a puertos diferentes del web.

Otra solución menos sencilla sería actualizar la política de SELINUX para squid.

viernes, mayo 05, 2006

Conceptos varios -squid- -proxy-

Squid es un proxy cache de HTTP, no de otros protocolos. Sólo clientes HTTP (principalmente servidores web) pueden usar squid, y sólo para cosas que puedan ser encapsuladas a través de HTTP (HTTP, HTTPS, FTP and Gopher).

Squid puede coexisistir felizmente con proxys de otros protocolos si así es necesario. No hay conflictos posibles en ejecutar varios tipos de proxys en un mismo servidor (respetando unas reglas básicas.)

SSL en squid proxy normal
Https es el metodo CONNECT, es un caso especial de protocolo tunelizado a traves
del proxy, no proxyado.

Nat puede ser utilizado en muchos casos en sustitución de proxy, Nat es simple, ligero, y trabaja con la mayoría de las cosas, (no es estrictamente compliant con el protocolo TCP/IP, fuerza ligeramente algunas reglas). Es una técnica muy común en pequenas redes y redes caseras para compartir la conexión a internet. Por ejemplo NAT es lo que llevan todos aquellos routers de "banda ancha" que puedes encontrar en tu tienda de ordenadores más cercana.

Socks es un método de proxy genérico para TCP/IP y está bien soportado en la mayoría de clientes. Winsock es una variante extendida especifica para el nivel de transporte del proxy de operaciones de red en aplicaciones windows.

La diferencia entre Nat y proxy, es que NAT se tiene lugar a nivel de paquete reescribiendo los paquetes conforme viajan hacia y desde internet , mientras que los proxys operan al nivel de protocolo de aplicación (con la excepción de socks que pueden estar situados más cerca del nivel de la capa de transporte, pero no se complica mucho las cosas).

Resumiendo:

- Existen proxis de aplicación específicos como squid que tienen una gran conocimiento del protocolo HTTP y añade funcionalidades extra más alla de la simple compartición de la conexión a internet.

- Socks es un tipo de proxy de protocolo genérico. Normalmente hace poco más que de pasarela para el tráfico y quizas un poco de control de acceso sobre quien puede utilizarlo.

miércoles, mayo 03, 2006

Forzando HTTPS

En una configuración de squid en modo reverse-proxy, ¿es posible forzar una conexión no segura para que sólo sea segura?. De la forma;

http://site.com/user (http o https)

http://site.com/admin (sólo https)

Con apache, la solución es trivial.
Pero en squid, tambien se puede conseguir con un redirector.

Otra solución es utilizar la ACL myport para diferenciar entre las peticiones aceptadas en los diferentes puertos. (443 y 80). De esta forma, se pueden denegar accesos HTTP a recursos que sólo pueden ser accedidos mediante HTTPs y con la ayuda de deny_info crear una redirección automática al https.

No tiene sentido tener un proxy delante de un servidor web que sólo hace de pasarela de las peticiones HTTPs. Para ello vale más publicar el puerto HTTPs del servidor web directamente en internet mediante NAT o similar.

(al hilo con el post anterior)
Uno de los principales beneficios de terminar las conexiones SSL en el reverse proxy, es que el servidor web no necesita manejar la carga de SSL y se puede centrar en su propósito principal, que es servir contenido. Tambien permite el cache de el contenido del servidor web, en el reverse proxy, reduciendo la carga en el backend.
La desventaja, es que no tienes forma de saber que la URL que el cliente solicito era HTTPs, ya que la petición que llegó al servidor web fué HTTP.
Esto si es necesario para estadísticas de acceso y demás, se puede solucionar colocando el pgrograma de análisis de logs en el reverse proxy.

viernes, abril 28, 2006

Reverse with SSL

Squid 2.5 funcionando como reverse proxy o accelerator proxy y con el soporte SSL, termina siempre la conexión SSL en su parte proxy. Es decir la conexión Squid con el Backend WebServer es siempre en HTTP.

Con squid 3. o el SSL update y un poco de configuración, es posible hacer que squid inicie una conexión SSL con el servidor web backend, pero esta conexión es independiente de la conexión del cliente.

Tenemos algo así como.

Client --> SSL (a)--> Squid Proxy --> SSL (b)--> Web Server.

Son dos conexiones diferentes, la primera (a) es una conexión SSL hasta el proxy, si el proxy tiene el soporte que hemos comentado antes, podrá iniciar una nueva conexión SSL con el WebServer (b), pero es una "nueva conexión" que nada tiene que ver con la anterior.

Si se necesita una conexión completa SSL entre el cliente y el servidor web, (requerido por ejemplo para servidores web que usan certificados de clientes para autentificación), no existe otra elección que publicar los puertos SSL de el servidor web directamente en internet. No es posible usar un man-in-the-middle tal como puede ser un reverse-proxy en tales configuraciones.

Source: squid list

viernes, abril 21, 2006

Problemas con applets de java

Hay ocasiones en que algunas aplicaciones de login basadas en java principalmente, no funcionan correctamente en squid, pero no es culpa de squid, sino de Internet Explorer o la JVM. Una solución temporal a este problema puede ser;

---------------------------------
acl java_jvm browser Java/1.4
http_access allow java_jvm
---------------------------------

Pero hay que tener cuidado, ya que esto permite todo el tráfico de java sin autentificar.

Source:http://www.squid-cache.org/mail-archive/squid-users/200501/0764.html