"Después del juego es antes del juego"
Sepp Herberger

viernes, 30 de septiembre de 2022

Filtrando publicidad con powerdns (III)

Nuestro filtro de publicidad basado en PowerDNS funciona bastante bien limpiando anuncios indeseados de las páginas y agilizando la navegación dentro de nuestra red.

El problema es que a veces filtra demasiado y nos quedamos sin ver cosas que pueden interesarnos (o no, como ATRESplayer). Esta semana me comunicaron que no se cargaban los contenidos de RTVE Play. Tras analizar el tráfico web con las opciones de desarrollador del navegador veo que se están cortando peticiones web a una serie de sitios con el nombre "gigya" y esto acababa repercutiendo en que no se cargaban los vídeos de RTVE.

La solución es no filtrar esos sitios, pero recordeoms que el script que construye la lista negra recopila los datos de varias ubicaciones web y no es sencillo quitar de esa lista uno a uno manualmente los sitios que si deseo permitir. Es el momento de implementar una "lista blanca" con patrones para identificar los sitios permitidos. El script blacklist-powerdns.sh quedaría:
# cat blacklist-powerdns.sh 
#!/bin/bash

#Crea fichero de bloqueos de publicidad y sitios web para powerdns.

#Descargamos listados de sitios web de publicidad a bloquear.
cp /dev/null /tmp/filter-hosts

wget -N -O /tmp/hosts https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
grep "^0.0.0.0" /tmp/hosts |  awk '{print $2}' >> /tmp/filter-hosts
echo "" >> /tmp/filter-hosts

wget -N -O /tmp/hosts http://sysctl.org/cameleon/hosts
grep "^127.0.0.1" /tmp/hosts | awk '{print $2}' >> /tmp/filter-hosts
echo "" >> /tmp/filter-hosts

wget -N -O /tmp/hosts https://mirror1.malwaredomains.com/files/justdomains
cat /tmp/hosts >> /tmp/filter-hosts
echo "" >> /tmp/filter-hosts

wget -N -O /tmp/hosts https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt
cat /tmp/hosts >> /tmp/filter-hosts
echo "" >> /tmp/filter-hosts

wget -N -O /tmp/hosts https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
cat /tmp/hosts >> /tmp/filter-hosts
echo "" >> /tmp/filter-hosts

#Este enlace está muerto
#wget -N -O /tmp/hosts https://hosts-file.net/ad_servers.txt
#cat /tmp/hosts >> /tmp/filter-hosts

#Añadimos lista negra de dominios mantenida por nosotros
if [ -f /etc/powerdns/bloqueados.list ]
then
   cat /etc/powerdns/bloqueados.list >> /tmp/filter-hosts
   echo "" >> /tmp/filter-hosts
fi

#Ordenamos y quitamos dominios repetidos. Borramos comentarios.
cp /tmp/filter-hosts /tmp/filter-hosts2
sort -u -o /tmp/filter-hosts /tmp/filter-hosts
sed -i '/^localhost$/d' /tmp/filter-hosts
sed -i '/^#/d' /tmp/filter-hosts

#Quitamos de la lista los que tienen las palabras en /etc/powerdns/permitidos.list
if [ -f /etc/powerdns/permitidos.list ]
then
   for cadena in $(cat /etc/powerdns/permitidos.list)
   do
     sed -i  "/$cadena/d" /tmp/filter-hosts
   done
fi

#Generamos el fichero blocklist.lua compatible con powerdns
echo "return {" > /tmp/blocklist.lua
for i in $(cat /tmp/filter-hosts)
do
   echo \"$i\", >> /tmp/blocklist.lua
done
echo "}" >> /tmp/blocklist.lua

#Copiamos fichero de bloqueo DNS y reiniciamos servicio.
/etc/init.d/pdns-recursor stop
/etc/init.d/pdns stop
cp -f /etc/powerdns/blocklist.lua /etc/powerdns/blocklist.lua.bak
cp -f /tmp/blocklist.lua /etc/powerdns/blocklist.lua
/etc/init.d/pdns start
/etc/init.d/pdns-recursor start

exit 0

En negrita está el código nuevo: una vez hecha la lista de sitios filtrados recorremos el contenido del fichero /etc/powerdns/permitidos.list y eliminamos de la lista los sitios que tienen las palabras/subcadenas encontradas allí. En principio he puesto en permitidos.list solo una línea con la cadena "gigya", pero seguramente en los próximos meses vaya añadiendo mas contrafiltros que hagan menos estricta la lista negra con la que venimos trabajando.


Espectacular petardazo de la NASA para desviar un asteroide con el impacto de la sonda DART. Esperemos que, como las armas nucleares, todo se quede en ensayos y no sea necesario usarlo nunca.

No hay comentarios:

Publicar un comentario