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

miércoles, 27 de mayo de 2020

Filtrando publicidad con powerdns (II)

Ya vimos como configurar nuestro powerdns para bloquear la publicidad en nuestra red. Ha estado funcionando un par de semanas sin problemas antes del caos de la COVID-19.

Lo que hicimos entonces fue coger el fichero gravity.list de nuestra Raspberry Pi y su pi-hole, convertirlo al formato .lua y meterlo en nuestro powerdns.

Dejamos pendientes dos cosas:

  • Probar listas de bloqueo mas grandes: he probado con varias mas descargadas de Internet y no se nota una mejora apreciable. Además muchas no son de publicidad, sino de otro tipo de contenidos inadecuados que en nuestro caso filtra el firewall corporativo. La istas que trae pi-hole son más que suficientes.
  • No depender del gravity.list de pi-hole. Escribir un script que baje las listas referenciadas en adlists.list y construir un blocklist.lua de forma automática. Eso es lo que he hecho y cuento en este artículo.

El script sería:
# cat /usr/local/bin/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

#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
Este script descarga listas de DNS de las mismas fuentes que pi-hole. Realmente la única importante es https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts, que se actualiza con mucha frecuencia. El resto son anecdóticas.

Además, añade al bloqueo los dominios del fichero local /etc/powerdns/bloqueados.list, por si queremos bloquear dominios a mano (por ejemplo, instagram o whatsapp) en la red del centro.

Con todo ello hace una lista de bloqueos, que unifica y ordena para pasar a generar un /etc/powerdns/blocklist.lua.

Este script se ejecuta semanalmente en la madrugada del domingo mediante un crontab:
# cat /etc/crontab
...
...
#Actualiza la lista de bloqueos de publicidad y otros dominios para powerdns
#Por defecto se hace los domingos de madrugada
00 2 * * 7    root     /usr/local/bin/blacklist-powerdns.sh
...
...
Y ya está. Con esto tendremos la lista de bloqueos actualizada semanalmente.

Hoy, 27 de mayo de 2020, SpaceX lanza la Crew Dragon en un Falcon 9 con dos astronautas norteamericanos rumbo a la ISS. Aquí una animación de lo que debe pasar hoy a las 22.33.



Si todo va bien tendremos un competidor nuevo para las estupendas Soyuz. A ver si hay suerte y puedo añadir un vídeo real después de este texto.
Actualización 28-05-2020: nada, el tiempo no acompañó en Florida. Se intentará de nuevo el sábado 30.
Actualización 31-05-2020: lo hicimos!


Viendo el lanzamiento en directo desde casa:


El booster aterrizado de forma autónoma y segura en la barcaza "Of Course I Still Love You", listo para ser reutilizado en un futuro próximo en otro lanzamiento.


Es estupendo que al menos un país occidental pueda de nuevo mandar astronautas al espacio sin necesitar de tecnología comunista. ¡Bravo, Elon!

No hay comentarios:

Publicar un comentario