PiHole - Bloquea publicidad con tu RaspberryPi!
Vengo a hablaros de un pequeño proyecto para Raspberry que se está haciendo grande, ha ganado mucha popularidad en reddit en apenas 1 semana. Se trata de un sistema que permite bloquear publicidad a nivel de red. Podemos pensar en las extensiones de navegador como adblock/ublock pero a mayor escala.
PiHole tiene unas ventajas notables frente a los addons tipo adblock/ublock:
- Detienes la publicidad a nivel de red, todos tus dispositivos de la red quedarán protegidos bajo el paraguas de PiHole
- La publicidad se bloquea a nivel de red. No se descargan datos a tu PC/terminal
- Reduces el consumo de datos, las páginas web cargan más rápido! La batería de las tablets/smartphones duran más!
- Detienes la publicidad dentro de las apps de las tablets/smartphones
- Aumentas la velocidad de resolución de nombres gracias a la caché DNS
- Puedes implantar a gran escala (en una oficina o empresa) PiHole[/i]
El funcionamiento es sencillo, básicamente consiste en un pequeño servidor DNS (dnsmasq) con un montón de blacklist que se actualizan diariamente. Se genera un portal cautivo donde todas las peticiones a dominios de publicidad quedarán redireccionados a nivel de DNS, haciendo que la carga de los banners y popups se vean anulados por PiHole. Una vez instalado PiHole solo hay que cambiar el servidor DNS de tus equipos y hacer que apunte a la IP de tu Raspberry. No es un proxy por lo que la velocidad de internet no se ve reducida (al contrario! aumenta de forma significante). Si queremos configurar todos los equipos de nuestra red/casa, simplemente tendremos que editar las opciones de DHCP de nuestro router y hacer que reparta como PrimaryDNS la IP de Raspberry.
La instalación se recomienda hacer sobre una raspberry ejecutando Raspbian Jessie, primero de todo nos aseguramos que tenemos el sistema actualizado:
sudo apt-get clean
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo reboot
sudo apt-get install rpi-update
sudo rpi-update
sudo reboot
Ponemos esos commandos uno a uno para actualizar al máximo la Raspberry (tanto software como Kernel). Verás que requiere hacer 2 reboots. Luego ya podemos instalar PiHole con seguridad:
curl -L install.pi-hole.net | bash
Completamos la instalación siguiendo el tutorial guiado en el terminal, no tiene dificultad. Una vez finalizado simplemente tendremos que cambiar el servidor DNS de cada terminal, o configurar el DNS de las opciones DHCP de nuestro router para que todos los dispositivos de la casa queden configurado con PiHole. Nada más!!
Automáticamente verás como toda la publicidad queda eliminada por arte de magia. Lo mejor de todo es que la publicidad no se llega ni a descargar (como ocurre con adblock) así que la carga de páginas webs con mucha publicidad se verá acelerada. Lo he probado con un juego de iPhone, al finalizar las vidas se carga un video de publicidad y tras 30 segundos me regalan una vida nueva, bien pues el video no se cargaba y la vida me llegaba sin esperar los 30 segundos. Sublime.
INSTALANDO PIHOLE EN LA EMPRESA
Visto el éxito de PiHole me he decidido a implantarlo como solución de ads-blocking a nivel profesional (en la empresa donde trabajo). Tenemos una red de Dominio basada en Windows, con su servidor DomainController (DC) haciendo de servidor DNS, etc… todas las máquinas de la empresa están en dominio y tienen como servidor DNS la IP de DC (10.151.0.20). Instalo la raspberry en la sala de servidores y le asigno una dirección IP (10.151.0.13), realizo la instalación de PiHole tal y como he descrito más arriba y me dispongo a configurar nuestro servidor DNS de la empresa:
Accedemos a las propiedades del servidor DNS y configuramos PiHole como único reenviador DNS. De ésta forma, cualquier petición DNS a un dominio desconocido por el DNS principal (DC – 10.151.0.20) será reenviada a la Raspberry (10.151.0.13). Raspberry comprobará si la petición DNS pertenece a alguna blacklist, de ser así devolverá el valor 10.151.0.13 como respuesta a la petición DNS. Si la petición DNS no está en blacklist, entonces la Raspberry consultará a su servidor DNS (por defecto 8.8.8.8) y devolverá la IP correspondiente. ¿Se entiende? Veamos un ejemplo mirando el log de pihole:
tail -F /var/log/pihole.log
Jan 29 16:34:08 dnsmasq[379]: query[A] arecio.work from 10.151.0.20
Jan 29 16:34:08 dnsmasq[379]: /etc/pihole/gravity.list arecio.work is 10.151.0.13
Jan 29 16:34:25 dnsmasq[379]: query[A] s.gycs.b.yahoodns.net from 10.151.0.20
Jan 29 16:34:25 dnsmasq[379]: forwarded s.gycs.b.yahoodns.net to 8.8.8.8
Jan 29 16:34:25 dnsmasq[379]: reply s.gycs.b.yahoodns.net is 217.12.1.36
Jan 29 16:34:25 dnsmasq[379]: reply s.gycs.b.yahoodns.net is 217.12.1.35
Podemos observar un primer caso de anuncio bloqueado y otro caso de petición DNS legítima respondida. En el primer caso alguien accede al dominio “arecio.work”, dicha petición DNS se manda al servidor DNS configurado en la empresa (10.151.0.20), nuestro DNS corporativo hace uso del reenviador configurado 10.151.0.13 (Raspberry) y comprueba que está en blacklist, por lo que devuelve 10.151.0.13 como IP correspondiente al dominio arecio.work y el anuncio queda bloqueado.
En el segundo caso, un usuario hace una petición al dominio “s.gycs.b.yahoodns.net”, nuestro DNS 10.151.0.20 envía la petición a nuestra Raspberry 10.151.0.13 pero no está en blacklist, por lo que hace forward hacia el DNS de google 8.8.8.8 y devuelve la IP correcta (217.12.1.36)
Se ve claro el funcionamiento? Para que esto funcione correctamente, una vez configurado el reenviador en nuestro servidor DNS hay que borrar la caché interna de nuestro servidor DNS principal. PiHole implementa un sistema de caché propio, así que si un dominio ya se ha consultado, la segunda petición se resuelve en local, reduciendo el tiempo de respuesta drásticamente:
Aquí vemos 33ms de ping al resolver por primera vez el dominio de lenovo.com y luego un ping de 2ms en la misma petición gracias a la caché
Por último tenemos un panel de estadísticas muy chulo que nos enseña de forma gráfica la cantidad de ads bloqueadas por pihole, se accede a través de la ip de la raspberry con /admin al final:
Y poco más que añadir, a ver si os animáis y montáis PiHole en vuestra casa o en el curro!
Un saludo