Análisis simple mirando los logs del Squid

Hola, parece que siempre dejamos pasar un tiempo largo para escribir en el blog. Espero que no vuelva a pasar. Siempre tengo ganas de escribir y nunca encuentro el tiempo. Esta vez en vez de escribir algo largo, me decidi por algo mas corto y puntual.

Hablando con unos clientes sobre el consumo de su ancho de banda, nos pusimos a trabajar en varios frentes para investigar en que se estaba generando trafico. Seguramente en otro post contare que herramientas se usaron. Pero en este vamos a hablar del consumo por navegacion. Quería saber que hacen los usuarios mas alla de ver los top de paginas destino, buscaba demostrarle al cliente que sus usuarios no usaban internet para trabajar. Y que hay que reestringir mucho mas.

Por suerte usan como proxy Squid, me permite analizar de manera flexible los logs. Me puse a discutir mostrandole un análisis de los logs del proxy, para esto hace tiempo armamos unas paginas donde el cliente puede ver estadísticas del uso/abuso de la navegación de manera diaria y mensual.

Mirando otros reportes comerciales (W*bsense, etc) siempre para mejorar nuestros reportes, observe que muestran que busco la gente en Google, de esa manera uno puedo ver cuando se pierde el tiempo en cosas del negocio o en cosas “personales”. Este post no es para discutir cuestiones de privacidad, solamente para que miremos algunas estadísticas reales y como se obtuvieron.

En conclusión quería agregarle a mi reporte para los clientes, que buscan en Google. Y para mostrar una parte del mismo, hice dos pequeños scripts para analizar el log, llamados “search_string.pl” (se queda con la frase buscada) y “search_tokens.pl” (arma tokens con las palabras), más abajo van a poder ver el código. Básicamente parsean el log y busca en la URL pedida el string “q=” que usa Google para la busqueda. Uno para frases y el otro para tokens.

Ahora les voy a mostrar dos ejemplos reales para que vean en que pierde el tiempo a gente (o gana depende de donde se mire).

Empresa 1. Top 25 de busquedas.

En el listado removí items por privacidad.

Algunas cosas para notar:

  • Vemos búsquedas de armas, sera bueno seguir trabajando ahi?
  • Facebook (esta bloqueado para el 90% de los usuarios)
  • Tienen bloqueadas algunas paginas por eso buscan proxys alternativos.
  • Esta de moda alguna película de Hollywood (se puede ver en los strings y tokens).

String

~# grep google.com /var/log/squid/access.log | perl search_string.pl \
     | sort | uniq -c | sort -nr | head -n25
     66 winona ryder the black swan
     51 winona ryder surgery
     34 facebook
     28 imagenes de vangelis teens
     27 armas
     26 mejor pagina callcenter
     25 hotel san marcos de mar de ajo
     18 policy logon run url win 2008
     18 imagenes de enya
     15 squid para windows xp
     13 policy to execute logon url and logoff win 2008
     13 infobae
     13 hoteles en mar de ajo
     13 3g netbook
     12 wireless tigre
     12 rock _ pop en mar de ajo
     12 nickelback taringa mediafire
     12 mapa de mar de ajo
     11 pearl___ 9100
     11 ipaq site_www_dealextreme_com
     11 instalar servidor proxy windows xp
     11 charm school roxette
     10 windows server 2008 r2
     10 script to execute url
     10 proxy server taringa

Tokens

~# grep google.com /var/log/squid/access.log | perl search_tokens.pl \
     | sort -nr | head -n25
122 winona
120 ryder
69 2008
67 proxy
66 swan
66 black
57 imagenes
54 avenida
51 surgery
50 windows
50 policy
50 nickelback
49 logon
46 taringa
45 como
44 hotel
41 execute
40 server
38 elcano
37 mejor
34 facebook
33 lacoste
32 marcos
30 pagina
29 vangelis

Empresa 2. Top 25 de busqueda.

En el listado removí items por privacidad.

Algunas cosas para notar:

  • Este es otro cliente que se quejan siempre porque anda lento, y encima lo que mas buscan son Juegos? y Clarin!
  • Fotos de chicas desnudas?
  • Los sitios sexuales estan bloqueados.
  • Un colegio para los chicos?
  • Vacaciones

Strings

~# grep google.com /var/log/squid/access.log | perl search_strings.pl \
     | sort | uniq -c | sort -nr | head -n25
    133 juegos
    106 clarin
     95 balneario reta
     88 rivera indarte
     69 cintia ressel
     65 omnibus chile
     65 ley contrato laboral tiempo almuerzo argentina
     60 clarin edicion impresa
     57 cine devoto
     56 hotmail
     55 los viajes de gulliver cines
     55 cai informatica zarate
     49 manual de termostato honeywell t6570
     47 ana santini
     45 cursos de la uba
     43 village caballito
     43 magyar himnusz
     43 fotos de chicas desnudas
     42 colegio misericordia
     42 colegio de mendoza
     41 ruta 1000
     41 ley de contrato de trabajo   licencia por enfermedad
     41 kazdan
     41 casa
     38 manual de telescopio reflector

Tokens

~# grep google.com /var/log/squid/access.log | perl search_tokens.pl \
     | sort -nr | head -n25
409 colegio
274 argentina
243 contrato
239 trabajo
230 para
206 2011
202 juegos
186 clarin
162 hotel
161 manual
151 salon
149 mapa
149 banco
140 function
138 letra
131 between
129 performance
129 chile
126 buenos
125 viajes
114 escobar
114 capacity
113 motor
113 devoto
112 titulo

Script: search_strings.pl

# @logentry = ($datetime,$secs,$ip,$code,$bytes,$re,$url,$user,$hc,$type)

use URI::Escape;
$|=1;

$min_len = 4;

while (<STDIN>) {
        chomp;
        my @logentry = split /\s+/;
        my $url = $logentry[6];

        if ($url =~ /q=([^&]+)/) {
                $match = uri_unescape($1);
                $match =~ s/\+/ /g;
                $match =~ tr/A-Z/a-z/;
                $match =~ s/[^\w\s]/_/g;
                next if length($match) < $min_len;
        } else {
                next;
        }

        print "$match\n";
}

Script: search_tokens.pl

# @logentry = ($datetime,$secs,$ip,$code,$bytes,$re,$url,$user,$hc,$type)

use URI::Escape;
$|=1;

$min_len = 4;

while (<STDIN>) {
        chomp;
        my @logentry = split /\s+/;
        my $url = $logentry[6];

        if ($url =~ /q=([^&]+)/) {
                $match = uri_unescape($1);
                $match =~ s/\+/ /g;
                $match =~ tr/A-Z/a-z/;
                $match =~ s/[^\w\s]/_/g;

                while ($match =~ /(\w+)/g) {
                        $token = $1;
                        next if length($token) < $min_len;
                        $words{$token}++;
                }
        }
}

foreach $token (keys %words) {
        print "$words{$token} $token\n";
}

Como yapa, saben que me gusta el tema de visualización, asi que hice un script más modificando “search_tokens.pl” para solo listar los token (no sumarizar) y generar un txt. Primero algo simple y luego usando “tagxedo.com” genero una imagen de “cloud words”.

Click en las imagenes para ampliar.

Imagen: Empresa 1

Imagen: Empresa 2

Saludos

Comments 4 Comments »

Hola a todos, hace tiempo que no escribiamos en el blog. Aca les dejamos una funcion interesante del proxy server Squid.

Los usuarios de Squid sabran que por lo general y por default no se puede cachear videos de Youtube. Existen algunas razones, vamos a enumerar algunas:

  • El video viene de varios cache servers internos que usa Youtube (o Google) entonces la url cambia.
  • Si el video se cancela no baja entero.

Para evitar lo primero, a partir de la version 2.7 se incorpora una funcion “storeurl rewrite”, lo que permite separar (parseando) la URL que utiliza para buscar en su storage interno (backend – el cache en si mismo).

De esta manera podemos crear que multiples URL destino hagan referencia al mismo contenido del backend, asi evitamos duplicacion de contenido. Muy util para CDN.

Voy a poner un ejemplo simple: El sitio example.com tiene dos servidores web y me traen la misma imagen.gif, por default en Squid se almacena como dos imagenes diferentes, si haces un rewrite del store, podemos apuntar a la misma.

http://servidor1.example.com/image.gif

http://servidor2.example.com/image.gif

Podemos reescribir algo como: (sintaxis en Perl – mas info ver regex o me preguntan)

$url =~s!http://servidor\d+\.example\.com/(.*\.gif)!http://s-example.INTERNAL/$1!;

Expresion regular que tiene como funcion matchear servidor(numero) y cualquier nombre como gif, ese nombre se reemplaza en $1. Y se reescribe a un nombre de fantasia que invente yo.

Si mas o menos entienden, la idea es rescribir la url a una forma normalizada, tenemos que poner manos a  la obra para Youtube.

Cuando ejecutamos un video este se va a buscar a los caches internos que tienen, y la url tiene mas o menos esta forma: (llama a una funcion videoplayback)

http://v19.lscache7.c.youtube.com/videoplayback?ip=0.0.0.0&
sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor&fexp=904708%2C905208&
algorithm=throttle-factor&itag=34&ipbits=0&burst=40&sver=3&expire=1264122000&key=yt1&
signature=654F0FB48D631BF220381FED556AE9E905989E71.0D479B82F2C57401EDB9AEB24A41C4447DA35E47&
factor=1.25&id=3e9103da619d1f28&

De esos tags podemos desprender varias cosas, pero en este caso solo nos interesa algo que identifique univocamente al video, nos quedamos con el parametro “id”.

Hacemos un rewrite asi:

$url =~s!^http://.*?/videoplayback\?.*id=([^&]+).*!http://v-youtube.INTERNAL/ID=$1!;

Si lo probamos (copiando la url por STDIN, nos devuelve por STDOUT la reescritura.

# perl /etc/squid/store.pl

http://v19.lscache7.c.youtube.com/videoplayback?...&id=3e9103da619d1f28&

http://v-youtube.INTERNAL/ID=3e9103da619d1f28

Y asi.

Parametros a de configuracion a modificar del squid.conf

# aca configuramos el store rewrite
storeurl_rewrite_program /etc/squid/store.pl
acl store_rewrite_list urlpath_regex get_video\? videoplayback\? videodownload\?
storeurl_access allow store_rewrite_list
storeurl_access deny all
cache allow store_rewrite_list

acl QUERY2 urlpath_regex get_video\? videoplayback\? videodownload\?
cache allow QUERY2

# patrones para caching y que ignoremos los encabezados No-Cache
refresh_pattern get_video\? 10080 90% 999999 override-expire ignore-no-cache ignore-private
refresh_pattern videoplayback\? 10080 90% 999999 override-expire ignore-no-cache ignore-private
refresh_pattern videodownload\? 10080 90% 999999 override-expire ignore-no-cache ignore-private
# importante para los range y que baje todo el video, y un pequeño bug con el tamaño de la url
minimum_object_size 512 bytes
maximum_object_size_in_memory 32 KB
range_offset_limit -1
maximum_object_size 200 MB
quick_abort_min -1

Y ahora la magica pieza del store rewrite. :-D

#!/usr/bin/perl
$|=1;
while (<>) {
@X = split;
$url = $X[0];
$url =~s!^http://.*?/videoplayback\?.*id=([^&]+).*!http://v-youtube.INTERNAL/ID=$1!;
print "$url\n";
}

Solamente les dejo el ejercicio para “youtube usando videoplayback”, pero lo tengo para otros sitios de videos de Google, Metacafe, Dailymotion, Vimeo, Soapbox, BlipTV, Break, TV Uol (Brasil), y otros sitios de contenido XXX que no voy a poner aca porque Google me va a indexar y va a pensar mal de mi. Cualquier cosa me preguntan.

Miramos el access.log del squid y cuando acceso a un video (la segunda vez ya sale del cache):

1264093473.644  50428 172.22.0.153 TCP_HIT/200 9817978
GET http://v14.lscache8.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%
2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor&fexp=903707&
algorithm=throttle-factor&itag=5&ipbits=0&burst=40&sver=3&expire=1264118400&key=yt1&
signature=0913DFCF267D50241CBA4C84ECBB57450287AE31.262DB100A4F3960D2B66A26591F395D84FED2526&
factor=1.25&id=5a84b0718d025dea& - NONE/- video/x-flv

Hit, hit! :-D

Nos ahorramos cada vez que ven ese video 9MB al estar en el cache.

Saludos a todos

Comments 74 Comments »

Que es SnortViz?

Es un proyecto en el que estoy trabajando en el cual se visualizan alertas del IDS Snort. Hace tiempo que estoy investigando técnicas de Visualización de la Información.

Hoy en dia nos encontramos con grandes volúmenes de datos los cuales poseen valiosa información que nos estamos perdiendo a no poder filtrarla rápida y de manera ágil.

Por eso las técnicas de Visualización nos permiten representar una enorme cantidad de información de tal manera que el cerebro humano reconozca patrones que se destaquen del resto.

En este caso les voy a presentar un gráfico que realice con el software AfterGlow, el cual permite generar gráficos de nodos, conocidos como grafos o constelaciones. Para lo cual genere un par de scripts que minan la base de datos de IDS Snort buscando las ip origenes de los atacantes, luego parseando la salida busque los paises y los sistemas de autonomos asociados.

Los sistemas autonomos nos indican de que ISP (proveedor de internet) viene.

En el diagrama se representa los ataques detectados de 3 paises, los cuales representan un 80% del total, durante el mes de Agosto del 2008:

  • USA [US] (43%)
  • Argentina [AR] (38%)
  • China [CN] (10%)

Se muestra la relacion:

  • Pais (circulo gris) -> Sistemas Autonomos (cuadrado celeste) -> Direcciones IP Origen del Atacante (gama de colores).

Los colores de las IP estan dados por la cantidad de ataques que detallo a continuación:

  • 1 a 5: PaleGreen
  • 6 a 10: LawnGreen
  • 11 a 20: LimeGreen
  • 21 a 50: Orange
  • 1 a 100: OrangeRed
  • 101 o mas: Red

Se pueden desprender algunos patrones rapidamente:

  • Desde USA la mayoria de los ataques fueron efectuados desde del AS 36408, que corresponde al ISP: Panther Express
  • Desde Argentina el AS 16814 fue el que mas ataques genero, pertenece a IPLAN -NSS-, mi proveedor de Internet, seguramente máquinas “vecinas” con worms que buscan las clases y redes vecinas (mas proximas).
  • Desde China vemos pocos ASN, se nota que esta muy sectorizado, imagino que debido al rigido control que se realiza de Internet desde el gobierno chino. Habra pocos proveedores de Internet?

Los dejo con esto, mas adelante voy a agregar mas informacion y alguna explicacion mayor de como genere los graficos.

Pueden ver un poco mas en: SnortViz

Gráfico: (pueden ver el gráfico en el tamaño original AQUI)

Comments No Comments »

Hoy se me presento un problema, soy un usuario muy activo del SwitchProxy ya que estoy en varios lugares que requieren proxy y es una forma rápida de cambiarlo.

Al parecer la actualización del Firefox 2.0.0.14 es incompatible con el SwitchProxy 1.4.1

Revisando un poco la pagina del SwitchProxy no hay updates disponibles y al mirar los comentarios se puede ver que hay quejas ya que en la proxima version FF3 no hay compatibilidad.

Así que acá les propongo un tip para que se ejecute sin problemas, ya que por default deshabilita el plugin. al ser incompatible.

En la barra de URL, escriben: about:config y cambian app.update.incompatible.mode a 1

Listo! Esperemos que estos dias el Switch Proxy revise el codigo y verifique su compatibilidad por ahora parece funcionar sin problemas, pero no tuve tiempo para revisar el codigo en detalle.

Comments 2 Comments »

El siguiente post viene de una pregunta hecha en la lista “LUGAr-gral” de Linux Argentina sobre como remover el signature en las pagina de errores del Squid y aca esta mi respuesta:

Imagino que tenes un Debian Etch (Squid 2.6.5). Aca te dejo un patch que arme y algunas instrucciones para instalarlo. La idea es volver a tener un paquete de Debian con el patch para remover el signature del Squid.

Para el build del deb minimamente necesitas:

apt-get install build-essential dpkg-dev fakeroot debhelper po-debconf dpatch

Luego seguimos con los fuentes del Squid:

cd /usr/local/src
wget http://people.baicom.com/agramajo/patches/squid_2.6.5-not-signature.patch
apt-get source squid
cd squid-2.6.5/
patch -p1 < ../squid_2.6.5-not-signature
dpkg-buildpackage

El ultimo paso arma nuevamente el paquete del Squid, probablemente no tengas algunas librerias para generarlo, revisa la salida del dpkg-buildpackage.

Solo resta instalar el paquete:

cd ..
dpkg -i squid_2.6.5-6etch1_i386.deb

Si es la primera vez a instalar el Squid, faltaria el paquete common, pero no deberia ser tu caso.

dpkg -i squid-common_2.6.5-6etch1_all.deb

Existen varias formas de incorporar un patch a un paquete, por ejemplo con dpatch, pero bueno lo dejamos para otro momento! :-D

Comments No Comments »

El antivirus gratuito AVG (de Grisoft) sacó al mercado su nueva versión 8.0, incorporando varias mejoras, una de ellas es el LinkScanner que ellos llaman un escudo protector en las búsquedas en Internet.

Lo que realiza es inyectar código cuando estamos usando un buscador (google, msn, yahoo, etc) y marcar potenciales URL peligrosas con un tilde verde (sitio sin riesgo), signo de pregunta (no sabe), color rojo (peligroso), etc.

Como realmente me resulta molesto e invasivo lo que hace, decidí tratar de deshabilitarlo, lo cual deja hacerlo desde el panel central, pero el AVG siempre reporta que el componente esta inactivo y lo ve como un riesgo de seguridad. En versiones anteriores dejaba una opción para deshabilitar esta advertencia.

Una vez instalado o antes de instalarlo podemos remover el LinkScanner de una manera efectiva. Bajamos el paquete gratis al C:\ por ejemplo y ejecutamos:

c:\avg_free_stf_*.exe /REMOVE_FEATURE fea_AVG_SafeSurf /REMOVE_FEATURE fea_AVG_SafeSearch

Y listo el AVG, se reinstalara o instalara por primera vez según el caso, sin el LinkScanner! Seguramente sólo faltara actualizar la base del antivirus.

Para mas detalles (solo en ingles):

  1. http://free.grisoft.com/ww.faq.num-1241

Comments No Comments »

Windows Vista entre sus nuevas mejoras incluye “TCP/IP Auto-tuning”. esta función que en las anteriores versiones de Windows viene deshabilitada por default, en Vista se encuentra habilitada en modo normal.

TCP Auto-tuning en teoría cumple la función de optimizar las conexiones TCP/IP sobre la base de utilización de la Red con el fin de mejorar la tasa de transferencia de rendimiento. (Mayor información Links 1 y 2)

Si utilizan conexiones RDESKTOP, PUTTY o cualquier otra consola sabrán que esto no funciona de manera correcta y en lugar de mejorar nuestro rendimiento lo empeora notablemente, experimentando pérdidas de conexión con el equipo remoto constantemente. (Mayor información Link 3)

Para solucionar este inconveniente lo que hay que hacer es deshabilitar esta función de la siguiente manera:

  • Abrir una ventana cmd
  • Ejecutar el comando: netsh interface tcp set global autotuning=disabled 

Otra opción si no se quiere deshabilitar esta función es restringirla:

  • Abrir una ventana cmd
  • Ejecutar el comando: netsh interface tcp set global autotuning=restricted

Cualquiera de estas dos modificaciones solucionan el problema.

En el caso que se quiera volver atrás con el cambio lo que se debe hacer es:

  • Abrir una ventana cmd
  • Ejecutar el comando: netsh interface tcp set global autotuning=normal

Luego de ejecutar este comando el Vista volvera a su modo default.

Para chequear en que estado se encuentra esta función debe ejecutarse el siguiente comando:

  • Abrir una ventana cmd
  • Ejecutar el comando: netsh interface tcp show global

Recomendamos dejar el resto de los parámetros por “default” y no modificarlos.

 

Para más detalles técnicos pueden leer:

  1. http://blogs.msdn.com/wndp/archive/2006/05/05/winhec-blog-tcpip-2.aspx
  2. http://blogs.msdn.com/wndp/archive/2007/07/05/receive-window-auto-tuning-on-vista.aspx
  3. http://support.microsoft.com/kb/934430

Comments 4 Comments »