ArgentoBridge - Squid

ArgentoBridge - Squid

Mensagempor eddie » Seg Mar 03, 2008 9:28 pm

Instalación y Configuración Básica de ArgentoSquid

Indice Temático
1) Una introducción Básica al Proxy
2) Hardware Mínimo Recomendado
3) Comenzando
4) Squid - Colas de Retraso
5) Parámetro cache_peer: caches padres y hermanos
6) Doble Squid o Squid en cascada
7) Perfiles - Una Alternativa
8) Poder saber el porcentaje de uso de Squid
9) Trabajar con Subredes
10) Hacer que Squid no cachee una determinada página
11) Interpretar el archivo acces.log
12) Borrar el cache de Squid y como volver a Crearlo
13) Los problemas de Squid y una que otra alternativa de solución
14) Links Recomendados a parte de los Clásicos
15) Squid.conf, una Alternativa de Optimización(en el campo se ven los Pingos) :lol:



1) Una introducción Básica al Proxy
Squid es un programa que hace caché de datos obtenidos en Internet. Realiza este trabajo aceptando peticiones de los objetos que los usuarios quieren descargar y realizando estas peticiones a la red en su nombre. Squid se conecta con el servidor correspondiente, pide el objeto. De forma transparente, este objeto se entrega a la máquina cliente, pero al mismo tiempo, guarda una copia. La próxima vez que alguna máquina cliente de squid solicite la misma página, squid símplemente le transfiere su copia almacenada en memoria o disco acelerando considerablemente la transferencia y ahorrando ancho de banda en la conexión a Internet.
Actualmente Squid es capaz de hacer proxy-caché de los protocolos HTTP, FTP, GOPHER, SSL y WAIS. No soporta POP, NNTP, RealAudio y otros.

2) Hardware Mínimo Recomendado
Pentium III con 256 Megas de Ram.
Esto es así porque el proxy no está solo en el equipo, para el caso, el proxy es una parte de ArgentoBr, como lo es Permisos y Bloqueos, QoS, Split traffic, Bandwidthd, Smtpd eXtreme Mail y Bind 9 y operativamente puede que tenga que compartir espacio virtual o "tareas" junto con algunos de ellos. Lo que sí a tener en cuenta es que Squid es un gran consumidor de recursos, tanto de memoria como de procesador. Como referencia, le pongas la cantidad de memoria que le pongas, con el transcurso del tiempo verás que solo te deja libre el 2%.

3)Comenzando
Solo vamos a mencionar una configuración rápida para dejarlo funcionando, para ver detalles de como aprovechar este potente complemento de argento bridge, ver el el ANEXO o HOW TO de ARGENTOSQUID

Para la instalación, le damos clic en “instalar squid” y luego la opcion “si”

Una vez instalado, se debe reiniciar sin hacer backup

Algo para considerar y tener en cuenta:
La carpeta /hdb/syslog y la carpeta siguiente, tiene que verse algo así con el WinSCP

Código: Selecionar todos
Squid        03/05/2008  rwxrwxrwx  root


Y ya dentro de la carpeta /hdb/syslog/squid

Código: Selecionar todos
access.log        13.056.395   03/05/2008    22.53   rw-r--r--    nobody
access.log.0      35.323.105   03/05/2008    18:00   rw-r--r--    nobody
cache.log              1.034   03/05/2008    22:43   rw-r--r--    nobody
cache.log.0            3.300   03/05/2008    16:48   rw-r--r--    nobody
store.log         22.444.648   03/05/2008    22:53   rw-r--r--    nobody
store.log.0       61.830.425   03/05/2008    18:00   rw-r--r--    nobody


Tener cuidado con el tema del propietario y los permisos correspondiente a los archivos.
La advertencia viene por el lado de que si esto no está bien configurado, el comando puesto en el cron squid -k rotate no se va a ejecutar como corresponde y esto podría desembocar en algún momento en el bloqueo total del funcionamiento de Squid.
Como referencia, para saber si se está ejecutando bien el squid -k rotate en la parte Ver Logs del Cache de Squid, tiene que aparecer algo así y sin dar errores:
2008/05/03 18:00:01| storeDirWriteCleanLogs: Starting...
2008/05/03 18:00:01| Finished. Wrote 1298 entries.
2008/05/03 18:00:01| Took 0.0 seconds (187085.6 entries/sec).
2008/05/03 18:00:01| logfileRotate: /hdb/syslog/squid/store.log
2008/05/03 18:00:01| logfileRotate: /hdb/syslog/squid/access.log

Para este caso, la implementación del comando squid -k rotate puesto en el cron, se jecuta todos los días a las 18:00Hs.


Configuración Mínima para el Funcionamiento – squid.conf

Código: Selecionar todos
acl rede_interna src 192.168.1.0/24


En esta acl debemos cambiar 192.168.1.0/24 y colocar nuestra red
Por ejemplo, si nuestra red comprende los IP privados del tipo 192.168.0.X, la configuración correcta es:

Código: Selecionar todos
acl rede_interna src 192.168.0.0/24


Código: Selecionar todos
cache_dir aufs /hdb/cache 4500 16 256


En esta línea, el 4500(Mega bytes) corresponde al tamaño del cache, que lo cambiamos a gusto según el tamaño de nuestras particiones. Los números 16 y 256 significan que el directorio del caché contendrá 16 directorios subordinados con 256 niveles cada uno. No modifique esto números, no hay necesidad de hacerlo.
Acá viene la pregunta, ¿cuánto me conviene asignarle al cache de squid? Bueno, para guiarte hacé lo siguiente, del total de tu memoria ram, restale 20 megas para el uso de barzilFW, del resto que te queda, podes asignar 1 giga de cache cada 12 megas de ram libre que te queden. Es muy importante considerar que si se especifica un determinado tamaño de caché y éste excede al espacio real disponible en el disco duro, Squid se bloqueará inevitablemente.
Este valor, por ejemplo 4500 para el caso anterior, no debe superar el 80% del valor asignado a la partición real, llamada "cache".

Código: Selecionar todos
cache_mem 8 MB



El parámetro cache_mem establece la cantidad ideal de memoria para lo siguiente:

• Objetos en tránsito.
• Objetos frecuentemente utilizados (Hot).
• Objetos negativamente almacenados en el caché.

Los datos de estos objetos se almacenan en bloques de 4 Kb. El parámetro cache_mem especifica un límite máximo en el tamaño total de bloques acomodados, donde los objetos en tránsito tienen mayor prioridad. Sin embargo los objetos Hot y aquellos negativamente almacenados en el caché podrán utilizar la memoria no utilizada hasta que esta sea requerida. De ser necesario, si un objeto en tránsito es mayor a la cantidad de memoria especificada, Squid excederá lo que sea necesario para satisfacer la petición.

De modo predefinido se establecen 8 MB. Puede especificarse una cantidad mayor si así se considera necesario, dependiendo esto de los hábitos de los usuarios o necesidades establecidas por el administrador.

Si se posee un servidor con al menos 128 MB de RAM, establezca 16 MB como valor para este parámetro:
cache_mem 16 MB
Aclaración: Para este entorno(ArgentoBr), como se estipuló en el apartado "Hardware Mínimo Recomendado" para esta documentación los "128 MB de RAM" es un valor referencial extraido de la documentación oficial de Squid.

Si se posee un servidor con al menos 512 MB de RAM, establezca 300 MB como valor para este parámetro:
cache_mem 300 MB


Código: Selecionar todos
maximum_object_size 5000 KB
minimum_object_size 0 KB


Estas 2 líneas establecen los máximos y mínimos en KB de los archivos que se guardaran en cache.

Código: Selecionar todos
cache_access_log /hdb/syslog/squid/access.log
cache_log /hdb/syslog/squid/cache.log
cache_store_log none


En estas líneas se indican las particiones donde se guardaran los log, la partición syslog se monta desde HDB beta 3.

Activar el cron de BrazilFW(Scheduled Tasks) e insertar en Edit Tasks File la siguiente línea:
0 18 * * * squid -k rotate

Esto hace que al menos una vez al día se ejecute ese comando, más específicamente a las 18hs. en lo que respecta al comando anterior.

Con estas líneas ya podemos hacer funcionar squid en ArgentoBridge (en el how to de argentosquid se pondrán ejemplos de como crear perfiles horarios, bloquear dominios, extensiones de archivos, cachear video de youtube y demás).

4) Squid - Colas de Retraso

Para explicar el funcionamiento de las colas de retraso voy a dar un ejemplo, el cual limita la velocidad de acceso a páginas que contengan la palabra "mp3":

acl palabra_limitada url_regex -i mp3
delay_pools 1
delay_class 1 1
delay_parameters 1 16000/32000
delay_access 1 allow palabra_limitada


Con la opción delay_pools definimos cuantas colas de retraso habrá. Definan cuantas ustedes necesiten, según los filtros que deban utilizar. Luego, crearemos una cola de retraso con delay_class. El primer 1 corresponde al número de cola por crear, y el segundo 1 corresponde al tipo de cola de retraso. El tipo de cola de retraso 1 es el más simple: suma todas las velocidades de las conexiones y mantiene dicha suma por debajo de un valor máximo definido.
Con el parámetro delay_parameters definimos los lí­mites que sufrirá la cola de retraso 1. Como pueden ver, el parámetro final es 16000/32000. El primer 16000 corresponde a la velocidad de acceso (en bytes por segundo), y el segundo 32000, a un tamaño de archivo desde el cual comenzará a actuar el retraso (en bytes). Entonces, cuando un usuario descargue un archivo y la transferencia haya llegado a los 32.000 bytes descargados, la velocidad caerá a 16.000 bytes por segundo.
Finalmente, en la última lí­nea (delay_access), asignamos el perfil de retraso 1 a la regla "palabra limitada". El resultado final será que en todos los archivos que contengan la palabra "mp3" correrá la regla de retraso que acabamos de definir.
Para el caso de que se quiera limitar varias palabras con la regla anterior, creamos un archivo y solo cambiamos mp3, por la ruta de acceso al archivo que hayamos creado con todas las palabras a limitar.
Ejemplo:

acl ralentar url_regex -i "/hdb/squid/minomina"
delay_pools 1
delay_class 1 1
delay_parameters 1 16000/32000
delay_access 1 allow ralentar


El contenido del archivo minomina podría ser:
mp3
iso
wav
zip
arj


La segunda clase de colas de retraso nos permite definir un ancho de banda general y un ancho de banda por usuario. Por ejemplo, podemos limitar el ancho de banda general a 200 K y luego limitar el ancho de banda por usuario a 2,5 K para que todos tengan un acceso justo a la Red. Veamos el siguiente ejemplo:

acl mi_red src 192.168.0.0/24
delay_pools 1
delay_class 1 2
delay_parameters 1 25000/25000 2500/2500
delay_access 1 allow mi_red


Este ejemplo difiere del anteriormente visto a partir de la tercera lí­nea, en donde definimos que la cola de retraso 1 será de clase dos. Luego, establecemos los parámetros requeridos por la clase dos. El primer parámetro (25000/25000) es el resultado de 200 kilobits pasados a kilobytes/segundo (división por ocho), o sea, el lí­mite general del ancho de banda. El segundo parámetro es el lí­mite por usuario (2500 bytes por segundo).

Otro escenario con Delay Pools
Implementado sobre ArgentoSquid 2.7 + Zero Penalty Hit


Explico un poco mi configuracion (lo que agregue al final de squid.conf)

### Zero Penalty Hits ###
server_persistent_connections off
zph_mode tos
zph_local 0x30

delay_pools 2 #defino numero de reglas
delay_class 1 3 #regla 1 clase 3
delay_class 2 3 #regla 2 clase 3
delay_parameters 1 -1/-1 -1/-1 65536/1048576
delay_parameters 2 -1/-1 -1/-1 25600/1048576
acl jefes src 192.168.12.11-192.168.12.19/32 #ips con mayor velocidad
acl resto src 0/0 #el resto de los ips bajan a menor velocidad
delay_access 1 allow jefes
delay_access 2 allow resto

En delay_parameters, -1 significa deslimitado. El primer -1/-1 significa que no voy a limitar la velocidad de la red, el segundo, que no voy a limitar la velocidad de las subredes, el tercer termino 65536/1048576 significa que voy a dar rafagas de velocidad a cada IP individual hasta que bajen 1MB , luego se limitará a 64kB/s.

El esquema que tengo es asi:

Arqos---Arbr1(squid)---Arbr2(control)

Agregue 2 delay pools con distintas velocidades. Los ips desde 192.168.12.11 hasta 192.168.12.19 van a bajar a lo que este limitado desde el Arbr2 hasta que bajen 1MB, luego el delay pool lo limita a 512kbits/s (64kbytes/s). De la misma manera, para el resto de los ips va limitarlo a 200kb/s luego de que bajen 1MB. Si el archivo esta cacheado lo baja completo a la velocidad de HITs que le habia fijado en el Arbr2 ,por ejemplo si en el Arbr2 coloco:

simple_class_id 23 16 48 16 512 192.168.12.23 squid_no cached_yes 1536

La primera vez que baje un archivo (que no esta cacheado) baja el primer MB a 512kb/s, luego lo limita a 200kb/s (25600B/s) hasta que termine de bajarlo. Si lo bajo denuevo (como ya esta en el cache de squid) lo va a bajar a 1536kb/s constante hasta que termine.

Otra ventaja que tiene el usar este sistema es que podemos limitar a otra velocidad todo lo que no pase por squid (como por ejemplo los p2p) copiando la lista de clases de class.conf del Arbr2 al class.conf del Arbr1 y modificandole la velocidad de cada clase a gusto. De esta manera podemos dar mas velocidad para navegacion y menos para el resto.



5) Parámetro cache_peer: caches padres(parent) y hermanos(sibling)

El parámetro cache_peer se utiliza para especificar otros Servidores Intermediarios (Proxies) con caché en una jerarquía como padres o como hermanos. Es decir, definir si hay un Servidor Intermediario (Proxy) adelante o en paralelo. La sintaxis básica es la siguiente:

cache_peer servidor tipo http_port icp_port opciones

Ejemplo: Si su caché va a estar trabajando detrás de otro servidor cache, es decir un caché padre, y considerando que el caché padre tiene una IP 192.168.1.1, escuchando peticiones HTTP en el puerto 8080 y peticiones ICP en puerto 3130 (puerto utilizado de modo predefinido por Squid) ,especificando que no se almacenen en caché los objetos que ya están presentes en el caché del Servidor Intermediario (Proxy) padre, utilice la siguiente línea:

cache_peer 192.168.1.1 parent 8080 3130 proxy-only

Cuando se trabaja en redes muy grandes donde existen varios Servidores Intermediarios (Proxy) haciendo caché de contenido de Internet, es una buena idea hacer trabajar todos los caché entre si. Configurar caches vecinos como sibling (hermanos) tiene como beneficio el que se consultarán estos caches localizados en la red local antes de acceder hacia Internet y consumir ancho de banda para acceder hacia un objeto que ya podría estar presente en otro caché vecino.

Ejemplo: Si su caché va a estar trabajando en paralelo junto con otros caches, es decir caches hermanos, y considerando los caches tienen IP 10.1.0.1, 10.2.0.1 y 10.3.0.1, todos escuchando peticiones HTTP en el puerto 8080 y peticiones ICP en puerto 3130, especificando que no se almacenen en caché los objetos que ya están presentes en los caches hermanos, utilice las siguientes líneas:

cache_peer 10.1.0.1 sibling 8080 3130 proxy-only
cache_peer 10.2.0.1 sibling 8080 3130 proxy-only
cache_peer 10.3.0.1 sibling 8080 3130 proxy-only

Pueden hacerse combinaciones que de manera tal que se podrían tener caches padres y hermanos trabajando en conjunto en una red local. Ejemplo:

cache_peer 10.0.0.1 parent 8080 3130 proxy-only
cache_peer 10.1.0.1 sibling 8080 3130 proxy-only
cache_peer 10.2.0.1 sibling 8080 3130 proxy-only
cache_peer 10.3.0.1 sibling 8080 3130 proxy-only


Otro ejemplo:(en este caso la comunicación es entre proxys configurados en forma manual"3128" y transparente "8080")
icp_port 3130
cache_peer 192.168.0.3 parent 8080 3130 round-robin proxy-only
cache_peer 192.168.0.200 parent 3128 3130 round-robin proxy-only
cache_peer 192.168.0.201 parent 3128 3130 round-robin proxy-only
icp_access allow all

6) Doble Squid
Respecto al Cache_peer puede haber opiniones adversa respecto a su implementación. Hay que aclara que se puede instalar un proxy detras de otro proxy y no habría ningún inconveniente respecto a esto, funcionalmente andarían sin problemas independientemente de que se quiera o no usar cache_peer. Lo que si hay que tener cuidado si se colocan proxys en cascada es lo siguiente, por default el squid de Argenotbr beta9, en el archivo squid.conf trae la siguiente línea:
visible_hostname internet
hay que cabiar eso solamente en un squid para que funcionen dos squid en cascada, por ejemplo, se puede cambiar por:
visible_hostname internet1

Sugerencia:Otra cosa que se nos plantea es ¿qué pasa si en el Argentobr principal usamos split Escenario 1?
Mi sugerencia es hacerle split solamente a la ip del segundo argentobr, y así asegurarnos de que todo pedido hecho por squid del segundo argentobr pase por la gateway secundaria(la de navegación).
Por ejemplo: split_ip 192.168.0.8 00:E0:7D:A6:68:88 (Esta es la MAC de la gateway de navegación y el IP corresponde al segundo argentobr)
Advertencia: Ojo como configuren los valores de control de ancho de banda para la ip del segundo argentobr en las reglas del Qos del argentobr principal. Esa IP no es un "usuario común y silvestre", sino todo lo que va hacia el proxy destrás del segundo squid.


7) Perfiles - Una Alternativa

Tengo 3 archivos llamados:
usuarios
prohibido
todoper


La ubicación dentro del argentobr de los 3 archivos es en /hdb/squid/
En el archivo usuario tengo:
192.168.0.20
192.168.0.21
192.168.0.22
192.168.0.23
192.168.0.24
192.168.0.25
192.168.0.26
192.168.0.27
192.168.0.28


En le archivo prohibido tengo:
http://www.trackerx.com.ar
http://rapidshare.com/
http://www.megaupload.com/es/
http://www.gigasize.com/

En le archivo todoper tengo:
192.168.0.2
192.168.0.11
192.168.0.74


Como parte del squid.conf tengo lo siguiente:

#acl rede_interna src 192.168.0.0/24
acl rede_interna src "/hdb/squid/usuarios"
acl yo src "/hdb/squid/todoper"
visible_hostname internet
.
.
#always_direct allow accdirect
#http_access allow all
http_access allow rede_interna !prohibido
http_access allow yo
http_reply_access allow all


¿Qué va a pasar con esto?
Que solo las ip declaradas en todoper:
192.168.0.2
192.168.0.11
192.168.0.74


Van a poder acceder a las páginas declaradas en prohibido:
http://www.trackerx.com.ar
http://rapidshare.com/
http://www.megaupload.com/es/
http://www.gigasize.com/

El resto de las ip declaradas en usuarios no van a poder hacerlo.

Si esto lo combinamos con el cron podríamos hacer archivos gemelos en el nombre pero de diferente contenido, ubicados en carpetas que se las podría llamar: Noche, Hora_Pico, Día, etc.
Y con el cron copiamos(sobreescribiendo) los archivos de las diferentes carpetas en el momento que más nos convenga y luego recargamos el squid.
Por ejemplo:
0 12 * * * rm /hdb/squid/usuarios
0 12 * * * rm /hdb/squid/prohibido
0 12 * * * rm /hdb/squid/todoper
1 12 * * * cp /hdb/squid/hora_pico/*.* /hdb/squid/
2 12 * * * squid -k reconfigure


La idea de esto es:
A las 12:00Hs. borra los archivos usuarios, prohibido y todoper.
a las 12:01Hs. copia el contenido(los archivos) de la carpeta /hdb/squid/hora_pico a la carpeta /hdb/squid/ que contiene archivos con los mismo nombres de los borrados anteriormente pero con diferente contenido, que al final es lo que me define, por así decir, un nuevo perfil.
A las 12:02Hs. se recarga el squid tomando los nuevos contenidos de los archivos cambiados.

8) Poder saber el porcentaje de uso de Squid

La idea es hacer un script como para verificar un poco más el estado de nuestro Squid, ya sea para cuando hacemos algún cambio y queremos verificar si esta funcionando bien o solo para saber que tanto ancho de banda estamos "economizando" gracias al uso de squid.

Vamos a "Archivos de Configuración" - "Editar Cualquier Archivo", poner /argentobr/conteo.conf y pulsar Editar

nos aparece esto:
Código: Selecionar todos
cat: /argentobr/conteo.conf: No such file or directory


lo borramos y ponemos esto en su lugar:

Código: Selecionar todos
#!/bin/sh
#
# Gateway checker
. /etc/coyote/coyote.conf
echo "Iniciando conteo de Peticiones..."
all=`cat /hdb/syslog/squid/access.log | wc -l`> /dev/null
echo " Total de Peticiones : $all Peticiones "
echo "Iniciando Conteo de HITS..."
hit=`cat /hdb/syslog/squid/access.log | grep HIT | wc -l` > /dev/null
echo " Total de HITS: $hit Hits "
#Obteniendo el Porcentaje
mul=$(($hit*100))
div=$(($mul/$all))
echo "El porcentaje de Hits obtenidos es del $div %"


damos clic en OK, y el archivo está creado.

Para que el script quede ejecutable colocar en la línea de Dirección del browser:

Código: Selecionar todos
http://ip_de_tu_bridge:8180/cgi-bin/diags.cgi?COMMAND=chmod 7777 /argentobr/conteo.conf


Ahora resta tener acceso al script desde el webadmin para mayor comodidad, para lo que vamos a "Archivos de Configuración" - "Editar Cualquier Archivo" y ponemos:

Código: Selecionar todos
/var/http/htdocs/cgi-bin/argento-br.cgi


En el textoq ue ahora vemos, buscamos primero el título Squid:

Código: Selecionar todos
 <tr>
    <th>Squid</th>
  </tr>


Y poco después, donde se ve esto:

Código: Selecionar todos
<td class="row1"><b>Otros </b></td>
  <td class="row2">[<a href="argensquid.cgi">Instalar squid</a>  | </a> <a href="diags.cgi?COMMAND=squid -z">Iniciar Cache</a><a href="diags.cgi?COMMAND=squid"></a> </a>| <a href="diags.cgi?COMMAND=squid -k check">Chequear Squid</a> | <a href="editconf.cgi?CONFFILE=/argentobr/mailsend.conf">Editar variables de squidcheck</a> | <a href="diags.cgi?COMMAND=/argentobr/consumohd">Ver consumos del HD</a>


suplantamos por esto:
Código: Selecionar todos
  <td class="row1"><b>Otros </b></td>
  <td class="row2">[<a href="argensquid.cgi">Instalar squid</a>  | </a> <a href="diags.cgi?COMMAND=squid -z">Iniciar Cache</a><a href="diags.cgi?COMMAND=squid"></a> </a>| <a href="diags.cgi?COMMAND=squid -k check">Chequear Squid</a> | <a href="editconf.cgi?CONFFILE=/argentobr/mailsend.conf">Editar variables de squidcheck</a> | <a href="diags.cgi?COMMAND=/argentobr/consumohd">Ver consumos del HD</a> | <a href="diags.cgi?COMMAND=/argentobr/conteo.conf">Porcentaje Uso de Squid</a>]</td>


Listo, damos OK, resguardamos los cambios, y ya disponemos de un acceso al script en "Argentobridge" - Squid"

Haciendo click aparecerá algo así:

Iniciando conteo de Peticiones...
Total de Peticiones : 24616 Peticiones
Iniciando Conteo de HITS...
Total de HITS: 7323 Hits
El porcentaje de Hits obtenidos es del 29 %


¿Qué quiere decir esto?
Que han habido 24616 Peticiones a Internet de las cuales 7323 han sido asistidas por squid(ya estaban guardadas en el cache), digamos que hemos economizado en ancho de banda hacia Internet en un 29% de las peticiones totales.(Por así decir)


9) Trabajar con Subredes

Lo siguiente está personalizado dados los distintos tipos de servicios que, por ejemplo, se quieran vender u ofrecer.
Para el siguiente caso se tiene implementadas 3 subredes con dos niveles de bloqueo por Squid.
En 2 de ellas, el Squid esta presente en todo lo que se hace, baje o suba.
En la tercera subred, está "liberado el tránsito" para que esos usuarios, que requieren un mejor servicio que el resto, tengan ciertos beneficios por ser miembros "TOP" o "premium", como se los podría definir para el caso.

El sistema de discriminación tiene dos partes.
Una que es la separacion en sí misma a las primeras líneas de arrancado el Squid...
Código: Selecionar todos
    acl red1 src 192.168.0.128/27 192.168.21.0/24
    acl red2 src 192.168.99.0/24

Acá está indicando que existen dos subredes, la RED1(192.168.0.128/27 192.168.21.0/24) y la RED2(192.168.99.0/24), la primera compuesta en realidad por 2 subredes reales, y la última la que será TOP...

Más adelante el Squid, se encuentra con estas líneas y actúa en consecuencia.
Código: Selecionar todos
    #------------ Declarar EXTENSIONES A BLOQUEAR - Funcionando -------
    acl bajada urlpath_regex "/hdb/squid/etc/down_archivos"
    #------------ Permitir bajada de Pagina no Proxiadas ---Funcionando-
    http_access deny red1 bajada !red2


Observen que la ACL "bajada" toma los datos de las extensiones a bloquear de un archivo externo a la configuración, para evitar tener que modificar el archivo madre(squid.conf) y poder incluir o exceptuar a gusto extensiones, sin el riesgo de exponer el squid.conf a ser alterado o modificado en sus partes críticas.

La última línea es la gestora de las discriminaciones.

En Síntesis:
Se deniega el acceso a los archivos con extensiones prohibidas a todos los usuarios de la RED1, exceptuando (este simbolo lo hace "!") a los usuarios de la RED2, que bajan todo lo prohibido sin problemas.

10) Hacer que Squid no cachee una determinada página
Puede suceder que en algún momento queremos evitar el cacheo de una o varias páginas, buscamos estas líneas en el squid.conf
Código: Selecionar todos
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY

y reemplazamos con esto:
Código: Selecionar todos
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
acl pamplona url_regex -i http://www.unipamplona.edu.co
no_cache deny pamplona
no_cache deny QUERY

Bueno, demás esta aclarar que lo que estamos haciendo es una acl llamada "pamplona" donde indicamos que contendra el url que deseamos no cachear, en este caso http://www.unipamplona.edu.co y más abajo, indicamos que esa acl no pase por el cache de squid.

Para el caso anterior tendríamos lo siguiente:
En el caso de que cachee la página, nos aparece la siguiente leyenda a continuación del dominio correspondiente:
http://www.......... HTTP/1.1" 304 241 TCP_IMS_HIT:NONE
De funcionar todo correctamente, el no cacheo de la página, tendríamos la siguiente leyenda:
http://www.......... HTTP/1.0" 304 232 TCP_MISS:DIRECT

HIT---------------> Es que pidio
NONE------------->Que no hizo falta
HIT NONE--------> Es que lo entregó desde la memoria RAM, sin ni si quiera haber accedido al disco
MISS:DIRECT---->Es que vino directo de la Web


Otra forma prolija y válida de hacerlo es crear un archivo, por ejemplo, llamado "sincache" y declaramos lo siguiente:
Código: Selecionar todos
#No cachear algunas Páginas
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
acl sincache url_regex -i "/hdb/squid/sincache"
no_cache deny sincache
no_cache deny QUERY

Lo práctico de esto es que sólo es necesario agregar los dominio de las páginas que deseamos no cachear al contenido del archivo "sincache".(Tener cuidado de respetar la ruta declarada de la ubicación real del archivo dentro del disco, para el caso es /hdb/squid/sincache, sino tienen cuidado..... fueron.... \/ )

11) Interpretar LOG de ACCESO
Aca presentamos una pequeña tabla, con los parámetros que podemos ver en el acces.log, su significado en ingles, y una traducción hecha por cemaraya.

Access Log Tag / HTTP Code

"TCP_" refers to requests on the HTTP port.

TCP_ HIT
*A valid copy of the requested object was in the cache.
*Al usuario le llega una copia válida de un objeto solicitado, que ya estaba en Caché.

TCP_MISS
*The requested object was not in the cache.
*El objeto solicitado, no se encuentra en caché.

TCP_REFRESH_HIT
*The object was in the cache, but STALE. An If-Modified-Since request was made and a '304 Not Modified' reply was received.
*El objeto está en caché, pero es muy viejo. Una solicitud de "tráigame archivo mas nuevo" fue hecha, y el codigo 304 indica que no había tal archivo.

TCP_REF_FAIL_HIT
*The object was in the cache, but STALE. The request to validate the object failed, so the old (stale) object was returned.
*El objeto está en caché, pero es muy viejo. Una solicitud de validación de objeto falló, y por lo tanto se envía el que está en caché.

TCP_REFRESH_MISS
*The object was in the cache, but STALE. An If-Modified-Since request was made and the reply contained new content.
*El objeto está en caché, pero es muy viejo. Una solicitud de "tráigame archivo más nuevo" fue hecha, y se trajo uno más nuevo.

TCP_CLIENT_REFRESH
*The client issued a request with the 'no-cache' pragma.
*El cliente abre una página que tiene orden de SIEMPRE BUSCAR NUEVO ARCHIVO...

TCP_CLIENT_REFRESH_MISS
*The client issued a "no-cache" pragma, or some analogous cache control command along with the request. Thus, the cache has to refetch the object from origin server. It is users pushing that reload-button forcing the proxy to check for a new copy (also triggered by selecting a bookmark in some browser versions). In short, the browser forced the proxy to check for a new version
*El cliente solicita el refresco de una web determinada, mediante F5, pidiendo una nueva versión.

TCP_IMS_HIT
*The client issued an If-Modified-Since request and the object was in the cache and still fresh. TCP_HIT and TCP_IMS_HIT are hits, the only difference is that in the TCP_IMS_HIT case, the browser already had an up to date version, so there was no need to send the Squid cached copy to the requestor.
*El cliente ha solicitado mediante F5 una nueva versión de lo cacheado, pero se encuentra con que lo que estaba, ya era lo más nuevo posible.

TCP_IMS_MISS
*The client issued an If-Modified-Since request for a stale object.
*El cliente solicita nueva copia acerca de un objeto "viejo"

TCP_SWAPFAIL
*The object was believed to be in the cache, but could not be accessed.
*El objeto está en caché, pero por alguna razón no se puede acceder.

TCP_DENIED
*Access was denied for this request
*El objeto solicitado no se permite acceder

TCP_DENIED/403 lo más probable es que sea un sitio bloqueado por una de las listas de control de acceso del Squid. Tendrás que modificar la acl para deshacerse de estos. Fácil si eres el administrador de Squid, y no tanto si no lo eres.

TCP_DENIED/407 tu proxy está configurado para usar alguna forma de autenticación y esta autenticación está fallando. Otra cosa puede ser una herramienta de actualización automática que no tiene las credenciales para su uso o un usuario ha olvidado su nombre de usuario / contraseña. Esto se suele resolverse cuando el usuario te dice que no puede acceder a Internet, o su auto-update está fallando.

TCP_DENIED/400 la sintaxis de la petición estaba mal. Con esto podrías ver algo como "error:invalid-request" o "error:unsupported-request-method". El usuario (o un link a una página web) hizo algo mal - vea en las entradas después de estos y vea si hay una solicitud exitosa.

TCP_DENIED/401 la página requiere autorización. Probablemente hay una entrada despues de estas donde se autentican ellas mismas. Si no la hay, seguramente no se tiene un nombre de usuario / contraseña para el sitio - no es realmente tu problema (a menos que sea su sitio).



12) Borrar el cache de Squid y como volver a Crearlo
Mediante Putty accedemos a la consola.
a) Detenemos squid: squid -k shutdown
b) Luego hacemos cd /hdb/cache
c) Ejecutamos el comando rm * -r
El tiempo que demore en regresar al “prompt” dependerá de cuanta información este guardada en el cache, a mayor información más tardará en retomar el "prompt"
d) Desde el Prompt arrancamos el Squid ejecutando lo siguiente: squid –z
En la linea siguiente aparecerá algo así:
2008/02/25 12:12:51 Creating Swap Directories
e) Por último: reboot


13) Los problemas de Squid y una que otra alternativa de solución

Puede suceder que nos aparezca la siguiente leyenda:
Código: Selecionar todos
Arrancando Squid
squid: ERROR: Could not send signal 0 to process 3371: (3) No such process
squid no esta funcionando
terminado

Se recomienda hacer un Scandisk al HD, ingresando al Webadmin, ir al apartado HDB y ahí elegí Editar Variables y poner:
scandisk="yes"
Hacer Backup y reiniciar, eso va a demorar el arranque nomal del Bridge(entre 10 a 15 minutos con un cache de aproximadamente 6 Gigas) y durante ese lapso de tiempo no hay servicio de Internet, una opción es sacar la máquina del sistema o de producción o hacerlo de madrugada que se supone hay menos tráfico o usuarios en la Intranet.
Luego de todo esto verificar la funcionalidad del proxy, si después del reinicio no arrancó automáticamente, probar hacerlo manualmente(Arrancar Squid)

Si lo anterior no tiene efecto, probar:
1. "Iniciar Cache"... creando swap...
2. Arrancar Squid

¿Porqué todo lo "anterior"?
Puede suceder que el directorio donde trabaja Squid se dañe, al reiniciar con el Scandisk Activo(scandisk="yes") lo repara, pero en el proceso borra los directorios internos (que son muchísimos). Con la opción de Iniciar Cache se crea de nuevo esos directorios y por lo tanto se recupera la funcionalidad del proxy.

Comandos Utiles desde consola
a) squid -XD
Una salida típica a esto sería algo así:
2007/10/01 14:36:42| parse_line: icp_hit_stale off
2007/10/01 14:36:42| parse_line: minimum_direct_hops 4
2007/10/01 14:36:42| parse_line: minimum_direct_rtt 400
2007/10/01 14:36:42| parse_line: store_avg_object_size 13 KB
2007/10/01 14:36:42| parse_line: store_objects_per_bucket 20
2007/10/01 14:36:42| parse_line: client_db on
2007/10/01 14:36:42| parse_line: netdb_low 900
2007/10/01 14:36:42| parse_line: netdb_high 1000

b) Para ver si está logeando los accesos, ingresar por consola y ejecutar este comando:
Código: Selecionar todos
cat /hdb/syslog/squid/access.log

Si el listado es largo es porque está funcionando. Si se quiere más datos sobre una PC en particular se puede hacer:
Código: Selecionar todos
cat /hdb/syslog/squid/access.log | grep 192.168.0.101

Donde 192.168.0.101 es la IP de la máquina que se quiere cotejar si está usando Squid, si aparecen datos, es porque Squid está funcionando.

c)Para armar de nuevo los directorios, ejecutar esto por consola:
Código: Selecionar todos
squid -z


d) ¿Es normal que al consultar los log de acceso o almacenamiento no salga nada?
Los logs de almacenamiento se configuran en el archivo squid.conf y no son muy útiles, sólo cuando se hacen pruebas, ya que es un archivo que crece muy rapido y puede traer problemas.
Los de acceso sí, tienen que mostrar información, pero al principio son muy pocas líneas, sólo los pedidos de Internet desde que esta funcionando esa instancia de Squid.
Las líneas comprometidas en el squid.conf son las siguientes:
Código: Selecionar todos
logfile_rotate 1
emulate_httpd_log on
cache_access_log /hdb/syslog/squid/access.log
cache_log /hdb/syslog/squid/cache.log
cache_store_log /hdb/syslog/squid/store.log


En el caso de tener así:
Código: Selecionar todos
logfile_rotate 1
emulate_httpd_log on
cache_access_log /hdb/syslog/squid/access.log
cache_log /hdb/syslog/squid/cache.log
cache_store_log none

El cache de almacenamiento(store.log) estaría desactivado. Y esto evita problemas de log. Si se lo quiere activar no hay problema pero se tiene que activar la rotación de archivos(squid -k rotate)

14) Links Recomendados a parte de los Clásicos

http://www.visolve.com/squid/squid24s1/contents.php

15) Squid.conf, una Alternativa de Optimización(en el Campo se ven los Pingos)
La idea de esto es, en líneas generales, optimizar el contenido de un squid.conf para aquellos interesados en tener lo más "afinada" la configuracion del proxy y que sirva como referencia para futuras implementaciones.
Como detalle, este squid.conf está implementado en un Pentium 4 con 1.2 gigas de ram y un disco de 10 gigas.

##################################################################
#Esto está explicado en "7) Perfiles - Una Alternativa"
#acl rede_interna src 192.168.0.0/24
acl rede_interna src "/hdb/squid/usuarios"
acl yo src "/hdb/squid/todoper"

visible_hostname internet
cache_dir aufs /hdb/cache 6000 16 256
cache_mem 512 MB
maximum_object_size 40000 KB
minimum_object_size 0 KB
http_port 8080

#No cachear algunas Páginas, esto está explicado en "10) Hacer que Squid no cachee una determinada página"
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
acl sincache url_regex -i "/hdb/squid/sincache"
no_cache deny sincache
no_cache deny QUERY

memory_pools off

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

maximum_object_size_in_memory 64 KB

cache_swap_low 80
cache_swap_high 95


#Inicio
acl video_cache dstdomain .youtube.com video.google.com .llnwd.net .dailymotion.com
no_cache deny video_cache

## FLAGS desesperadas para aumentar o uso do cache ###

refresh_pattern -i \.doubleclick\.net 1440 40% 20160
refresh_pattern -i \.benchmark\.kelkoo\.net: 1440 40% 20160
refresh_pattern -i \.googleadservices\.com 1440 40% 20160
refresh_pattern \.google\.ar\/search$ 30 40% 20160
refresh_pattern -i \.do? 3000 80% 432000 override-expire
refresh_pattern -i \.do$ 3000 80% 432000 override-expire
refresh_pattern -i \.do 3000 80% 432000
refresh_pattern -i \.jsp? 3000 80% 432000 override-expire
refresh_pattern -i \.jsp$ 3000 80% 432000 override-expire
refresh_pattern -i \.jsp 3000 80% 432000 override-expire

## TENTATIVA DESESPERADA PARA SALVAR AS ATUALIZAÇÔES DO WINDOWS XP E NOD32 ##
refresh_pattern windowsupdate.com/.*\.(cab|exe) 4320 100% 43200 reload-into-ims
refresh_pattern download.microsoft.com/.*\.(cab|exe) 4320 100% 43200 reload-into-ims
refresh_pattern eset.com/.*\.(rar|nup|ver) 4320 100% 43200 reload-into-ims


# Java
refresh_pattern \.class$ 2880 60% 28800

# Imagenes
refresh_pattern \.gif$ 2880 80% 28800
refresh_pattern \.jpg$ 2880 80% 28800
refresh_pattern \.jpeg$ 2880 80% 28800
refresh_pattern \.png$ 2880 80% 28800
refresh_pattern \.bmp$ 2880 80% 28800
refresh_pattern \.tif$ 2880 80% 28800
refresh_pattern \.tiff$ 2880 80% 28800
refresh_pattern \.xbm$ 2880 80% 28800

# Animaciones
refresh_pattern \.mov$ 2880 80% 28800
refresh_pattern \.avi$ 2880 80% 28800
refresh_pattern \.mpg$ 2880 80% 28800
refresh_pattern \.swf$ 2880 80% 28800
refresh_pattern \.flv$ 2880 80% 28800

# Audio
refresh_pattern \.wav$ 2880 80% 28800
refresh_pattern \.au$ 2880 80% 28800
refresh_pattern \.mid$ 2880 80% 28800
refresh_pattern \.mp3$ 2880 80% 28800

# Archivos comprimidos
refresh_pattern \.zip$ 2880 50% 28800
refresh_pattern \.cab$ 2880 50% 28800
refresh_pattern \.gz$ 2880 50% 28800
refresh_pattern \.arj$ 2880 50% 28800
refresh_pattern \.lha$ 2880 50% 28800
refresh_pattern \.lzh$ 2880 50% 28800
refresh_pattern \.rar$ 2880 50% 28800
refresh_pattern \.tgz$ 2880 50% 28800
refresh_pattern \.tar$ 2880 50% 28800
refresh_pattern \.Z$ 2880 50% 28800

# Documentos
refresh_pattern \.pdf$ 2880 60% 28800
refresh_pattern \.rtf$ 2880 60% 28800
refresh_pattern \.doc$ 2880 60% 28800
refresh_pattern \.wp$ 2880 60% 28800
refresh_pattern \.wp5$ 2880 60% 28800
refresh_pattern \.ps$ 2880 60% 28800
refresh_pattern \.prn$ 2880 60% 28800
#Fin
refresh_pattern -i ^http://.*\.(css|htm|html|ico|js|jsp|xml)$ 1440 80% 999999
refresh_pattern -i ^http://.*\.(bmp|gif|jpeg|jpg|png)$ 1440 80% 999999 ignore-reload
# A lo que sigue ponerlo todo seguido, el problema es que la línea es tan larga que se corta, entonces lo que hice #fue continuarlas abajo una despues de la otra, pero reitero, va todo seguido en la misma línea, hasta donde dice #"ignore-reload"
refresh_pattern -i ^http://.*\(ace|adt|arj|asf|avi|bin|bz2|bzip|cab|dat|dll|doc|dot|exe|fla|flv|gz|iso
|lha|log|lzh|mdb|mid|mov|mp3|mpeg|mpg|msi|mso|ogg|pps|ppt|rar|rm|rtf|shs|src|sys|swf|tgz|tif|ttf|wav|wma|wri|wmv
|vpu|vpaa|vqf|vob|zip)$ 43200 100% 999999 ignore-reload

#offline_mode on

logfile_rotate 1
emulate_httpd_log on
cache_access_log /hdb/syslog/squid/access.log
cache_log /hdb/syslog/squid/cache.log
cache_store_log /hdb/syslog/squid/store.log

half_closed_clients off

cache_replacement_policy heap LFUDA

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
#acl to_localhost dst 127.0.0.1/32
acl SSL_ports port 443 563
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 8180
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl Safe_ports port 901
acl purge method PURGE
acl CONNECT method CONNECT
acl prohibido url_regex "/hdb/squid/prohibido"

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

icp_port 3130
#always_direct allow accdirect
#http_access allow all
http_access allow rede_interna !prohibido
http_access allow yo
http_reply_access allow all
#icp_access allow all
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
http_access deny all
coredump_dir /hdb/cache

acl archivos url_regex -i "/hdb/squid/archivos"



NOTAS:
1- Squid utilizará la memoria ram disponible, por lo que el consumo de ram en webadmin crecerá hasta llegar a un 98% y se detiene. Esto es completamente normal, si el sistema llega a necesitar de esta memoria, squid la libera automáticamente, solo se trata de aprovechar los recursos disponibles al máximo.

###########################################
Otro sitio de Interés:
http://www.bulma.net/body.phtml?nIdNoti ... 0000000000


Colaboradores:
Nachazo
Gamba47
Marcelo
Cemaraya
Ramiropampa
soporte_tecnico
marianitosanchez
Alenu6
Y si se me pasó alguno, mil disculpas..... >|
Avatar do usuário
eddie
BFW Very Participative
 
Mensagens: 307
Registrado em: Ter Mar 14, 2006 11:54 pm
Localização: Argentina
BrazilFW Box:

Voltar para BrazilFW 2.x

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron