domingo, 27 de mayo de 2012

pfsense 2: Squid Windows Update cache.log errores

La documentacion de squid nos habla que hay manera de cachear los updates de windows con squid, viendo el lado practico es bueno para una empresa de 20+ estaciones, es un ahorro de ancho de banda impresionante.

Me vi en la tarea de probar lo que los expertos de squid sugieren, este es el link:


Los parametros que mencionan son estos:

# Add one of these lines for each of the websites you want to cache.
refresh_pattern -i microsoft.com/.*\.(cab|exe|ms[i|u|f]|asf|wm[v|a]|dat|zip) 4320 80% 43200 reload-into-ims
refresh_pattern -i windowsupdate.com/.*\.(cab|exe|ms[i|u|f]|asf|wm[v|a]|dat|zip) 4320 80% 43200 reload-into-ims
refresh_pattern -i my.windowsupdate.website.com/.*\.(cab|exe|ms[i|u|f]|asf|wm[v|a]|dat|zip) 4320 80% 43200 reload-into-ims

# DONT MODIFY THESE LINES ESTOS YA LOS ESTOY USANDO SIEMPRE
refresh_pattern \^ftp:           1440    20%     10080
refresh_pattern \^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320
 
Ya anteriomente habia hablado del parametro: refresh_pattern.
 
Estuve probando con algunas PC's, si funciona solo que empece a recibir ciertos errores 
en el log del cache:

2012/05/27 11:18:39| sslWriteServer: FD 27: write failure: (1) Operation not permitted.
2012/05/27 11:24:02| sslWriteServer: FD 36: write failure: (1) Operation not permitted.
2012/05/27 11:28:56| sslWriteServer: FD 37: write failure: (1) Operation not permitted.
2012/05/27 11:30:12| sslWriteServer: FD 27: write failure: (1) Operation not permitted.
2012/05/27 11:41:13| sslReadServer: FD 25: read failure: (1) Operation not permitted
sslReadServer: FD 25: read failure: (1) Operation not permitted 
2012/05/27 10:47:44| squidaio_queue_request: WARNING - Queue congestion

Quiero agregar que mi disco duro es uno muy viejo, ya que estoy probando estos parametros,
pero quiero pensar que el problema es mi disco duro, voy a tener que probar otro mas
nuevo y ver si los errores siguen, ya que de repente mi navegacion se pone lenta cuando
estoy actualizando y probando la bajada de updates.

Lo que sigue es cambiar disco y ver si doy con el problema, saludos!!!

viernes, 25 de mayo de 2012

pfsense 2: squid y contenido dinamico parte 2

Hable ya hacerca de como esta configurado squid para manejar el contenido dinamico, bien aqui les voy a explicar como yo hice pruebas y si alguien por ahi tiene alguna aportacion seria bien recibida.

Lo que deseo es mostrar como la configuracion normal de squid no tiene sentido ya usarla y es mejor moverse a la nueva forma, que como dije los desarrolladores no hay querido dejar el archivo listo, creo que en la rama 3.x ya la trae pero la 2.x no.

Me refiero a estos parametros:

acl dynamic urlpath_regex cgi-bin \?
cache deny dynamic

En mi opinion personal ya no conviene tenerlos, recordar que en definicion estan bloqueando cachear las paginas dinamicas.

Pruebas

Mi prueba es sencilla, lo que hago es lo siguiente:

Uso 2 navegadores: Firefox/Iexplore.
Pruebo accesar las siguientes paginas:
  • osnews.com
  • noticiasmvs.com
    msn.com
    yahoo.com
    acdc.com
    informationweek.com
    frontera.info 
Son paginas que yo regularmente visito, en un sistema en produccion hay mas, estas las escogi yo, con cada navegador accese la pagina 2 veces, pero lo hacia 1ro con uno luego con otro algo asi:

firefox/iexplore terminaba y corria el ccleaner para limpiar el cache de ambos, todos los navegadores tienen su propio cache, si no lo hacen la prueba no funciona, una vez limpiado el cache de los navegadores, volvia a repetir la prueba.

En cada acceso a cada pagina me interesaba saber cuantos links me retornaba cada sitio, para esto una vez cargada una pagina completa, en la consola ejecutaba lo siguiente:

cat log/access.log | wc -l

Esto leia el log de squid y contaba las lineas, asi podria darme una idea de todo lo que cada sitio me daba.

Una vez terminada la 1ra configuracion, sacaba mis reportes del cache con: srg, free-sa.

Una vez obtenidos mis reportes, cambiaba la configuracion de squid, borraba el cache de squid y lo volvia a crear, vaciaba los logs de squid, y reiniciaba squid para empezar de 0.

Y esto hasta terminar de probar mis 3 configuraciones que fueron estas:

Default:

acl dynamic urlpath_regex cgi-bin \?
cache deny dynamic

Sugerida por la doc de squid:

refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern .            0 20% 4320
 
Sugerida mas extras:
 
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern -i \.index.(html|htm)$ 1440 90% 40320
refresh_pattern -i \.(html|htm|css|js)$ 1440 90% 40320
refresh_pattern -i \.(gif|png|jpg|jpeg|ico|bmp)$ 260000 90% 260009
refresh_pattern . 0 20% 4320
 
Como podran son 3 corridas en total.

Resultados

Tablas con los contadores de las lineas en cada corrida:

Figura 1: Lineas de corrida con parametros default

Figura 2: Parametros sugeridos.
Figura 3: Parametros sugeridas + extras.
Como podran ver no hay mucha discrepancia entre los 3 parametros, ahora viene ver los reportes de desempeño de squid.


Reporte SRG

Voy solo a mostrar la 1er pagina de cada reporte ya que en todas muestra los totales:

Figura 4: Srg de los parametros default.
Figura 5: Srg con parametros sugeridos.
Figura 6: Srg con parametros sugeridos + extras.
Aqui ya podran darse cuenta que tanto los parametros nuevos muestran mayor numero de HITS y el que tiene parametros extras se lleva a el 2do por minima diferencia.

Ya tenemos que cualquiera de los 2 es mejor que el parametro default.

Default: 27.29% HIT 72.71% MISS
Sugerida: 27.79% HIT 72.21 MISS
Sugerida+extras: 28.92% HIT  71.08% MISS
Ahora viene el reporte que nos da free-sa.

Reportes Free-SA.

Figura 7: Free-sa parametros default.
Figura 8: Free-sa parametros sugeridos.
Figura 9: Free-sa parametros sugeridas+extras.
Aqui volvemos a corroborar que tanto los nuevos parametros siguen arriba de la configuracion default.

Si observan los 3 reportes de free-sa, figura 7, 8 y 9, existe solo en la figura 7 que la de los parametros default aparece esto:

Internal Server Error 6 veces.

O sea que tuvo problemas con el servidor remoto 6 veces, los otros 2 no tuvieron este problema.

Resumen

Recomiendo hacer uso de los nuevos parametros, pero solo recordarles que con pfsense no hay manera de comentar unos y agregar los otros, se tiene que configurar el archivo a mano, ya por ahi lo he expuesto como, pero tambien antes de hacer algo, hagan sus propias pruebas, si tienen mejoria y no afecta su desempeño, tomen su decision y adelante, saludos!!!



jueves, 24 de mayo de 2012

Pfsense 2: Squid y contenido dinamico.

He estado trabajando sobre este tema con squid, la configuración que trae squid-cache por default viene con un parametro que desde que inicio squid lo ha traido que este:

acl dynamic urlpath_regex cgi-bin \?
cache deny dynamic

Segun los expertos esta 2 lineas fueron hechas para no permitir que ninguna pagina con contenido dinamico(Dynamic Content) fuera cacheada por squid por seguridad, ya que en aquellos años no habia tantas y la mayoria eran scripts cgi-bin.

Hoy las cosas son distintas y se puede decir que el 99% de las paginas son dinamicas, el equipo de squid hizo cambios, pero repito aun la configuracion base trae esos 2 parametros.

Si los revisan ahi van a estar, googleando un poco existe una pagina de squid que habla al respecto:


Ahi dice que los parametros nuevos son estos:

refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern .            0 20% 4320
 
Pero tambien dice que si vamos a usar estos parametros borremos los parametros viejos
o sea:
 
acl dynamic urlpath_regex cgi-bin \?
cache deny dynamic

Yo he trabajado un poco sobre estos, ya que el parametro refresh_pattern tiene una sintaxis:

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

Se puede llevar a otros niveles, vamos hacer unos ejercisios para ver si hay ventaja, lo que puedo decirlos que al menos en los que he hecho, ha habido un alguna ventaja.

Una desventaja es que para poder trabajar este parametro es necesario manipular la configuracion desde la consola, ya se los he mostrado como, si hacen las pruebas como yo la consola sera su aliada durante ese tiempo.

El GUI tiene sus limitantes y este es uno de ellos.

Saludos!!!
 

lunes, 14 de mayo de 2012

pfsense 2: como borrar y crear el cache de squid?

Vamos a ensuciarnos las manos, estoy preparando mi servidor de prueba para probar ciertos parametros referentes a el cache de squid, entonces, necesito borrar el cache y volver a crearlo, ya que si deseo que mis pruebas sean validas esto es necesario.

No quiero hacer mis corridas con cache usado, prefiero cada que inicie la corrida borrar toda mi cache, existen varios metodos voy hacer el mas crudo de todos creo yo.

Los pasos son simples nada del otro mundo, lo unico necesario es la consola, por el GUI imposible, repito no hay nada aun que se iguale a el poder de la consola.

Ya estando en ella, hasta un script podemos hacer y esos se los dejo de tarea una vez terminado este pedazo de mi blog.

Pasos a seguir:

1; Prefiero que nadie este conectado a el squid.
2; Entramos a la consola.
3; Nos vamos a la ruta donde se localiza el folder del cache, que en mi caso es: /var/squid

cd /var/squid
4; Apagamos squid:

/usr/local/etc/rc.d/squid.sh stop

5; Validamos que ya no este abierto el puerto, de lo contrario si aun sigue algun proceso activo, importante que no haya nada de squid ejecutandose:

sockstat -4 | grep 3128

NOTA:No debe devolvernos nada, de lo contrario buscar los procesos y matarlos.

6; Borramos el folder del cache

rm -rf cache/
NOTA: Si tienen miedo y tienen espacio en su disco: mv cache cacheold
si algo sale mal, retornamos el cache: mv cacheold cache

7; Creamos el folder de nuevo.

mkdir cache

8; Cambiamos permisos:

chown proxy:proxy  cache/

 9; Creamos directorios de nuevo.

squid -zX

NOTA: la X es para ver todo lo que hace, si no desean verlo la quitan del comando. Este comando puede tardar segun el tamaño del cache en su configuracion y la velocidad de su maquina.

10; Iniciamos de nuevo squid:

/usr/local/etc/rc.d/squid.sh start

11; Listo.

Recordar que esto lo tienen que hacer lo mas rapido posible de lo contrario squid puede iniciar sin la intervencion de uno ya que recordar que existe un monitor de squid que lo arranca si no esta en ejecucion el servicio, si esto pasa deben iniciar desde el paso 1, asi que practiquen y hagan su batch.

Por que a veces tenemos hacer esto?

Ahi veces que nuestro cache necesita una purga general, esta es una buena opcion para iniciar con un cache limpio sin nada de datos e iniciar de nuevo.

Saludos!!!

lunes, 7 de mayo de 2012

Pfsense 2: Reportes de desempeño usuarios y cache

He estado analizando distintos reportes para squid, he hablado anteriormente de sarg, pero a veces es necesario tambien ver el desempeño del cache, a veces uno se pregunta si squid esta usando o no el cache.

Una forma muy sencilla es leer nuestro log(access.log) y buscar los parametros con la palabra:

_HIT

Cuando esto aparece significa que squid esta haciendo uso de su cache, es preferible que aparezca:

TCP_MEM_HIT

Pero a veces no es posible, este valor indica que encontro el objeto en la memoria asi que nos ahorramos la ida a disco y como sabemos es mas rapido el acceso a memoria que a disco.

Con lo anterior ya  podriamos corroborar que al encontrar palabras con _HIT significa que nuestro cache esta operando, muchos sitios bloquean esto y mas los de contenido dinamico para ello existen otras tecnicas, ahorita estamos enfocados en la configuracion basica de squid.

Mi blog ha sido generalmente basado en la version nano, pero para poder yo sacar datos de mi cache necesite hacer la instalacion en disco asi que ya lo tengo, tuve problemas con mi maquina de pruebas y mi disco nuevos, tanto EIDE y Sata, por alguna razon pFsense tiene problemas en arrancar con mi placa y estos discos, use uno de 20GB y sin problemas, luego les platico.

Regresando a el tema, me vi en la tarea de buscar otros reportes distintos a Sarg y encontre varios, algunos no se lograron instalar ya que dependen de perl 5.10 y algunos ya habia instalado la v 5.12 asi que no quise romper las cosas.

El sitio de squid tiene una pagina donde apunta a varios reportes que uno puede acceder, algunos se ejecutan hasta en Winblows, este es el enlace:

Squid-Reportes-de-Log

De ahi tome algunos y ademas me fui a los ports de FreeBSD a buscar que mas habia, me encontre con algunos interesantes ya que muestran algo que muchos buscamos, como se esta usando mi cache.

Vamos empezando por srg:

Sitio: http://www.crc.net.nz/software/srg.php

Me agrado su reporte limpio e informativo, nos genera una pagina html y podemos agregar javascript para poder sortear los resultados.

Al parecer no tiene dependencias.

Instalacion:

pkg_add -r ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.2-release/www/srg-1.1_1.tbz

Una vez instalado recordar ejecutar rehash en la consola.

Parametros:

root# srg
usage: srg [options]
Options:
-a

                  Perform analysis only on requests from the
                              specified IP address.
-C               Location of the srg config file.
-d                            Enable debugging output
-E             If the username does not exist, look up the
                              username using info in this file
-f                  The file to process
-g                     Group analysis by specified criteria
                               A=address, S=subnet, U=username
-H                            Perform DNS lookups on IP addresses to
                              be displayed in reports.
--help -h                     Display this help
-m                      Specify maximum number of days to keep a
                              report
-M                            Output a summary report suitable for
                              emailing.
-n                   Specify the netmask to be used when grouping
                              by subnet, ie. 255.255.255.0
-o                 Output Directory
-O                       URL where reports will be located
-r                            Enable javascript column sorting in output
-R                            Show transfer rate in reports
-s /   Perform analysis only on requests from the
                              specified subnet.
-S                            Show time value in reports
-t '-'            Time period to perform analysis in. Records
                              that are not inside this period will not be
                              analysed. i.e. '31/10/2003-1/11/2003'
-u                  Perform analysis only on requests from the
                              specified username.
-v                            Verbose mode. Print relevant messages.
-V                              Print Version and exit.


Como me genera un reporte en formato html, voy a crearle un folder dentro mi servidor web en este caso ya saben cual usa pfsense, asi que creo mi folder:

root# mkdir /usr/local/www/srg
Ahora me voy a ese directorio:
cd /usr/local/www/srg

Y ejecuto mi comando con estos parametros:

srg -r -R -S -o ./ -f /var/squid/logs/access.log

-r = javascript para poder sortear la salida.
-R=mostrar valores de transferencias.
-S=Mostrar valores de tiempo.
-o=Donde deseo guardar el reporte final.

En mi folder creado voy a tener esto:

drwxr-xr-x  444 root  wheel  20992 May  7 21:42 2012May07-2012May07
-rw-r--r--    1 root  wheel    947 May  7 21:42 index.html
-rw-r--r--    1 root  wheel   2877 May  7 21:42 srg.js
-rw-r--r--    1 root  wheel   1329 May  7 21:42 style.css

Apuntamos nuestro navegador a este folder y tenemos esto:

Figura 1: Pagina Inicial de srg.
 Cuando le damos click a el enlace mostrado vemos lo siguiente:

Figura 2: Detalle del Reporte.
Como podran observar en la figura 2, se pueden observar las paginas y tenemos ademas varias columnas que nos dan info de como ha trabajado squid, en mi caso deseo saber el desempeño de mi cache, ademas le agregamos un parametro que nos permite sortear en base a la columna deseada, ejemplo al darle click a la columna de HIT, me sorteara el reporte de mayor HIT a menor HIT:

Figura 3: Reporte Sorteado por columna HIT.
Si se van a el final del reporte pueden observar los datos acumulados, ver siguiente figura:

Figura 4: Sumatoria del Reporte.
Como podran ver dice que nuestro cache nos a dado 4.61%, su reporte puede ser distinto, yo he tenido poco trafico en el sistema de produccion voy a obtener resultados mayores.

Este reporte se puede ejecutar con un batch pero mucho antes de rotar el log no se les olvide, no perderle el ojo a este pequeño pero interesante programa.

Free-SA: Este al igual que el anterior nos genera el reporte en HTML para poder verlo atraves de nuestro navegador, tambien le creamos un folder con el mismo nombre en /usr/local/www y ademas este si tiene un archivo de configuracion.

Sitio:
http://free-sa.sourceforge.net/

Instalacion:
pkg_add -r ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.2-release/www/free-sa-1.6.2.tbz

configuracion: /usr/local/etc/free-sa/

Copeamos el free-sa.conf.sample a free-sa.conf

Y lo ponemos asi:

#########
# FILES #
#########
log="/var/squid/logs/access.log"
#usertab="/usr/local/etc/free-sa/users"
#downloads="/usr/local/etc/free-sa/downloads.sample"
#local_filter=""
#global_filter=""


###############
# DIRECTORIES #
###############
targetdir="/usr/local/www/free-sa"
tmpdir="/var/squid/cache/free-sa"


#####################
# REPORTS SELECTION #
#####################
ts="true"
paf="true"
saf="true"
pdn="true"
sdn="true"
cct="true"
pst="true"
dld="false"
#fullurl="true"
#users="true"
#email=""

##################
# REPORTS LIMITS #
##################
#paf_limit="50"
#saf_limit="50"
#pdn_limit="50"
#sdn_limit="50"
#cct_limit="50"
#pst_limit="50"
#dld_limit="50"
#lcf_limit="50"
#url_limit="50"
#ts_limit="0"
#dld_min="0"
#rtr_timeout="5000"


####################
# OTHER PARAMETERS #
####################
name="free-sa.conf"
#logformat="0"
#skip_errors="false"
fulltraffic="yes""
#inameuser="true"
#user_unescape="false"
indicators="true"
#overwrite="0"
resolveip="false"
showinfo="true"
#site=""
#logo=""
#locale=""
#rotate=""
#divisor="b"
#tz_shift="0"


Lo pueden modificar segun sus parametros. Una vez hecho esto solo ejecutamos el comando en la consola:

root# free-sa

Y ya tendremos nuestros datos en el folder indicado, vamos a verlos.

Figura 5: Paginal inicial de Free-SA.
Le damos click para ver el detalle:

Figura 6: Detalle de Reporte.
Pueden ver todos, pero me voy a ir sobre el que dice "Proxy efficiency" y nos da esto:

Figura 7: Desempeño de Squid.
En la figura 7 marque con azul cuantas peticiones se han servidor y con rojo cuantas han sido de cache, es bajo el valor en el sistema de produccion debe ser mayor.

Datos interesantes para tomar el pulso de nuestro squid proxy, tambien se puede poner un batch y ejecutarlo diariamente, recordar que mientras mas informacion se tiene mas podemos saber si las cosas andan bien o necesitamos ajustes.

Ahora sigue: squidview.
Sitio: http://www.rillion.net/squidview/
Instalacion:
pkg_add -r ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.2-release/www/squidview-0.73.tbz
rehash
squidview
(Este ultimo paso me lo comento kaone blue que se dio cuenta, gracias)

El ultimo comando nos genera el .squidview en el usuario que lo ejecuta en este caso root.

Este programa nos permite ver nuestro log(access.log) en tiempo real, pero como viene de FreeBSD necesitamos hacer unos ajustes a la configuracion, una vez instalado les aparece en el folder del root un directorio escondido llamado: .squiview.

Dentro de ese folder les aparece esto:

lrwxr-xr-x  1 root  wheel  32 May  7 13:52 HOWTO -> /usr/local/share/squidview/HOWTO
lrwxr-xr-x  1 root  wheel  26 May  7 23:03 log1 -> /var/squid/logs/access.log
lrwxr-xr-x  1 root  wheel   4 May  7 13:52 log2 -> log1
lrwxr-xr-x  1 root  wheel   4 May  7 13:52 log3 -> log1

La linea que marque ya esta reparada, ya que por default esta apuntando a el access.log donde lo guarda FreeBSD, en mi caso yo lo tengo en la ruta marcada.
Si tratan de ejecutar el comando no va  sacar nada de informacion por lo anterior, entonces necesitamos hacer los ajustes que es eliminar ese enlace y crearlo con la ruta correcta:

root# unlink log1

ln -s /var/squid/logs/access.log /root/.squidview/log1

Hora de ejecucion, solo ejecutamos squidview y nos aparece ya una foto de los sitios y quien los tiene abiertos:

Figura 8: SquidView reporte inicial.
Ahora si presionan la h=help=ayuda les mostrara la lista de comandos que porporciona, a mi me gusta el que le pedimos que lea N cantidad de lineas desde la parte de abajo o sea el final del archivo y que nos de una sumatoria de cada usuario encontrado en tiempo real, observen.

Presionamos g, nos pide Goto percentage: 100

Presionamos T, nos manda un mensaje y tenemos esto:

Figura 9: Sumatoria en Tiempo Real de Usuarios.
En el sistema de produccion esta pantalla tiene mas usuarios y esta mostrando como mencione anteriormente todo en tiempo real.

Si desean limpiar los valores solo presionen la letra 'z' e inicia de 0 todo asi tendremos una clara vision de la operacion.

Este programa no deben perderle el ojo, muy importante la informacion en tiempo real.

...continua