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.

Apache2: No space left on device?

Desde hace algun tiempo el servidor web en donde mantengo mi sitio entre otros, ha tenido comportamientos algo erraticos y luego de algunos días a pesar de los procesos estar arriba, simplemente no responde. La única solución era matar los procesos (que a pesar de no ser zombies, no respondian ni siquiera a apache2ctl) y volver a iniciar el servicio.

Mi primer sospechoso fue el wiki de Gnome, basado en Moinmoin. Hay algunos reportes de bugs con versiones específicas de Python. Hice algunos cambios y por varios días todo pareció correr de maravillas. Hasta hoy.

Hoy una vez mas el servidor dejo de responder. Esta vez, si dejó algo más interesante en los logs. «No space left on device». ¿Que no queda espacio?, pues si hay de sobra!.

Búsqueda rápida en google y me topé con algo de información: semáforos ipc. Pues bien, una vez eliminados todos los procesos de apache, una revisión de semaforos dejados atrás, me da una linda e irregular suma de 121. He ahi la posible razon?. Manos a la obra con ipcrm sem y eliminar aquellos semáforos dejados por apache, nuevo inicio a los servicios y ta tan!, todo funciona ok. Detengo apache y los semaforos también se van con él, como debe ser.

Lindo parche para la herida, pero qué es lo que esta provocando esos feos leaks?.

Aventuras noticiosas

Salí al medio día de casa para almorzar con Moni y mientras pasaba por la plaza de armas, un gentío y algunos gritos y aplausos.

Me acerqué para ver de que se trataba y sin darme cuenta sobrepasé la barrera de contención que había dispuesto Carabineros. Me mezclé entre los periodistas y asi pude darme un paseo en el sector vedado para civiles en ese momento, entre una larga hilera de Carabineros apostados frente a la Intendencia regional y la barrera de contención en la vereda del frente.


Carabineros frente a la Intendencia.

Ya con mejor vista del movimiento me percaté que se trataba de una protesta estudiantil (o «movimiento» como prefieren decirles) organizado por mil y una organizaciones, centros, «cordones» (que están muy de moda) y otros a la cual asistieron los mismos de siempre, frente a las propuestas de ley que les desfavorecerían (privatizaciones de deudas entre ellas).


Los bochincheros Sociólogos (eché de menos a SpaZz entre medio).

Más tarde y luego de almorzar con Moni, junto a Andrés decidimos dar un paseo por la Universidad de Concepción, olvidando por completo que era «día crítico».

Llegamos al Campus y lo primero extraño, una muchedumbre en el Foro y tres ruidosos en una batucada. Seguimos adelante y entremedio de ramas y hojas a lo lejos veo un grupo de Carabineros correteando estudiantes por el frente de la Biblioteca Central. Decidimos seguir, pero esta vez por el medio del césped central, mala idea.

A medida que nos acercábamos a la Biblioteca comenzaron a picarnos los ojos, por lo que decidimos atravesar por una sección pavimentada del césped, otra mala idea. El dolor de ojos se hizo insoportable y a eso le sumamos una picazón en la nariz y dolor de garganta. Habíamos atravesado por encima de donde cayeron las primeras bombas lacrimógenas. Al cabo de cinco minutos ambos llorábamos desconsoladamente y nos sonábamos la mucosa nariz junto al edificio Virginio Gómez.


Lacrimógenas frente a la Biblioteca Central.

Nos quedamos para ver hasta dónde llega la incivilización humana, no sin antes tomar unas cuantas fotografías de la acción.