Throttling Apache

Hace un par de días, Andrea publicó unos videos de su colección de Plan Z para compartirlos con unos amigos de la Universidad que eran tan fanáticos como ella de Peirano y compañía. Pues como era de esperarse en este mundo global aparecieron «amigos» por todas partes luego de ser publicada su dirección en los foros de «El Antro».

Esto provocó de inmediato un «efecto antro» (efecto slashdot, pero con download accelerator debajo del brazo) en que las malas costumbres de algunos comenzaron a afectar el buen cumplimiento de apache.

La primera solución fué aplicar traffic shaping con el siempre a mano Wondershaper. De forma fácil pude bajar el uso de ancho de banda de salida restringiendolo a solo un par de megas. Pero esto no soluciona el problema de las malas costumbres de los aceleradores de descargas, quienes realizan decenas de conexiones por cliente.

Como ya me esperaba que mas de alguno con malas costumbres accediera al sitio, había preparado la exlusión de algunos Referers y User Agents de forma de disminuir el trafico excesivo y brutal. Algo bastante simple en un htaccess puede hacer el trabajo, por ejemplo:


<ifmodule mod_rewrite.c>
RewriteCond %{HTTP_USER_AGENT} ^Wget.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^DA.* [NC]
RewriteRule ^.*$ - [F,L]
</ifmodule>

Y Wget y Download Accelerator recibirán un error 403 Forbidden. Similar lógica se puede usar con otras variables como HTTP_REFERER. Obviamente estas variables se pueden falsificar. Fácilmente con un par de clicks un GetRight o DA puede hacerse pasar por IE o Mozilla disfrazando su user-agent como “Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)” entre otros, por lo que no es una solución definitiva.

Pero como la gracia es compartir los videos y no restringir su bajada a todo el mundo poniendose idiota, la mejor solucion sería restringir equitativamente el uso de los recursos. Allí comencé a buscar en mis bookmarks sobre soluciones de manejo de throttling y bandwidth en apache y me tope con dos posibles.

Una posible solución es mod_bwshare, que posee una configuración de throttling por shaping estadístico por cliente. El problema es que debes tener muy bien planeado las tasas de transferencia y servicio de archivo por tiempo determinado, y como no sabía hasta que punto iba a llegar esto, al rato ya estaba denegando el 30% del tráfico.

Otra solución que tenía en mis archivos era bw_mod, un excelente software de Iván Barrera. Con él puedes controlar el ancho de banda consumido por cliente, red y total, además de controlar el número de conexiones por cliente. Con una lógica algo parecida a los delay pools de Squid cache es bastante fácil y rápido de implementar.

Esta era la solución que estaba buscando para esta situación particular. Controlar un pool de ancho de banda de subida, de forma de conservar banda para el resto de los servicios y por otra parte asegurar una de subida estable por cliente, agregando a ésta la posibilidad de restringir la cantidad de conexiones hechas por cada cliente causadas por los malditos y poco polite aceleradores de descargas. Si un cliente se conecta mas veces de lo permitido, recibirá un lindo error 503 (o el que se decida personalizar). Totalmente recomendado y kudos para Iván Barrera.

Y por supuesto para los siempre impacientes que no comprenden las indirectas, iptables -j DROP los espera al final del pasillo.

Videos Socráticos

Cristian hace días que deseaba publicar algunos videos educacionales en su sitio web. Hoy ambos tuvimos el tiempo de hacerlos.


Videos Socráticos.

Comenzamos a grabar unos cuantos videos instructivos sobre algunas secciones de guitarras interesantes, como Holly Wars (en nombre que Marty Friedman estará mañana en Concepción) y un tema de Ritchie Kotzen. Que manera de volar esos dedos!.

Cuándo grabamos Colorado Bulldog?.

Update : Algunos videos estan disponibles. Se encuentran en dos versiones cada uno (640×480 y 320×240) en mpeg4 (DivX5). El tema de Ritchie Kotzen es mi favorito.

* Si tienes problemas para ver el video (en windows), necesitas los codecs para DivX5 o Ffdshow. En linux, gracias san mencoder.

IPv6

Es hora de avanzar con las nuevas tecnologías. Aprovechando de que Leo estuvo trabajando ultimamente con IPv6, Basilio y yo nos montamos a la rueda y nos tentamos con el uso de IPv6 en nuestros respectivos tarros. El primer paso fue comprender un tantico de que se trata este IPng y en que estado esta. Luego el paso importante de lograr conectarse al 6bone. Esto lo hicimos en una primera instancia gracias a Freenet6, que dice llamarse “la forma mas fácil de conectarse a 6bone”.

Y en realidad lo es. En Debian GNU/Linux es tan fácil como ir al sitio web de Freenet6 y crearse una cuenta de usuario. Esto te creara una cuenta para establecer un tunel con Freenet6 a traves de su cliente tspc (disponible su download en el sitio) o como ya te lo habras imaginado, apt-get install freenet6. Luego no tienes mas que editar el archivo /etc/freenet6/tspc.conf con el username que suscribiste en el sitio y el password que te ha sido eviado al correo con el cual registraste la cuenta. Dale un /etc/init.d/freenet6 start y taran!, el cliente establecera el tunel y las rutas necesarias para que estes listo para navegar por inernet a traves de tu tunel con el 6bone.

Puedes probar tu conexión nuevecita de paquete con sitios ipv6-only como http://www.ipv6.bieringer.de/.

Haz la prueba, es tan fácil como 1-2-3.

Luego hicimos algunas pruebas mas interesantes como asignarnos un segmento /48 y hacer trabajar de router a un servidor, conectarse a dos proveedores, uno via Freenet6 y el otro via Hurricane Electric y establecer las tablas de rutas para ello y sobrevivir en el intento. No hay dolor!.

En la siguiente entrada tal vez explique nuestra nueva conexion via Hurricane Electric. en ciencia, es lo mismo, con la diferencia de tener un segmento 2001::.