Problemas al reproducir Ogg bajo Apache con ModSecurity desde Chrome y Chromium

HTML 5 y sus nuevos tags de <audio> y <video> terminaron desencadenando anoche, una batalla campal con mis neuronas.

A raíz de querer incorporar audio OGG en una de mis Webs, descubrí que si el audio estaba alojado en mi servidor, no se reproducía. En cambio, si modificaba la ruta del archivo de audio colocando una URI externa, el audio se reproducía sin problemas.

De allí en más, comencé a investigar si era necesario que el servidor tuviese algún requisito/configuración/cuidado/whatever para permitir la reproducción de audio. Hasta incluso, pedí ayuda por Twitter con la esperanza de que a alguien se le prendiese la lamparita y muchísimas personas colaboraron. Sin embargo, cuando hallé la respuesta final, me di cuenta que era mucho más compleja de lo que me esperaba.

El problema

  • Intentando acceder a la URL del archivo de audio, éste era loclizado y sin embargo no se podía acceder a él.
  • Con wget el archivo bajaba sin inconvenientes;
  • Con los navegadores Firefox, Chrome y Chromium (desde Ubuntu GNU/Linux) podía reproducir audio en el mismo formato sin inconvenientes, siempre y cuando estos archivos NO se encontrasen en mi servidor.

Contexto

Se trataba de un servidor Ubuntu 12.04, con Apache 2.2 y… ModSecurity instalado con el paquete de reglas de OWASP. Mi mayor sospecha estaba sobre estas últimas. Ya habíamos hablado la noche anterior con Dabo, sobre los falsos positivos de ModSecurity.

El camino hacia la solución

A través de Twitter, @mjimeneznet me explicaba que con solo los tags debería funcionar y que el server no necesitaba nada más. Lo mismo sobre los tags, mencionaba todo el mundo! Pero esto iba más allá de HTML 5. Había algo en el servidor, eso era seguro.

Y así fue que a @elrevo, @daviddfr, @hernanJ y @f_rojas se les ocurrió que podría ser necesario indicar los tipos MIME en Apache, ya sea a través de Virtual Host, en apache2.conf directamente o en .htaccess.

Tras agregar al VirtualHost un AddType con el formato ogg, probé y solo en Firefox, parecía haberse resuelto el problema. Sin embargo, en Chrome y Chromium aún seguía el fallo.

En eso apareció @MatiasKatz con quien desde Google Talk, estuvimos haciendo varias pruebas. Hasta que se me ocurrió mirar los logs de error de Apache. Hice un tail -f a los logs, y allí estaban “esperándome” esos “malditos”:

Este error se replicaba decenas de veces. Resaltado en negritas vemos:

  1. ModSecurity negaba el acceso con un error 403;
  2. La causa era el archivo de reglas crs_20 sobre violaciones de protocolo;
  3. La regla específica era la indicada en la línea 248 (vale aclarar que muchas veces, se edita la regla en cuestión y es otra la que prohíbe el acceso así que esto era para ser tomado con pinzas)
  4. La severidad del supuesto ataque evitado, era a penas un aviso (notice)
  5. Finalmente, la URI, era la de mi famoso archivo de audio Fenster.ogg

La parte más desagradable era que ninguna de las URL logueadas, era accesible, así que en principio, no tenía explicación ni justificación para esa regla.

Lo primero que hice para verificar si era o no ModSecurity quien me estaba jodiendo, fue mover el archivo a un directorio de pruebas a fin de eliminarlo de su origen pero mantenerlo en copia de resguardo. Reinicié Apache y el problema desapareció. Finalmente, solo comenté la regla en cuestión y volví a reiniciar Apache.

La solución

En el archivo de reglas modsecurity_crs_20_protocol_violations.conf comentar la regla de línea 248:

Reiniciar Apache y ¡problema resuelto!

La explicación a todo

Erradicar un error pero no encontrarle la explicación lógica es como estar co….

(por si no se entendió mi metáfora: lo anterior fue un ejemplo de algo que te deja con una sensación de discontinuidad y por consiguiente, de algo inconcluso xD)

Así que para no quedarme con esa asquerosa sensación, a pesar de haber resuelto el problema, seguí analizando lo sucedido hasta hallar respuestas y el tema es así:

  • En el archivo de reglas de OWASP, las líneas previas a la regla que se comentó, explicaban de manera abreviada, que la misma era en cumplimiento con lo establecido en las definiciones RFC 2616 (correspondiente a la definición de estándares del protocolo HTTP 1.1);
  • Los estándares HTTP están publicados nada más ni nada menos que por la W3C;
  • En dicha RFC, la sección 14.35.1 se refiere a los rangos de bytes que el cliente (navegador en este caso) envía en los campos de cabecera al servidor (a.k.a “headers” para los amigos). Es decir que la sección 14.35.1 de las RFC 2616 son las que definen los estándares para los rangos de bytes enviados por el cliente al servidor a través de las cabeceras HTTP;
  • Estas especificaciones, dicen claramente que: “si un rango de bytes sintácticamente válido, cuyo primer byte del rango sea menor a la longitud total del elemento a ser servido, o por lo menos, el sufijo del intervalo es distinto que cero, entonces la solicitud puede ser satisfecha por el servidor, pero de lo contrario, el servidor debe rechazar la petición;

Si volvemos a darle un vistazo al error que ModSecurity grabó en los logs, veremos esto:

El valor recibido indicaba un rango inválido en el cual, faltaba el sufijo del rango:

bytes=0-???

Recordemos que ese error, se producía al intentar acceder desde Google Chrome o desde su fork libre Chromium, al archivo de audio ogg. Es decir, que tanto Google Chrome como Chromium, envían como valor de rango de bytes en los encabezados HTTP, un rango inválido (sin sufijo). Dicha solicitud VIOLA LOS ESTÁNDARES DE LAS RFC 2616.

Vale aclarar que:

  1. A raíz de esto, revisando los logs, me di cuenta que el reclamo realizado por muchos usuarios que eran rechazados al intentar descargar un PDF desde dispositivos con Android, también era a causa de este problema. Vale decir que Android tampoco cumple con dichos estándares.
  2. A pesar de haberme enojado con MpdSecurity, no se puede responsabilizar del bloqueo a las reglas de OWASP ni mucho menos a ModSecurity, puesto que es el Software de Google quien al incumplir con dichos estándares provoca que sus aplicaciones actúen de forma similar a como lo haría una herramienta pensada para el ataque.

Lamentablemente, por la irresponsabilidad de Google, la única solución (que en realidad sería utilizar Mozilla Firefox), fue comentar la regla mencionada.

Happy Hacking, Fuckin’ Google!

Dedicado con todo googlelove a mi compañero Debish 😛

 

Ubuntu, Apache, VirtualHost, 403 Forbiden y la putaqueloparió

Hace unos meses ya, desde que a un alumno se le ocurrió instalar Ubuntu 13.04, que vengo padeciendo del Síndrome del “pero qué mierda le pasa a esto, carajo!”.

Los pongo en contexto:

Ubuntu 13.04. Se crea un nuevo Virtual Host y al intentar acceder, Apache retorna el error 403 Forbiden.

Si uno ve un error 403 Forbiden, lo primero que piensa es lo obvio: problema de permisos. Pero los permisos pueden tener a la vez, “cientocincuentamillonesdeorígenes“.

En resumidas cuentas, para solventar el problema en su momento, se probaron no una, tampoco 2 ni 10 formas diferentes sino decenas de soluciones posibles y ninguna de ellas lo solucionaba.

Y ¿qué cambió ahora? El martes pasado, estábamos en clase de PHP con mi alumno Marcelo Lobato, quien harto de no poder solucionar el error en Ubuntu 13.04 decidió pasar al más querido estable 12.04 LTS. Estábamos creando nuevamente un Virtual Host, cuando para mi sorpresa, Apache volvió a arrojar un 403 Forbiden y mi grito de “Oh, pero qué mierda le pasa a esto, carajo!” se hizo evidente.

Puteada va, prueba viene, a Marcelo se le ocurrió la brillante idea de decir: – “¿No tendrá algo que ver que al momento de instalar Ubuntu yo haya elegido cifrar mi carpeta personal?”

¡Me cago en la puta! ¿Cómo pude no tener en cuenta que las carpetas personales podrían estar cifradas?!?! Si la carpeta está cifrada, el usuario de Apache, es decir, www-data, no tendría acceso a ella. Y, hablando con uno y otro, ¿podría ser que Ubuntu 13.04 más allá de la elección del usuario estuviese cifrando la carpeta personal por defecto? Sí, podría ser, pero aún falta laboratorio para dar una respuesta certera.

Por lo pronto, aquí les dejo la solución al problema.

Lo primero que hay que hacer, es cerciorarse de que el problema, realmente se debe al impedimento del usuario de Apache, de acceder a la carpeta raíz del dominio. Para comprobar esto, la forma fácil y rápida es editar el archivo de configuración de Apache, indicando como usuario y grupo al usuario y grupo propietarios de la carpeta en cuestión.

Supongamos que el DocumentRoot de tu Virtual Host es /home/pepe/miweb y que el propietario del directorio miweb es pepe:pepe. Como súper usuario, editas el archivo /etc/apache2/apache2.conf y buscas las siguientes líneas:

Y las reemplazas por el usuario y grupo propietarios de la carpeta en cuestión, respectivamente:

Reinicias Apache:

sudo service apache2 restart

Y pruebas nuevamente ingresar en tu host virtual. Si logras acceder SIN un 403 Forbiden, el problema, efectivamente, se debe al impedimento del usuario de Apache, de acceder a la carpeta raíz del dominio.

¿Cuál sería la solución entonces? Obviamente, volver las variables User y Group del apache2.conf a su estado original y luego, crear una carpeta FUERA de la carpeta cifrada, pero con el mismo propietario para no estar trabajando allí dentro ni como root ni cosas locas. Una buena alternativa es esta:

Y no olvidar de asignar como ruta del DocumentRoot del VirtualHost, el nuevo path /srv/miweb.

Ahora sí, Happy Hacking!

 

DaboBlog Podcast, número 33. “Kernel Panic” ya disponible (con Forat)

Amigos de DebianHackers, aquí volvemos con la entrega nº 33 del podcast. En esta ocasión le ha tocado a Forat (en el próximo estará n1mh) y como se puede ver debajo en el guión, hay alguna historia “para no dormir”. Tenemos pendiente un especial Fluxbox y Debian que grabaré con Debish espero que pronto (de hecho ya lo grabamos en su día pero nos quedó un “churro” de audio y hay que repetir). Sin más, os dejo con todos los datos del audio. Un saludo y gracias por el apoyo que nos llega por vuestra parte ;).

Al igual que en otras ocasiones, os animamos a dejar cualquier sugerencia sobre temas a tratar en sucesivas entregas del podcast, podéis hacerlo aquí o en nuestros Twitters; @antoniojperez, @daboblog, @foratinfo, @lurphoto, @n1mh,@oreixa donde los días de grabación, solemos anunciar cuando empezamos a grabar para que dejéis vuestras propuestas, comentarios o temas que os gustaría que tocásemos, pero también podéis hacerlas llegar en esta misma entrada.

Contenidos incluidos; (Duración 2,23 h)

> Intro (00:00 hasta el minuto 03:44)

(Por David Hernández, Dabo) Presentación y comentarios sobre este episodio 33.

> Kernel Panic (Minuto 03:45 hasta el 1:16 h)

En Twitter; DaboForat  (Diego aka n1mh estará en el próximo).

Alguno se quedará un tanto K.O cuando escuche a Forat y lo que le pasó con un Vaio y unos ¿drivers? para Windows 7. Hablamos también de las nuevas mejoras que vamos viendo en el Kernel, lógicamente Ubuntu 11.04 tiene un gran protagonismo (hablamos de las novedades y de cambios futuros) damos un repaso a su proyecto “Viejos ordenadores que hacen grandes cosas” (muy bien explicado),  Servers, Software libre en la empresa (o “la falta de”), seguimos con Unity – GNOME, aplicaciones, Distros “diferentes” y otras habituales recién salidas del horno, opinión, (IN) seguridad en DropBox, etc.

El equipo del podcast

DaboBlog Podcast nº33, “Kernel Panic” y “Manzanas traigo”.

Ficha completa en ivoox.com del episodio 33.

Baja >el audio. Escuchar o descargar. (Navegador, lector de feeds o móvil sin Flash)

Suscríbete  En GPodder | iTunes ico.itunes | iGoogle ico.igoogle | tu lector de RSS ico.rss

¿No ves el reproductor integrado vía tu lector de RSS?, entra con tu navegador

Nos volvemos a escuchar en el número 34 del podcast (Fecha “Primeros de Diciembre “).

Tenéis también todos los episodios desde el primero en esta nueva sección del blog y en este link de ivoox.com.

> Manzanas Traigo ( 1:16 h hasta 2:23 h)

 

Publicado Podcast Daboblog número 25

Daboblog ya tiene un nuevo podcast, el número 25. Ha salido con un retraso considerable, veinticuatro días, pero ha salido, que sigue siendo el objetivo.

Como bien comenta dabo, es un episodio especial, debido a varios acontecimientos que han ocurrido en estos días y que, en parte, han motivado el retraso.

Podéis escuchar o bajar el podcast aquí debajo o ir a la página de ivoox.com para más información.

 

Publicado DaboBlog Podcast número 23

Ya se ha publicado el podcast número 23 de daboblog y vuelve a lo grande, con casi dos horas de duración. En esta ocasión, Kernel Panic corre a cargo de Forat, donde habla de Ubuntu 10.10. En Manzanas traigo, como viene siendo habitual, estrenan un nuevo becario y comentan los últimos lanzamientos de la empresa de Cupertino.

Para una información más detallada, podéis leer la entrada DaboBlog Podcast, número 23. Kernel Panic y Manzanas Traigo, en daboblog o acceder a la ficha del podcast en ivoox.

 

Forat da un interesante repaso a Rhythmbox. Algo más que un reproductor de audio

Si hablamos de Forat, estamos hablando del 33 % “no oficial” de DebianHackers pero sí “oficioso”. Siguiendo con el tema de las cercanías, en este caso entre Debian y Ubuntu, su post, en el que habla de Rhythmbox dentro de Ubuntu 10.10 (su review), nos sirve perfectamente para los usuarios de Debian y otras distros.

Como muchos sabéis, es un excelente reproductor de audio para GNU/Linux, pero también se le pueden dar muchos más usos que gestionar una simple lista de reproducción de audio.

Para conocer a fondo Rhythmbox, os recomendamos la lectura de su post en forat.info

 

[truco] averiguando a qué distribución te enfrentas

Es bastante común, cuando uno se pelea con servidores de todo tipo y condición, que tengas que averiguar la distribución que corre en una determinada máquina de la que no sabía nada.

Trasteando con alsaconf, me ha llamado la atención un fragmento del código encargado, precisamente, de saber a qué distribución se enfrenta.

Básicamente, debe haber un fichero bajo /etc que nos facilite dicha información. El cuadro resumen, según el código de alsaconf, sería éste:

  • /etc/SuSE-release o /etc/UnitedLinux-release — distribución SuSE.
  • /etc/gentoo-release — distribución Gentoo.
  • /etc/debian_version — distribución Debian GNU/Linux.
  • /etc/mandrake-release — distribución Mandrake.
  • /etc/redhat-release — distribución Red Hat.
  • /etc/fedora-release — distribución Fedora.
  • /etc/ubuntu-release o /etc/debian-version con el contenido squeeze/sid — distribución Ubuntu (gracias Anónimo).

Tengo que comentar que la lista original no dice nada de Ubuntu, nuestra segunda distribución favorita, así que la última entrada la he añadido tras una pequeña búsqueda en el oráculo que todo lo sabe.

 

Programa: gnome-connection-manager para establecer múltiples conexiones ssh

Hace ya una semana convertí a un compañero del trabajo en un ferviente usuario de Ubuntu. Se trata, además, de un administrador de sistemas SAP que ha desarrollado toda su carrera en entornos Windows, por lo que la hazaña vale doble :D. Esperemos que le dure…

De la lista de compatibilidades y recelos que tuvimos que vencer (openoffice en lugar de office; pidgin en vez de gtalk; firefox en lugar de chromium; y un largo etcétera de aplicaciones de escritorio), el programa más difícil de sustituir fue, paradójicamente, el cliente SSH. En su vida anterior empleaba uno que le permitía establecer agrupaciones entre las conexiones guardadas para, por ejemplo, diferenciar con un golpe de vista el cometido del servidor. Mi sugerencia de emplear gnome-console con diferentes perfiles no cuajó, por lo que tuve que buscar alternativas.

Gnome Connection Manager - general

Gnome Connection Manager - general

Y apareció gnome-connection-manager, con sus múltiples pestañas, sus divisiones verticales y horizontales y… ¡su agrupación de conexiones! Se pueden crear tantas como sean necesarias (aviso: más de treinta agrupaciones, marean) y meter en ellas tantos hosts como se quiera. Eso sí, los grupos los ordena alfanuméricamente, de ahí el viejo truco de empezar los nombre con números.

El programa, gnome connection manager, está pensado para ser usado con Gnome pero debería funcionar en el resto de gestores de escritorio sin problemas y con las librerías adecuadas. Aunque a mi compañero le haya parecido el mejor invento tras el microondas, sobre todo tras descubrir que podía enviar órdenes a todas las máquinas que quisiera, al mismo tiempo y desde un único botón (Cluster, en la parte superior derecha), a mí me levanta ciertas inquietudes.

Gnome Connection Manager - agregar

Gnome Connection Manager - agregar

Será mi lado más paranoico o mis años como sysadmin (¡feliz Sysadmin day!, BTW) viendo pasar todo tipo de contraseñas débiles, sencillas y obvias pero, mientras no cambien un par de cosas, no voy a utilizarlo. El motivo es sencillo: si quieres acceder a un servidor en un sólo clic, tienes que almacenar la contraseña en la aplicación y lo hace con un cifrado muy simple. Y como tampoco acepta llaves SSH, al menos de momento, creo que voy a esperar a nuevas versiones.

Concluyendo, si uno administra un número pequeño de servidores, menos de cien por poner un número, este programa puede ser útil, sobre todo en la ejecución de comandos entre varios servidores. Si uno es un adorador de SSH y su modo de cifrar cada bit enviado o recibido entre dos máquinas, este será otro programa más que no utilizará.

 

Información y enlaces de lo mencionado en el podcast

Coincidiendo con la salida del podcast número 18 de daboblog, dejo aquí los enlaces a los programas y aplicaciones que mencionamos en la sección Linux en un entorno hostil, de Kernel panic.

Supongo que será más sencillo de seguir así, teniendo en cuenta nuestra pronunciación chusquera. Creo que ganaríamos si comenzásemos a utilizar el alfabeto fonético de la OTAN, ese tan conocido de alfa, bravo, charlie…

La lista es lo más minuciosa posible pero, como siempre, asumo cualquier incorrección y/o ausencia.

  • gmail para todo:

  • google calendar para los calendarios y agendas. Se pueden buscar algunas, como la de los días de vacaciones de la provincia, en vez de crearla.
  • rememberthemilk para las tareas y, para integrarse con gmail, esta extensión.
  • contacts es otra forma de llevar una lista de contactos desde un equipo.
  • tomboy permite tomar notas de forma eficaz y rápida.
  • programas para anotar tareas
  • para realizar copias de seguridad de la configuración, extensiones y temas instalados en Firefox (iceweasel), FEBE (Firefox Environment Backup Extension).
  • para realizar diagramas o dibujos de CPDs, Dia.
  • para la gestión de proyectos
  • para realizar mapas mentales
  • para todo, literalmente, vim (VI Mejorado). Si este programa no salgo de casa. 😛

Y, finalmente, el lema del día:

todos los caminos conducen a debian

 

podcast número 18 de daboblog

Ya está aquí, calentito, la última entrega del podcast y esta vez viene con varias novedades. Para empezar, vamos a cambiarle la periodicidad, pasando a un podcast mensual. La llegada del verano ha servidor para que nos diésemos cuenta de que algunos vamos con la lengua fuera desde hace demasiado tiempo y que tenemos que bajar un poco el ritmo.

A cambio, y esta es otra novedad, la tendencia dice que dedicaremos una hora a cada una de las secciones. Este número, el dieciocho, tiene una duración récord y se alarga hasta las dos horas y cuarenta y tres minutos. Así, si alguien no puede vivir sin su podcast quincenal, puede dividirlo en dos de hora y pico :D.

Y, por último, la sección Manzanas traigo ha contado con un invitado de lujo para hablar, entre otras cosas, del unboxing del iPad, Rafa Barberá.

Banner del podcast de Daboblog

Como siempre, quien mejor explica los contenidos es dabo, en su blog:

>Intro (00:00 hasta el 8:38)
Presentación, nuevo formato de verano, personal, vuelvo a KDE, dedicado a Aurora -;)

>Kernel Panic (Minuto 8:40 hasta 1:23 h)
(Diego y Dabo) ¿Lost? Hablamos de Debian, la actualidad de otras distros, opinión de Diego sobre el tema GNOME Vs GIMP (en el anterior le tocó a Forat), Slackware, Fedora, Red Hat en la empresa, etc.
Además de seguir con la serie de Diego(n1mh) GNU/Linux en un entorno hostil, hablando de la adaptación de herramientas libres en el ámbito laboral con varias alternativas en diversos campos.

>Manzanas Traigo (Hora 1:24 hasta 2:43 h)
(Oreixa, lur y Dabo con Rafa Barberá como invitado) ¿Lost? Actualidad Apple, noticias sobre el iPhone, aplicaciones, nuevos MacBook, políticas de precios y sobre todo, iPad. Tanto Oreixa como Barberá ya tenían los suyos justo el mismo día de la grabación y se pueden escuchar sus primeras impresiones. Como guinda final las famosas Manzanas de lur. ¿Para quién serán?

Como siempre, más información en “DaboBlog Podcast, número 18. Kernel Panic y Manzanas Traigo (Con iPad y Rafa Barberá-;)” o en la web del canal del podcast en ivoox.

Para escucharlo, sólo tenéis que hacer clic un poco más abajo ;).