DNSMASQ: eliminando publicidad en las tablets del Colegio

Estos días los estoy dedicando a terminar de configurar las tablets que entre el AMPA y el Centro han adquirido para que los chicos las usen en clase. Se han actualizado, instalado un buen conjunto de «apps» educativas (de las que publicaré próximamente un listado) que cubren los niveles desde guardería a 4º de la ESO, y se han creado usuarios específicos de forma que cada nivel esté identificado por un color y sólo tenga acceso a las «apps» que le corresponden.

tablet

Entre los criterios de selección de las «app» estaban la disponibilidad de una versión gratuita. Evidentemente, los desarrolladores de estos programas se merecen una compensación por su trabajo. Pero el método de aparición indiscriminada de publicidad durante el uso con los niños distrae e impide una correcta ejecución de las actividades con las tablets. Con el tiempo se irán adquiriendo las mejores aplicaciones. Mientras tanto intentaremos que al realizar los ejercicios de lecto-escritura no nos interrumpan con cursos de cocina…

En un primer momento valoré la posibilidad de utilizar alguna aplicación específica como AdBlock Plus (que ya utilizamos en los navegadores de los ordenadores) pero ralentiza el acceso a Internet y no filtra todos los mensajes de publicidad emergentes en las aplicaciones.

Incluso me planteé «rootear» las tablets e instalar algo como AdAway. En cualquier caso tendría que instalar una a una todas las tablets, y volver a configurarlas cuando cambiasen las condiciones y los ajustes del filtrado.

Filtrado por direcciones

Las aplicaciones que incluyen anuncios hacen uso de servidores de internet «especializados» en este tipo de publicidad on-line. Sólo tenemos que engañar a la tablet para que no encuentre esos servidores.

Ya hemos probado con éxito soluciones basadas en combinar un «proxy-caché» como Squid + SquidGuard junto con una base de datos de direcciones prohibidas y configuraciones especiales de NAT y cortafuegos. Pero para las tablets propongo algo más sencillo de instalar y mantener: Dnsmasq.

El escenario descrito en este tutorial utiliza el programa Dnsmasq como mini-servidor para falsificar entradas DNS . Resumiendo, los siguientes pasos describen cómo instalar Dnsmasq y configurarlo para reenviar todas las solicitudes DNS de las tablets a los servidores reales excepto las que corresponden a sitios de publicidad .

IMPORTANTE: Una vez Dnsmasq esté instalado y en funcionamiento, las tablets deben ser configuradas con la IP de este servidor DNS para resolver direcciones. Esto se puede hacer cambiando la configuración del servidor DHCP o accediendo a la configuración avanzada de la conexión WiFi de cada tableta.

 [ 1 ]  Descarga e instalación en LINUX

Tenemos a nuestra disposición un equipo con IP fija que monitoriza y gestiona el uso de la red WiFi del Centro, que es la que utilizan las tablets. Ese será nuestro equipo candidato para la instalación.

En algunos sistemas (como Ubuntu 14.04), Dnsmasq ya está instalado y en ejecución por defecto como un servidor DNS local (como caché ). En caso contrario puedes abrir una consola y ejecutar:

apt-get install dnsmasq-base

 [ 2 ]  Configurar Dnsmasq

Dnsmasq utiliza el fichero de configuración «/etc/dnsmasq.conf» que lee al iniciarse.  Lo habitual es que ese fichero no existe y que Dnsmasq inicie con los valores por defecto.

NOTA: En el caso particular de Ubuntu 14.04 (que es el sistema que vamos a utilizar) Dnsmasq forma parte de los subservicios de NetworkManager que se encarga de iniciarla red.

Crea/edita el fichero /etc/dnsmasq.conf y escribe estas líneas:

no-dhcp-interface=
server=8.8.8.8 
no-hosts
addn-hosts=/etc/dnsmasq.hosts

Estas cuatro líneas le dicen a Dnsmasq:

  1. Que no inicie el servidor de DHCP (no es necesario para el ejemplo)
  2. Que use el servidor DNS de Google (con IP  8.8.8.8) como servidor al que reenviar las peticiones si el Dnsmasq no las resuelve (puedes omitirlo para que utilice los configurados en tu red)
  3. Que no utilice el fichero /etc/hosts del sistema.
  4. Que cargue las entradas del fichero /etc/dnsmasq.hosts .

 [ 3 ]  Prepara la lista negra de direcciones
Este fichero no existe. Puedes crear uno siguiendo el mismo formato que el fichero /etc/hosts, o partir de alguno que recoja ya cientos/miles de direcciones de servidores de publicidad a bloquear:

Cada línea contiene una dirección IP y separadas por espacios o tabulares los nombres de dominio asociados. Como ejemplo puedes utilizar estas líneas:

127.0.0.1   ad.doubleclick.net
127.0.0.1   ad.yieldmanager.com
127.0.0.1   adadvisor.net
127.0.0.1   adlog.com.com
127.0.0.1   ads.mobilityware.com
127.0.0.1   adservices.google.com
127.0.0.1   advertising.com
127.0.0.1   apps.mobilityware.com
127.0.0.1   b.scorecardresearch.com
127.0.0.1   campaign-tapad.s3.amazonaws.com
127.0.0.1   ctxt.tribalfusion.com
127.0.0.1   google-analytics.com
127.0.0.1   googleadservices.com
127.0.0.1   ib.adnxs.com
127.0.0.1   intellitxt.com
127.0.0.1   media.admob.com
127.0.0.1   media.mobpartner.mobi
127.0.0.1   munchkin.marketo.net
127.0.0.1   origin.collective-media.net
127.0.0.1   pagead2.googlesyndication.com
127.0.0.1   pixel.quantserve.com
127.0.0.1   static.ak.fbcdn.net
127.0.0.1   swappit.tapad.com
127.0.0.1   view.atdmt.com
127.0.0.1   zedo.com

 [ 4 ]  Prueba el servidor

Habiendo creado los dos ficheros anteriores ya puedes arrancar Dnsmasq. La forma más fácil es «matando» el servicio y reiniciándolo.  Para probar su funcionamiento utiliza las opciones –no-daemon (modo depuración, no pasa a segundo plano) y –log-queries (la actividad se vuelca al terminal):

sudo killall -9 dnsmasq
sudo dnsmasq --no-daemon --log-queries

d1

En la imagen puedes observar como se identifican los DNS de la red y el nº de direcciones de nuestra lista negra (en mi caso 125258).

Para probar a hacerle peticiones al servicio puedes utilizar la herramienta del sistema dig:

d2

En el ejemplo superior le pedimos que utilice como DNS de consulta al equipo donde está configurado Dnsmasq (192.168.1.35 en mi caso) y que nos de una respuesta corta (opción +short, no genera comentarios).

Tal como queríamos, Dnsmasq devuelve la dirección IP 127.0.0.1 para  “ad.doubleclick.net” y para «www.zedo.com«, mientras que para «www.google.com» y «www.colegiopablovi.es» devuelve las direcciones reales obtenidas de los DNS externos.

d3

En el terminal de salida del servicio Dnsmasq se aprecia exactamente eso (ver imagen superior). La primera y tercera petición (query[A]) se localizan en el fichero  «/etc/dnsmasq.hosts«, mientras que la segunda y la cuarta lo hacen a través de los DNS reales.

Una vez que nos hemos asegurado que funciona podemos reiniciar el servicio dnsmasq sin argumentos desde la consola. En el caso de nuestro Ubuntu el servicio NetworkManager se encargará de iniciarlo por nosotros en cada arranque del sistema.

 [ 5 ]  Añadiendo nuevos servidores a la lista negra

De nada sirve bajarnos de internet enormes listas de servidores de publicidad si en ellas no están los que utilizan nuestras aplicaciones.  Utilizando el método de prueba descrito en el punto anterior monitorizaremos a que servidores de van conectando las tablets según vayamos ejecutando las aplicaciones con publicidad. Recogeremos los dominios sospechosos no bloqueados ya y los añadiremos a nuestro fichero «/etc/dnsmasq.hosts» siguiendo el modelo descrito.

NOTAS:

  • Hay que recargar el fichero con cada modificación por lo que tendrás que matar y reiniciar el servicio dnsmasq de nuevo.
  • Puedes utilizar más de un fichero de listas negras añadiendo su ruta en una nueva línea en el fichero de configuración de dnsmasq de la forma «addn-hosts=/etc/dnsmasq.publitablets» lo que facilita su gestión.
  • Si una aplicación deja de funcionar tras bloquear los servidores de publicidad que utiliza siempre puedes borrar sus direcciones de las listas.
  • Dependiendo de como configures las tablets o el servidor DHCP el filtrado puede afectar a todos los dispositivos que utilicen tu red.