La larga historia de bloquear anuncios de Youtube en Pi-hole

He estado trabajando en otros proyectos, por lo tanto no he tenido tiempo para publicar algo en el blog. Sin embargo sigo en la interminable búsqueda de bloquear los anuncios de Youtube a nivel de red usando Pi-Hole. Hasta ahora he ido actualizando el script en mi Github: https://github.com/deividgdt/ytadsblocker/blob/master/ytadsblocker.sh

Imagen 1. Youtube Ads Blocker

De momento he conseguido bloquear la mayoría de anuncios, sin embargo aún sabiendo como bloquearlos todo, no puedo modificar el script para ello, por que tras estar haciendo diversas pruebas el script acaba provocando que Youtube deje de funcionar.

El funcionamiento actual del script hace que cada 5 minutos se revisen los logs de Pi-Hole en busca de los subdominios .goooglevideo.com de los cuales provienen los anuncios, cuando encuentra un nuevo subdominio lo añade a la blacklist para bloquearlo:

Imagen 2. Fichero /var/log/ytadsblocker.log

Sin embargo estoy omitiendo los subdominios del tipo: r8—sn-8xgp1vo-p5ql.googlevideo.com, notese los 3 guiones. Cuando se bloquean estos subdominios, los cuales son donde están exactamente los anuncios llega un punto donde Youtube se queda buscando infinitamente uno de estos subdominios que le responda, y el video no carga:

Imagen 3. Youtube cargando infinitamente un anuncio tras bloquear los subdominios con —

He estado analizando el comportamiento de Youtube a través del proxy ZAP y puede detallar que consulta dos subdominios, en bucle, si estos dos están bloqueados, no consulta ninguno más.

Imagen 4. ZAP proxy. Youtube busca siempre dos subdominios aleatorios. Si están bloqueados en pi-hole, no se carga nunca el video.

Seguiré trabajando en este script para ver si consigo bloquear los anuncios totalmente.

Anuncios

Bloquear anuncios de Youtube en Pihole

Imagen 1. Pi-Hole y Raspberry Pi

Ya llevo más de un mes usando la Raspberry Pi con Pi-hole, y la verdad que no puedo estar más contento, Pihole ha estado funcionando sin parar desde entonces, y al igual que mi Raspberry no ha tenido ningún problema. El único inconveniente que me he encontrado a día de hoy han sido los anuncio de YouTube, los cuales han sido prácticamente imposibles de bloquear del todo. Hace poco he hecho una pequeña investigación de los subdominios que genera Google para los anuncios de YouTube, y estos tienen el siguiente formato: 

r1—sn-4g57kn7d.googlevideo.com

Leyendo varios foros he visto que hay algunas personas que han generado listas publicas con estos cientos de estos subdominios, sin embargo, en mi caso, esas listas no me han servido de nada ya que desde el apartado “Query log” de Pi-Hole pude ver que los subdominios consultados con los anuncios eran muy diferentes de los que estaban en estas listas. 

Por lo tanto decidí  buscar a nivel de linea de comandos todos los subdominios de googlevideo.com que tuviesen un parecido con los que aparecían en esas listas. Con la siguiente secuencia de comandos pude sacarlos:

cat /var/log/pihole.log | egrep "r([0-9]{1,2}).*\.googlevideo\.com" | awk '{print $8}' | sort | uniq

El fichero pihole.log contiene todas las consultas DNS realizadas, si creamos una expresión regular como la que va después del pipe conseguimos obtener todos los subdominios consultados via DNS. Teniendo la salida del comando anterior lo podemos redirigir al fichero /etc/pihole/blacklist.txt, todos los cambios realizados en este fichero tienen efecto inmediato y pueden visualizarse acto seguido en el apartado:

Imagen 2. Pi-Hole: Blacklist

Con ello concluimos que si cargamos un video en YouTube, vemos un anuncio, y acto seguido sacamos el subdominio desde el cual se esta cargando dicho anuncio y lo metemos en la blacklist, dejaremos de ver cualquier anuncio que se nos sirva desde el susodicho subdominio.

SCRIPT EN BASH

Con esa idea de funcionamiento creé un script en bash para bloquear los anuncios de YouTube, el funcionamiento es el siguiente:

  • El script se puede instalar como servicio con la opción: install.
  • Durante la instalación el script copia todos los logs de Pi-Hole ubicados en /var/log y los lleva a /tmp
  • Allí los descomprime y con la expresión regular anterior, saca todos los subdominios de googlevideo.com que alguna vez hayas consultado. 
  • Todos los subdominios los añade al fichero /etc/pihole/blacklist.txt
  • Si tras la instalación ejecutamos: systemctl start ytadsblocker el script empezará a trabajar como un servicio y cada 4 minutos comprobará el fichero /var/log/pihole.log en busca de subdominios de googlevideo.com y si encuentra uno nuevo lo añadirá al fichero blacklist.txt
  • En el fichero /var/log/ytadsblocker.log se guardarán todos los subdominios nuevos que se añadan.

Desde que tengo el script funcionando no he tenido ningún problema y tengo menos anuncios en todos los dispositivos móviles de mi red. Si tuviese algún problema con ello, ya volveré por aquí para actualizar la entrada.

Por si interesa, el código fuente del script lo puedes encontrar en mi GitHub,  o por si quieres añadir algo que se me haya pasado. 

 

Adios anuncios con Pi-Hole y Raspberry Pi

pihole
Imagen 1. Pi-Hole

Hace poco he adquirido mi primera Raspberry, he cogido la última la 3B+, y la verdad que en menos de una semana ya le estoy sacando un gran provecho, sobre todo gracias a Pi-Hole.

Básicamente lo que hace esta maravilla es montar un servidor DNS que resuelve los dominios relacionados con publicidad con la ip 0.0.0.0, con ello conseguimos quitar toda la publicidad de la red de nuestra casa. Pi-Hole por defecto hace uso de 5 listas de dominios relacionados con publicidad en general y otros relacionados con malware, pero si queremos podemos añadir nuestras propias listas, o podremos añadir nuestros propias expresiones regulares para que, por ejemplo, bloquee todas las paginas web relacionadas con “porn“, al mas puro estilo de Squid. Continuar leyendo “Adios anuncios con Pi-Hole y Raspberry Pi”

Haciendo ficheros intocables con chattr en Linux

Una forma muy sencilla de evitar que los ficheros mas importantes de nuestro sistema sean modificados o borrados, es que solo nosotros como administradores tengamos permisos de escritura y lectura sobre dichos archivos; pero que ocurre cuando somos nosotros mismos que por error eliminamos un fichero vital, o que un script que hemos creado, por error elimine o modifique un fichero vital (?)… ahí es donde no nos sirve el hecho de que solo nosotros tengamos permisos… Una de las soluciones más rápidas que he descubierto es el comando chattr, con este comando haremos que nuestros directorios o ficheros sean intocables.

La sintaxis del comando para convertir el fichero “ficheroimportante.bkp” en intocable, sería: Continuar leyendo “Haciendo ficheros intocables con chattr en Linux”

Maquinas Virtuales en Android. Virtualizando DSL y Windows XP

Hace poco necesitaba una terminal de Linux a mano, necesitaba hacer  unas pruebas de ultima instancia con un script y como solo tenía a mano mi teléfono Android, busqué si podía hacer algo parecido y efectivamente, encontré una forma de virtualizar una maquina Linux en Android. Asi que a continuación voy a enseñar como hacerlo. El proceso que voy a mostrar lo he realizado usando la siguiente aplicación: Limbo

Cuando tengamos instalada la aplicación, lo siguiente que debemos tener es un archivo .iso con la imagen del sistema que queremos virtualizar, en mi caso usé la distribución DSL que solo pesa 50mb,  la cual se puede descargar desde aquí. Continuar leyendo “Maquinas Virtuales en Android. Virtualizando DSL y Windows XP”

Servidor de logs con rsyslog en CentOS

En esta entrada, voy a explicar como configurar un servidor de logs con rsyslog en CentOS. Hace poco me encontré con un problema en el que los logs de la maquina implicada, me hubiesen sido de gran ayuda, el problema es que después del fallo que tuvo, y tras reiniciarla, no habian logs disponibles ya que por que por alguna razón estos se habian corrompido.

Una forma muy sencilla de evitar este tipo de situaciones es tener un servidor de logs, lo cual es relativamente sencillo. Para empezar, en nuestro servidor de logs, debemos realizar los siguientes pasos:

Editar el fichero /etc/rsyslog.conf:

1
Imagen 1. Servidor rsyslog

Continuar leyendo “Servidor de logs con rsyslog en CentOS”

Yoigo te ofrece un Router con WiFi para ti y todos tus vecinos, pero pagas tú – 2018/08

fotonoticia_20180702140847_640

Pagas tú, sí, no me he equivocado en el titulo, si te has pasado a Yoigo hace poco, te habrán sorprendido con un router, del cual, si has sido curioso, al buscar información no has encontrado absolutamente nada. Yoigo esta ofreciendo a sus nuevos clientes el router NUCOM NC-WR764TGV el cual viene con el WPS activado por defecto, y como ya se sabe hace mucho tiempo WPS es vulnerable  a ataques de fuerza bruta, y se puede conseguir facilmente el PIN utilizado para la autenticación.

Continuar leyendo “Yoigo te ofrece un Router con WiFi para ti y todos tus vecinos, pero pagas tú – 2018/08”