Instala Pi-hole en tu Raspberry Pi y dile adiós a la publicidad intrusiva en tu navegación

Después de haber leído el espectacular libro “Data and Goliath: The Hidden Battles to Collect Your Data and Control Your World” de Bruce Schneier, es realmente difícil no empezar a preocuparse por tu propia privacidad. Y no porque tengas algo que esconder, sino simplemente porque es tu derecho y es tu responsabilidad velar por su cumplimiento:

Artículo 12 de la Declaración Universal de Derechos Humanos

Muchos esfuerzos se han realizado ya desde el punto de vista legal y de cumpliento (la ISO 29100:2011, el Reglamento General de Protección de Datos (GDPR), el acuerdo Privacy Shield entre la EU y US, la ley de cookies europea, etc.) pero lamentablemente no es suficiente. Y gran parte de esto es debido a que como usuarios ingenuos de plataformas como Facebook, Yahoo, Google, etc. el coste que pagamos es precisamente permitir y aceptar una intrusión “enmascarada” de dichas empresas en nuestra privacidad para poder hacer uso de sus servicios. Estas empresas analizan los datos que generamos, identifican patrones y con ello nos bombardean de publicidad particularizada y focalizada como parte de sus estrategias de marketing agresivo (que es de donde obtienen la mayor parte de sus ganancias):

Infografía: ¿De dónde obtiene Google sus ganancias? (Fuente: BBC)

No obstante, como usuarios podemos protegernos y controlar la información que se filtra de nuestros hábitos de navegación de diferentes formas:

entre otros.

En este artículo se describirá el proceso de instalación y configuración de una solución que permite el bloqueo de publicidad intrusiva mediante la configuración de listas negras y blancas a nivel de peticiones de resolución de nombres (DNS) denominada Pi-hole en una Raspberry Pi (Open Source Ad Blocker Designed For Raspberry Pi).

¿Qué es Pi-hole?

Pi-hole es una solución compuesta por diferentes herramientas Open Source que permiten la gestión de peticiones de resolución de nombres (DNS) identificando y bloqueando mediante listas negras aquellos dominios con mala reputación y reportados como distribuidores de publicidad intrusiva.

Los componentes principales de Pi-Hole son:

  • dnsmasq: Un servidor ligero de DNS y DHCP.
  • curl: Una herramienta de linea de comando para la gestión de peticiones HTTP.
  • lighttpd: Un servidor web focalizado en el desempeño y la seguridad.
  • php: Lenguaje de scripting de uso general para la web.
  • AdminLTE Dashboard: Panel de control basado en Bootstrap 3.x

Instalación de Pi-hole

Para este caso en particular, se describirá el proceso de instalación y configuración de Pi-hole en una Raspberry Pi con Raspbian 9, aunque el paquete de software soporta instalación en múltiples plataformas con sistemas operativos GNU/Linux.

La instalación de Pi-hole es relativamente sencilla. De hecho, en la página web del proyecto se indica directamente el comando a ejecutar para proceder con la instalación:

curl -sSL https://install.pi-hole.net | bash

No obstante, dicho proceso puede tener serias consideraciones de seguridad, por lo que en este manual optaremos por una instalación un poco más manual pero más controlada.

En este caso, lo primero es autenticarse en la Raspberry Pi con credenciales administrativas y crear un directorio temporal para descargar los componentes:

root@RaspberryPi / #cd /tmp
root@RaspberryPi /tmp #mkdir pi-hole
root@RaspberryPi /tmp #cd pi-hole

Posteriormente, con wget descargamos el paquete (tar.gz) desde la página principal del proyecto en GitHub (https://github.com/pi-hole/pi-hole). En este caso, descargo la versión Pi-Hole Core 3.2.1 publicada en diciembre de 2017:

root@RaspberryPi /tmp/pi-hole #wget https://github.com/pi-hole/pi-hole/archive/v3.2.1.tar.gz
--2018-02-03 18:37:29--  https://github.com/pi-hole/pi-hole/archive/v3.2.1.tar.gz
Resolving github.com (github.com)... 192.30.253.112, 192.30.253.113
Connecting to github.com (github.com)|192.30.253.112|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/pi-hole/pi-hole/tar.gz/v3.2.1 [following]
--2018-02-03 18:37:30--  https://codeload.github.com/pi-hole/pi-hole/tar.gz/v3.2.1
Resolving codeload.github.com (codeload.github.com)... 192.30.253.121, 192.30.253.120
Connecting to codeload.github.com (codeload.github.com)|192.30.253.121|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 115162 (112K) [application/x-gzip]
Saving to: ‘v3.2.1.tar.gz’

v3.2.1.tar.gz                             100%[=========>] 112.46K   313KB/s    in 0.4s

2018-02-03 18:37:31 (313 KB/s) - ‘v3.2.1.tar.gz’ saved [115162/115162]

Luego, simplemente descomprimimos el paquete con tar y ejecutamos el script del instalador localizado en la carpeta “automated install”:

root@RaspberryPi /tmp/pi-hole #tar xvfz v3.2.1.tar.gz
root@RaspberryPi /tmp/pi-hole #cd pi-hole-3.2.1/
root@RaspberryPi /tmp/pi-hole/pi-hole-3.2.1 #cd automated\ install/
root@RaspberryPi /tmp/pi-hole/pi-hole-3.2.1/automated install #./basic-install.sh

Luego, el script de instalación verificará los pre-requisitos y dependencias y descargará los componentes que hagan falta.

De aquí en adelante, simplemente seguir las indicaciones del asistente:

[slideshow_deploy id=’1121′]

Al finalizar, simplemente dirigirse a la consola de administración (ubicada en http://[DIRECCIÓN_IP]/admin) y autenticarse con la contraseña que se generó durante el proceso de instalación:

En mi caso, he configurado el servicio de Pi-Hole para que actúe como DHCP y DNS principal en mi red, de tal forma que todos los equipos que se conecten obtengan esos valores por defecto. Esto se puede configurar en el menú “Settings” -> “DHCP”.  Es importante tener en cuenta que si el servicio de Pi-hole actuará como servidor de DHCP, se debe deshabilitar previamente cualquier otro servicio de DHCP en la red (por lo general viene activo en el router inalámbrico).

En el caso que no se pueda configurar el servicio vía DHCP, simplemente se debe configurar de forma manual el servidor de DNS de cada equipo para que apunte a la dirección IP del equipo con Pi-hole.

Actualización de Pi-hole

Una vez instalado, de forma periódica es importante revisar si existen nuevas actualizaciones de los componentes de Pi-hole.

Para ello, se debe ejecutar el siguiente comando:

root@raspberrypi:~# /usr/local/bin/pihole -up

Si queremos simplemente comprobar si hay actualizaciones disponibles pero no ejecutar la instalación, se debe añadir el flag “–check-only”.

En mi caso, prefiero automatizar el proceso. Para ello, he añadido la siguiente entrada al crontab de root:

0 5 * * 1  /usr/local/bin/pihole -up

Con esto, a las 5 am. de todos los lunes de cada semana se instalan los paquetes disponibles de actualización de Pi-hole.

Pruebas para la validación de Pi-hole

Posterior a la instalación de Pi-hole y a la configuración de los clientes, se debe proceder a hacer pruebas del servicio. Para ello, se puede navegar aquí.

Si todo sale bien, en los logs de Pi-hole se podrán ver los resultados:

Usar listas negras adicionales (malware, spam, phishing, etc.)

Si las listas negras (blacklists) por defecto de Pi-hole no son suficientes, siempre se pueden añadir listas adicionales para optimizar el filtrado. En mi caso, uso las listas de “The Blocklist Project“, que incluye múltiples catálogos de filtrado con base en temas como ads, malware, phishing, ransomware, spam, tracking, etc. Para usarlo, simplemente se escoge la categoría a filtrar y el sitio web provee de la URL para añadir a la lista negra:

Finalmente, estas URLs se agregan a las listas negras de Pi-hole desde “Settings” -> “Blocklists”:

Otras páginas web con listas negras son:

Usar filtrados adicionales desde el DNS

Servicios de DNS como Cloudflare (quienes gestionan el servicio de DNS 1.1.1.1) incluyen mejoras en sus DNS que permiten el filtrado tanto de malware como de contenido para adultos en su servicio mejorado “1.1.1.1 for Families“.

En este caso, simplemente se cambia el DNS superior (upstream DNS) de Pi-hole desde “Settings” -> “DNS” y se configuran los siguientes valores, dependiendo de los filtrados que se quieran incorporar:

Malware:

  • 1.1.1.2
  • 1.0.0.2
  • 2606:4700:4700::1112
  • 2606:4700:4700::1002

Malware y contenido para adultos:

  • 1.1.1.3
  • 1.0.0.3
  • 2606:4700:4700::1113
  • 2606:4700:4700::1003

Para probarlos, simplemente visitar los siguientes dominios:

  • malware.testcategory.com
  • phishing.testcategory.com

Configurar DNS-over-HTTPS

En vez de usar peticiones de resolución de nombres (DNS) en texto claro (que es como funcionan normalmente los servicios de DNS con base en las RFC 1034 y RFC 1035) se pueden emplear peticiones empleando el mismo protocolo que se usa para navegar de forma segura: HTTPS. Con este método, las peticiones de resolución no podrán ser interceptadas ni manipuladas por ningún tercero.

Para ello, se requiere la instalación de otra herramienta de los espectaculares Cloudflare: cloudflared. Este software interceptará todas las peticiones de resolución realizadas por Pi-hole y las encapsulará a los servidores especificados empleando HTTPS.

Los pasos son muy sencillos:

Descargar el software desde la página de Cloudflare Argo Tunnel e instalarlo:

root@raspberrypi:/tmp# wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz
--2020-04-06 11:16:52--  https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz
Resolving bin.equinox.io (bin.equinox.io)... 34.235.56.240, 52.70.195.119, 52.207.93.234, ...
Connecting to bin.equinox.io (bin.equinox.io)|34.235.56.240|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 17707071 (17M) [application/octet-stream]
Saving to: ‘cloudflared-stable-linux-arm.tgz’

cloudflared-stable-linux-arm.tgz        100%[=======================>] .89M  7.41MB/s    in 2.3s

2020-04-06 11:16:55 (7.41 MB/s) - ‘cloudflared-stable-linux-arm.tgz’ saved [17707071/17707071]

root@raspberrypi:/tmp# tar xvfz cloudflared-stable-linux-arm.tgz
cloudflared
root@raspberrypi:/tmp# cp cloudflared /usr/local/bin
root@raspberrypi:/tmp# chmod +x /usr/local/bin/cloudflared
root@raspberrypi:/tmp# cloudflared -v
cloudflared version 2020.3.2 (built 2020-03-31-1710 UTC)
root@raspberrypi:/tmp#

Posteriormente, crear un archivo de configuración (config.yml) en /etc/cloudflared con el siguiente contenido (en “proxy-dns-upstream” también se pueden añadir los DNS de “1.1.1.1 for Families”, discutidos anteriormente):

proxy-dns: true
proxy-dns-port: 5053
proxy-dns-upstream:
  - https://1.1.1.1/dns-query
  - https://1.0.0.1/dns-query

Luego, instalar el servicio y verificar que funciona correctamente:

root@raspberrypi:/tmp# cloudflared service install
INFO[0000] Using Systemd
ERRO[0000] systemctl: Created symlink /etc/systemd/system/multi-user.target.wants/cloudflared.service → /etc/systemd/system/cloudflared.service.
INFO[0000] systemctl daemon-reload
root@raspberrypi:/tmp# systemctl start cloudflared
root@raspberrypi:/tmp# systemctl status cloudflared
● cloudflared.service - Argo Tunnel
   Loaded: loaded (/etc/systemd/system/cloudflared.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-04-06 11:36:40 BST; 9s ago
 Main PID: 11507 (cloudflared)
    Tasks: 11 (limit: 2200)
   Memory: 5.1M
   CGroup: /system.slice/cloudflared.service
           └─11507 /usr/local/bin/cloudflared --config /etc/cloudflared/config.yml --origincert /etc/cloudflared/cert.pem --no-autoupdate

Apr 06 11:36:39 raspberrypi systemd[1]: Starting Argo Tunnel...
Apr 06 11:36:40 raspberrypi cloudflared[11507]: time="2020-04-06T11:36:40+01:00" level=info msg="Version 2020.3.2"
Apr 06 11:36:40 raspberrypi cloudflared[11507]: time="2020-04-06T11:36:40+01:00" level=info msg="GOOS: linux, GOVersion: go1.12.7, GoArch: arm"
Apr 06 11:36:40 raspberrypi cloudflared[11507]: time="2020-04-06T11:36:40+01:00" level=info msg=Flags config=/etc/cloudflared/config.yml no-autoupdate=true o
Apr 06 11:36:40 raspberrypi cloudflared[11507]: time="2020-04-06T11:36:40+01:00" level=info msg="Adding DNS upstream" url="https://1.1.1.1/dns-query"
Apr 06 11:36:40 raspberrypi cloudflared[11507]: time="2020-04-06T11:36:40+01:00" level=info msg="Adding DNS upstream" url="https://1.0.0.1/dns-query"
Apr 06 11:36:40 raspberrypi cloudflared[11507]: time="2020-04-06T11:36:40+01:00" level=info msg="Starting DNS over HTTPS proxy server" addr="dns://localhost:
Apr 06 11:36:40 raspberrypi cloudflared[11507]: time="2020-04-06T11:36:40+01:00" level=info msg="Starting metrics server" addr="127.0.0.1:37693/metrics"
Apr 06 11:36:40 raspberrypi systemd[1]: Started Argo Tunnel.

Hecho esto, configuramos el servidor DNS en Pi-hole a 127.0.0.1#5053 y todo el tráfico estará encriptado empleando un túnel desde el dispositivo Raspberry Pi hasta el proveedor de DNS:

Conclusiones

La protección de tu privacidad debe ser la premisa a proteger desde el momento que haces uso de las tecnologías de la información. Para ello, es importante ser consciente del intrusismo descarado de múltiples empresas para obtener información de tus hábitos de navegación.

En este artículo se describió una de las múltiples herramientas para la protección de la nacegación. Adicionalmente, en mi caso empleo un túnel de VPN o de SSH desde cualquier otro dispositivo fuera de mi red (teléfonos móviles, por ejemplo) para obligar a que toda la navegación (incluyendo tráfico GSM) esté protegida. También siempre uso browsers configurados en modo privado, complementos adicionales en el browser como HTTPS Everywhere y bloqueadores de cookies. Aunque aún así, se minimiza el riesgo pero no se elimina completamente…

Comments

  • ¿podrías ayudarme a solucionar esto?
    pi@raspberrypi:~ $ chmod +x /usr/local/bin/cloudflared
    chmod: cannot access ‘/usr/local/bin/cloudflared’: No such file or directory
    pi@raspberrypi:~ $

    lukas255Lucas June 20, 2020
  • Perdo, queria decir esto:
    pi@raspberrypi:~ $ cp cloudflared /usr/local/bin
    cp: cannot create regular file ‘/usr/local/bin/cloudflared’: Permission denied

    lukas255 June 20, 2020
    • Hola:
      Tal parece que el problema es con los privilegios del usuario que estás usando. Intenta ejecutar el mismo comando empleando el usuario “root” o a través de “sudo cp cloudflared /usr/local/bin”
      Espero que te sirva.

      david July 23, 2020
  • Hola, concretamente cunado te refieres a que has configurado el dhcp y todo eso para que todos los equipos se conecten ¿Qué quiere decir exactamente? Asímismo ¿podríamos usar simplemente el DNS con la IP fija conectado al router, y filtrar directamente en el router?

    Muchas gracias

    Jairo García October 15, 2020
    • Hola:
      Hay varias formas de configurar el DNS en los dispositivos que emplearán Pi-hole: Una forma es manual (configuras equipo por equipo y le indicas que la dirección del DNS es la dirección de la Raspberry Pi con Pi-hole). La otra forma es automática y por eso el uso de DHCP: cuando un nuevo equipo (ya sea un teléfono móvil, una smart TV o un ordenador) se conectan a tu red, emplean el servicio de DHCP para obtener una dirección IP y otros datos, como el DNS. De esta forma, garantizas que todos los equipos que se conecten tendrán de forma automática el filtrado por DNS de Pi-hole. En mi caso, he configurado el servicio de DHCP del router inalámbrico para que use la Raspberry Pi como DNS. En versiones más recientes de Pi-hole ya se cuenta con un servidor de DHCP nativo.

      david November 28, 2020
  • Interesante articulo, bastante util. Lo que me genero duda es que mencionas: “incluyendo tráfico GSM”. ¿A que te refieres?

    Saludos

    dexter_one November 24, 2020
    • Hola:
      En este caso, en el artículo me refiero a que cuando navegamos a través de nuestro teléfono móvil (GSM/GPRS) el proveedor del servicio puede tener acceso a las URLs a que visitamos. En ese sentido, lo mejor es emplear un túnel de VPN entre tu dispositivo móvil y tu casa (por ejemplo), en donde tienes control de las URLs empleando Pi-hole. Con ello, toda la navegación desde tu teléfono móvil estará protegida.

      david November 28, 2020
  • Hola David buen día, soy nuevo con esto de Pi-Hole y acabo de instalarlo en mi Raspberry ya configure la IP de la raspberry como DNS en el ruter adicional al cual esta conectado por cable y tambien agregue su ip en mi equipo local pero al momento de abrir cualquier pagina Pi-Hole no bloquea nada de publicidad

    David February 22, 2021

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.