Wednesday, October 28, 2009

Ahorra dinero e incrementa tu seguridad.


Es posible esto ? Acaso me estoy transformando en Jorge Hane, el guru internacional de la perdida de peso ? Acaso estoy tomando los comprimidos y comencé a tener delirios místicos ?

No, nada de eso. Es que buscándole nuevas aplicaciones a SheevaPlug se me ocurrió en ver como optimizar el consumo de ancho de banda de los sitios que visito. De aquí surgió el combo AdZapper + NoScript.

Creo que todos conocen a NoScript, el Addon para Firefox que tiene entre otra virtudes la posibilidad de filtrar por medio de una Whitelist los sitios desde los cuales permitiremos la ejecución de JavaScripts.
Este pluggin además de protegernos, nos ayuda reduciendo el consumo de ancho de banda de sitios que se encuentran plagados de animaciones pesadas. Quedara en nuestra elección ejecutarlas o no.

AdZapper es un script que se ejecuta en Squid el proxy server Open Source y que permite filtrar por medio de una Blacklist, sitios que contengan publicidades o también podemos customizarlo para filtrar todo tipo de extensiones.
A diferencia de NoScript que es una herramienta local, AdZapper se ejecuta en un server, lo cual nos permite aplicar el filtrado para toda la red.


Existe otra herramienta que nos permitiría incrementar aun mas el filtrado, SquidGuard, pero es un tema que dejare para futuros posts. Por ahora reemplazaremos SquidGuard por medio del filtrado ofrecido por OpenDNS.

Como debería estar nuestra red configurada ?



Reglas en el firewall


Esto podemos leerlo de la siguiente manera :

Solo Squid tiene acceso a internet, con esto evitamos que alguna maquina intente conectarse directamente a internet o utilice un DNS diferentes a OpenDNS.
Si tienen acceso al mail por Imap y SMTP tendrán que abrir las reglas correspondientes en el Firewall.


Configuracion de Squid en SheevaPlug

Es muy sencillo, es solamente instalar el paquete y modificar un archivo.

#apt-get install squid

Luego de esto, modificamos el archivo de configuración squid.conf , el cual se encuentra en el directorio /etc/squid.

Squid es un software que puede configurarse con mucho detalle, en nuestro caso para una red hogareña solamente modificaremos algunas variables.

Los permisos de acceso se manejan por medio de Access Lists, entre las que podemos activar se encuentran :

--Restricción de acceso Web por horario
--Restricción de acceso/denegación de sitios por URL
--Restricción de acceso por IP
--Restricción de acceso por Usuario/Password

Nosotros para no complicarle la vida a nuestra familia, solo filtraremos por IP.

En la siguiente entrada agregaremos la red correspondiente a nuestra LAN y comentaremos las otras entradas con redes.

acl localnet src xxx.xxx.xxx.xxx/xx


Squid realiza el almacenamiento de las paginas visitadas en un cache.Dado que no contamos con demasiado espacio vamos a utilizar las opciones de cache por default ( El tamaño se puede ampliar incorporando una tarjeta SD al dispositivo )

cache_dir ufs /var/squid/cache 100 16 256

Esto es, un cache de 100MB en 16 directorios conteniendo cada uno hasta 256 directorios.

La siguiente linea contiene el usuario anónimo que se utilizara para conectarse a los ftp servers por parte de los usuarios.

ftp_user anonymous@d3ny4ll.com


Con esto el proxy server esta listo para trabajar con el programa AdZapper.


Instalación de Adzapper

Afortunadamente, Ubuntu por ser una rama de Debian, trae un paquete de Adzapper, por lo tanto la instalación es trivial.

apt-get install adzapper


Ahora solo resta modificar un par de archivos, pero antes vamos a ver como trabaja Adzapper.

Dado que contamos con un proxy que se interpone entre el sitio web y el usuario, podemos capturar el trafico y eliminar lo que consideramos superfluo.

Adzapper es un script en perl, que cuenta con una base de datos de sitios que es comparada al momento del proxy hacer el pedido de la pagina u el objeto. Si una comparación es positiva, entonces se cambia el objeto, por una imagen que se encuentra en un webserver. ( Este webserver puede residir en el mismo equipo que squid o no ).

Lo anterior , resumido en una imagen.





Una vez instalado el paquete, lo primero que debemos hacer es configurar Squid para que "llame" al script en cada consulta.

Al archivo de configuracion /etc/squid/squid.conf le agregamos la siguiente linea :

---
# TAG: redirect_program
# Specify the location of the executable for the URL redirector.
# Since they can perform almost any function there isn't one included.
# See the Release-Notes for information on how to write one.
# By default, a redirector is not used.
#
redirect_program /usr/bin/adzapper.wrapper

Luego de esto, vamos a realizar una actualización del script /usr/bin/adzapper que contiene las listas de filtrado. En Debian se realiza ejecutando el script :

/usr/share/doc/adzapper/examples/update-zapper

Atención, que este script "pisara" el script con las modificaciones que hallamos realizado.

Luego de actualizado, vamos a modificar el script agregando los patrones de bloqueo que nos interesa.

Tomemos como ejemplo el sitio del diario El cronista comercial, asi se ve si no utilizamos NoScript y sin Adzapper :


Tamaño descargado : 1.55MB


Tamaño descargado : 1.02MB

En la ultima imagen pueden ver el reemplazo de los scripts/imagenes por la palabra "this ad zapped"

Para esta pagina reducimos el consumo de ancho de banda en mas de un 30%


Configuracion de los clientes :

Luego de agregar el Addon NoScript, debemos modificar las opciones de firefox para habilitar el proxy.
Los clientes tendran configurados en las opciones de networking de firefox la IP de Squid y el puerto en el cual se encontrara escuchando :

Herramientas --> Opciones ---> Redes --> Configuración



Tunning y datos finales


Firefox posee un Addon llamado Firebug, que nos permite monitorear el comportamiento del código de un sitio. Entre las herramientas que cuenta, una de ellas muestra el tiempo que tarda cada objeto descargado y el tamaño.

Veamos el caso del diario online "El cronista comercial" :

Como vemos, los accesos a sitios de publicidad agregan overhead al tiempo de descarga de las paginas.

E-planning.net es un sitio de publicidad, muy difundido en la mayoría de los diarios online. Bloqueando este sitio, es posible reducir el tamaño y los tiempo de carga de un site.

Por lo tanto debemos modificar el archivo /usr/bin/adzapper, el cual al final contiene las listas de sitios a permitir o denegar.

Existen diferentes "clases", las cuales el script las filtrara o no.

AD,ADHTML,ADJS,ADSWF,ADPOPUP,ADMP3,COUNTER y WEBBUG filtraran la expresion que coloquemos delante de ellas.

PASS ignora el site.

En nuestro caso :

AD http://*.e-planning.net/**

Filtrara todo lo que provenga de este sitio.

El resultado se ve en la siguiente imagen :


Como vemos, desaparecieron las referencias al sitio.

NoScript es sumamente efectivo al momento de filtra contenido, el inconveniente que tiene es que si tenemos máquinas que no soporten Firefox ( se me ocurren equipos móviles como, Ipod's o teléfonos ) o para el usuario sea engorroso utilizarlo, entonces contar con Squid+Adzapper es una capa mas de protección.

Realice tests sobre los diarios mas visitados de Argentina y un par de EEUU, este fue el resultado para el tamaño de pagina principal descargado en MB.

Como vemos, NoScript es suficiente para bajar el consumo a casi la mitad

El gráfico siguiente muestra los tiempos de descarga en Segundos :

La diferencia es notable.

Por supuesto que no puedo asegurar que estos valores se repiten para cada pagina, pero si existe esta tendencia.


Por lo tanto sumando el filtrado adicional por medio de OpenDNS, como vimos en este post, mas la utilización de los usuarios de esa herramienta llamada "Sentido Comun" vamos a poder ahorrar dinero e incrementar la seguridad.

6 comments:

Guillermo said...

Excelente post y trabajo sobre como mejorar el ancho de banda de una empresa.

Me hiciste acordar a Jorge Hané, el gurú que llamaba a modelos superflacos para sus publicidades, jaja.

Nikitux said...

Hola Julio , justo estoy con el tema Squid así que quisiera hacer un aporte a ver si sirve.En realidad está entre sugerencias y consultas a ver que es más conveniente. Yo tengo puesto en el mismo Squid una acl
acl sitiosnegados url_regex "/etc/squid/sitiosnegados"
dentro de ese archivo contiene por ahora
http://ads.*
Eso da en los logs de Squid TCP_DENIED/403 bloqueando ese contenido ahorrando tb ancho de banda también.
La otra cosa para anexar seguridad no conviene poner Dansguardian con Clamav para escanear contenidos peligrosos?
Y todo esto haciendo transparente el proxy con lo cual ahorramos configuración y tampoco importa que no tengamos Firefox como navegador.

Como un aporte más para ver los logs de Squid tengo echo este alias

alias Squidlog='tail -f /var/log/squid/access.log | ccze '

donde ccze colorea la salida de tail y queda lindo y un poco más entendible.

Saludos Nico

Julio Jaime said...

Nico por supuesto que utilizarlo como proxy transparente seria lo ideal, inclusive colocando las otras herramientas que sugerís.

Muy bueno lo de colocar ccze, realmente no lo conocía.

Saludos

Nikitux said...

Hola Julio , me alegro que te haya servido ccze , y como sugerencia estaría muy bueno profundizar sobre el tema proxy con sus posibles herramientas (antivirus , blacklist, bloqueos etc), aumentando aun más la segudidad de navegación y también mejorando la parte de ancho de banda mediante las delay pools.
Creo que mediante una buena implementación de proxy con restricciones podemos tener controlados los empleados de una empresa y como dice el titulo incrementar la seguridad y ahorrar plata!
Saludos Nico

PD= Lo de profundizar una sugerencia me imagino que estarás a full con tu trabajo. Si puedo dar una mano avisame por mail

Andrés said...

Hola, es posible tener una red inalambrica a la cual se puedan conectar los clientes sin necesidad de configurar sus navegadores ni la puerta de enlace en los laptops para que puedan acceder a internet a través de un proxy transparente?

Julio Jaime said...

Si es posible, la red inalámbrica es solo el medio de conexion.

Sin analizar esto demasiado, me imagino que configurando el proxy transparente como bridge, se lograría que los clientes accedan a internet sin necesidad de configurar sus navegadores.

Asi, es como tienen los hoteles configura el acceso a Internet para sus clientes.