PiHole - Bloquea publicidad con tu RaspberryPi!

AikonCWD

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.

https://pi-hole.net/

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

23
PiPePiTo

Supongo que con esto las típicas páginas que te piden que desactives el AdBlock no dirán nada, no?

2 respuestas
garlor

#2 te diran lo mismo porque detectaran que no descargas parte de su contenido

- 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!

por cierto eso de que se cargan mas rapido ... la raspberry puede hacer de cuello de botella en la red al tener un ancho de banda inferior a algunas conexiones

3 respuestas
AikonCWD

#2 #3 Dime na web que detecte el adblock y te digo si me salta el aviso con PiHole

2 respuestas
Markitos_182

#3 la Raspberry solo resuelve dominios. Concretamente los que no estén en una blacklist. Y eso se tarda... 2ms cuando están ya cacheados.

1
PiPePiTo

#4 Te la mando por privado x'D

1
garlor

#4 adslzone.net

AikonCWD

#3 Comprobado, ninguna web lo detecta tal y como ocurre con adblock o similares. Lo he probado en varias (xataka tiene deteccion de adblock) y con pihole ni se inmuta xD

Lo que comentas del cuello de botella... La raspberry solo hace de servidor DNS, básicamente te devuelve la IP correspondiente a un nombre de dominio DNS. Tal y como has visto en el peor de los casos son 30ms el primer hit y luego 12ms los hits siguientes gracias a la caché. Por lo que no reduce la velocidad, si no que encima la aumenta. Además a parte de aumentar el tiempo de resolución de DNS, reduce el tiempo de carga de paginas webs, pues tu PC no se descargará los banners o videos flash de publicidad ya que quedan cautivos en el webserver de PiHole.

Además te quita los banners de publicidad dentro de las apps de los android/iphone. Es una pasada xD

1
B

ya podria estar para x86 o x86_64. no tengo rpi :psyduck:

2 respuestas
MrAw3s0m3

Instalado y funcionando! :) Que facil es.

1 1 respuesta
AikonCWD

#9 Bajate el source. Instala dnsmasq y copia la configuración. Al fin y al cabo es un simple sh llamado gravity.sh que hace todo el trabajo. Tiene que ser cross-plataform seguro. He leido en reddit a gente que ma metido el script de pihole directamente dentro del DNS del propio router (previo upgrade a openwrt claro).

#10 Así me gusta! Si configuras el DHCP de tu casa podrás asignar el DNS de la PiHole automáticamente a todos tus dispositivos. :)

1 2 respuestas
B

#11 lo tendre en cuenta.

gracias :D

MrAw3s0m3

#11 Asi creo que es como esta, el DHCP del router da una direccion IP a cada dispositivo y he puesto como servidor de DNS el de la rpi asi que todos los dispositivos haran query a la rpi :)

1
B

Impresionante, ya lo tengo funcionando en mi NAS (Ubuntu server) y perfectamente... chao ublock

Configurado el router para que asigne el NAS como servidor.

Mas adelante mirare como meterlo en OpenWRT, ya que trabajo bastante con ese firm.

1 respuesta
amelM

Que pack de la Rasp me recomendais?

Nada mas que por el hecho de quitarme la publi de el movil y dispositivos que es lo mas molesto firmo donde sea, y mas ahora que sa puesto de moda lo de bloquear el contenido si tienes el ublock activado.

ElRuso

La idea de DNS spoofing si no es controlado por me me da miedo :( Una via de ataque demasiado grande.

B

A favoritos.

Gracias por el curro #1!

B

#14 como instalaste en ubuntu server?

1 respuesta
B

#18 Instala dnsmasq, configuralo y a mayores yo he añadido la siguiente linea:

addn-hosts=/etc/pihole/gravity.list

Y luego

sudo curl -o /usr/local/bin/gravity.sh https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/gravity.sh
sudo chmod 755 /usr/local/bin/gravity.sh
sudo /usr/local/bin/gravity.sh
sudo sed -i "s/^[0-9\.]\+\s/0.0.0.0 /g" /etc/pihole/gravity.list

(La ultima linea lo unico que hace es, que si no tienes servidor web al que redirigir los bloqueos, los redirige a 0.0.0.0 que no existe)

Para profundicar mas en todo esto, echale un vistazo a :

https://github.com/pi-hole/pi-hole
http://jacobsalmela.com/block-millions-ads-network-wide-with-a-raspberry-pi-hole-2-0/

2 1 respuesta
MrAw3s0m3

De momento el problema que he encontrado es que creo que mi historial de videos vistos en youtube no se actualiza. Dicen en internet que pasaba adblockers y que metiendo en el whitelist la direccion s.youtube.com se arreglaba, pero no ha hecho efecto. Se os ocurre que puede ser?

Edit: creo que esta fixed, se me olvido ejecutar /usr/local/bin/gravity.sh para aplicar los cambios :)

1 2 respuestas
B

#19 gracias. en cuanto saque un rato libre me pongo a ello :D

JuGuLaToR

La verdad es que pinta bien, pero gastarme 50 o 60 euros solo para bloquear publicidad... no se yo xD

1 1 respuesta
HeXaN

#22 Hombre, se puede sacar casi por la mitad y sirve para más cosas el cacharro.

1 respuesta
JuGuLaToR

#23 Si la placa en vale unos 30 y algun euros, pero no le vas a poner una carcasa? y la sdcard? y no se si cualquier cargador de móvil le vale, no se si tengo alguno que de 2A. Empiezas a sumar y se engorda la cosa.

1 respuesta
garlor

#24 con un cable usb a microusb lo conectas al usb 3.0 del ordenador y si este no lo desconectas de la luz aunque este apagado le da electricidad, asi que no hace falta cargador, una sd de 8GB vale 4 o 5 euros

1 respuesta
JuGuLaToR

#25 Pues eso, 50 euros en total, que es justo lo que dije en #22.

Ademas, no tengo USB 3.0.

1 respuesta
garlor

#26 pi zero 5 euros, micro sd 5 euros, usb a rj45 8 euros, no se donde compras la pi, pero a mi me costo la pi2 36 euros nuevecita, y acaba de salir la pizero que vale 5 euros

1 respuesta
JuGuLaToR

#27 Pues mirando en PcComponentes. Echaré un ojo a ver si veo la Pi Zero esa que dices.

Y volvemos a lo mismo, Pi2 36€, + SD 5€ + Carcasa normalucha 5€ , ahí tienes los 50 euros de los que estoy hablando. Oh perdón, que son 46, que estúpido soy...

Edit. La Pi Zero, aparte de no estar disponible por ningún sitio (o yo no la encuentro), no lleva puerto ethernet, por lo que no creo que sea lo mas idoneo para PiHole, si es que se puede usar para esto por wifi.

MrAw3s0m3

A lo mejor comprarsela con este unico fin puede que no te merezca la pena. Lo suyo es comprarla y darle varios usos. Si no tienes una smartv puedes instalar raspbmc y asi poder tener funciones de smartv en una antigua. Ademas puedes conectarle uno o mas discos duros y hacerte un NAS, y tambien puedes instalarle jdownloader para tenerlo descargando a todas horas. No se, se pueden hacer muchas cosas.

andoni013

Con la rasp tienes más proyectos que políticos corruptos...

1