Inicio
Artículos
Categorias
Etiquetas
Instalación de Pi-Hole en una raspberry pi
publicado el: 2022-4-5   actualizado el: 2022-4-5   incluido en: Servicios Web , Linux
palabras totales: 3151   tiempo de lectura: 15 mins  

Voy a instalar un bloqueador de anuncios para que todos los equipos que se conecten a mi intranet se puedan beneficiar de navegar por Internet sin la gran mayoría de anuncios, además de poder moderar los contenidos a los que acceden los niños.

Usaré Pi-Hole, que es un bloqueador de anuncios, gratuito y de código abierto, para Raspberry Pi.

Su código fuente está disponible en GitHub y se puede instalar en el sistema operativo Raspberry Pi con la siguiente línea de comando:

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

Instalación Pi-Hole

El proceso de instalación, es sencillo. Pi-Hole es un software liviano y está diseñado especialmente para Raspberry Pi, por lo que puedo instalarlo sin más en mi Raspberry Pi 3b con el comando arriba descrito.

En mi Raspberry acabo de instalar Raspberry Pi OS Lite (32bit) y he realizado la configuración básica desde la linea de comandos con sudo raspi-config , a saber:

  • Distribución del teclado
  • Idioma del sistema
  • Zona horaria
  • Acceso SSH
  • Contraseña por defecto del usuario pi.
    photo

Por último establezco una dirección IP estática para mi Raspberry Pi. Es algo que voy a necesitar luego al instalar pi-hole y así lo dejo hecho.

Para ello edito /etc/dhcpcd.conf con nano y añado las siguientes líneas al final.

1
2
3
4
interface eth0
static ip_address=192.168.100.10/24
static routers=192.168.100.1
static domain_name_servers=1.1.1.1 8.8.8.8

Guardo los cambios y cierro el archivo (CTRL+O, Enter, CTRL+X y reinicio la Raspberry para que los cambios tengan efecto.

Compruebo con ifconfig su correcta configuración.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
pi@raspberrypi:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.10  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::77f2:ed47:dd7c:d9c7  prefixlen 64  scopeid 0x20<link>
        ether b8:72:eb:25:c0:88  txqueuelen 1000  (Ethernet)
        RX packets 141304  bytes 60950856 (58.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 65434  bytes 29202381 (27.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 537642  bytes 37986658 (36.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 537642  bytes 37986658 (36.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

No voy a activar la Wi-Fi pues la conectaré directamente al router por cable.

Compruebo que tengo Internet por ejemplo con un ping y la preparo para poder conectarme por SSH desde mi portátil.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
pi@raspberrypi:~ $ ping google.com
PING google.com (142.250.200.110) 56(84) bytes of data.
64 bytes from mad41s13-in-f14.1e100.net (142.250.200.110): icmp_seq=1 ttl=110 time=30.2 ms
64 bytes from mad41s13-in-f14.1e100.net (142.250.200.110): icmp_seq=2 ttl=110 time=29.6 ms
64 bytes from mad41s13-in-f14.1e100.net (142.250.200.110): icmp_seq=3 ttl=110 time=29.5 ms
64 bytes from mad41s13-in-f14.1e100.net (142.250.200.110): icmp_seq=4 ttl=110 time=29.2 ms
64 bytes from mad41s13-in-f14.1e100.net (142.250.200.110): icmp_seq=5 ttl=110 time=29.6 ms
^C
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 29.154/29.630/30.246/0.351 ms

Me conecto vía SSH

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
user@user-pc:~
$ ssh pi@192.168.100.10
pi@192.168.100.10's password: 
Linux raspberrypi 5.10.63-v7+ #1459 SMP Wed Oct 6 16:41:10 BST 2021 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Nov 30 11:23:51 2021 from 192.168.100.3

Wi-Fi is currently blocked by rfkill.
Use raspi-config to set the country before use.

pi@raspberrypi:~ $

Y actualizo el sistema antes de instalar Pi-hole.

1
sudo apt update && sudo apt upgrade -y

Y eso es todo, ¡está listo para comenzar!

Instalación de Pi-Hole

Pi-Hole está disponible en este repositorio de GitHub y tienen un comando de una línea para instalarlo fácilmente.

Copio y pego este comando:

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

La instalación comienza con un asistente

  • Respondo Ok a las tres primeras preguntas.

  • Luego, el siguiente mensaje dice que necesita una IP estática (ya la he configurado). No es obligatorio, pero si cambiase la IP, perdería Internet, por lo que es recomendable mantenerla estática.

  • Elijo la interfaz para usar, eth0 para una conexión por cable, wlan0 en WiFi.

  • Lo siguiente es elegir un proveedor de DNS . Pi-Hole reenviará todas las solicitudes a los servidores DNS después de filtrarlas. Tomo la predeterminada (Google) y la cambiaré más tarde.

  • El asistente ahora me pide que seleccione listas de terceros para usar para bloquear anuncios :

​ creo que puedo conservarlas todas y cambiar / agregar algunas más tarde.

  • La siguiente pregunta es sobre los protocolos IPv4 / IPv6, donde deshabilito las direcciones IPv6.

  • Luego me pregunta acerca de la configuración de IP estática: recomiendo hacer clic en Sí para corregir su dirección IP.

  • La siguiente pantalla es un mensaje de advertencia sobre el uso de DHCP e IP estática en el mismo rango de red: pero la mayoría de las veces el enrrutador detectará su Raspberry Pi y no asignará esta IP a otra.

  • Luego me daría la dirección IPv6 si decidiese mantenerla habilitada.

  • Luego, el asistente me pide que habilite la interfaz de administración web, recomiendo habilitarla, es una característica importante en Pi-Hole.

  • En el siguiente paso, debo confirmar la instalación de Lighttpd. Es obligatorio para que la interfaz funcione, así que elijo “Activado”.

  • Ahora, debo elegir si deseo habilitar el registro de consultas . El software almacenará cualquier solicitud de DNS que realice y mostrará estadísticas sobre ella. Recomiendo habilitarlo por el momento, puede deshabilitarlo más tarde en la interfaz.

  • Finalmente, hay un modo de privacidad para seleccionar entre cinco niveles. Lo mismo, puedo cambiarlo más tarde: si lo estuviera instalando para una empresa, debería asegurarme de tener permiso para habilitar el registro de consultas y mostrar los detalles de cada solicitud, probablemente sea algo para consultar con el departamento legal.

Después de esto, el proceso de instalación continúa descargando e instalando nuevos paquetes según sus opciones.

La última pantalla, da la dirección de la interfaz web y la contraseña de inicio de sesión:

Configuración del cliente

Configuración DHCP

La forma más sencilla de configurar todos los dispositivos a la vez es cambiar la configuración en el servidor DHCP. En casa, probablemente es el router del ISP el que asuma este papel. No explicaré esto en detalle, ya que es diferente en cada enrutador. Puede estar en la configuración de DHCP o en la configuración de DNS.

En este caso lo único que hay que hacer es eliminar todos los valores y configurar como servidor DNS primario mi raspberry pi, por lo que asigno su IP 192.168.100.10 . No configuraré un servidor DNS IPv4 secundario, excepto si tuviese dos Raspberry Pi con Pi-Hole en la red.

De esta manera, cualquier dispositivo que use DHCP ahora usará el bloqueador de anuncios Pi-Hole de mi red local como servidor DNS. Puede llevar algunas horas actualizar la configuración del dispositivo en todos los dispositivos, hay que tener paciencia o desconéctelos / volver a conectarlos manualmente.

Nota: 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).

Configuración estática

Cuando no tengo acceso a la configuración anterior en el router de mi ISP, puedo editar manualmente la configuración de los equipos conectados:

En Windows 10:

  • Hago clic con el botón derecho en el “Menú de inicio” y selecciono “Conexiones de red”
  • Luego hago clic en “Cambiar la configuración del adaptador”
  • Hago clic derecho en mi conexión actual y elijo “Propiedades”
  • Hago doble clic en “Protocolo de Internet versión 4 (TCP / IPv4)”
  • Configuro el servidor DNS en estático e ingreso la dirección IP de la Raspberry Pi. Mantengo el servidor DNS secundario vacío

En Linux y Mac OS:

  • Si tengo una interfaz gráfica, encontraré la configuración de red en Preferencias del sistema
  • Si no es así, puedo editar el archivo /etc/resolv.conf y reemplazar el servidor DNS actual con la dirección IP de Raspberry Pi

En el móvil , está en la configuración del WiFi.

Interfaz web Pi-Hole

Pi-Hole viene con una excelente interfaz web, veamos esto ahora.

Primer inicio de sesión

Para acceder a la interfaz web, abro un navegador web y voy a http: // <RASPBERRYPI_IP> / admin . En mi caso, es http://192.168.100.10/admin

Una vez en la página web, hago clic en Iniciar sesión y escribo la contraseña que elegí durante la instalación anteriormente. Si todo está correcto, obtendré algo como esto:

En esta página, podré ver todas las estadísticas sobre el uso de Internet:

  • Consultas totales : cuántas solicitudes realicé
  • Consultas bloqueadas : cuántas solicitudes han sido bloqueadas
  • Porcentaje bloqueado = consultas bloqueadas / consultas totales
  • Dominios en lista negra : cuántos nombres de dominio tengo en las listas negras

También hay gráficos sobre consultas y evolución de clientes en las últimas horas. Dos gráficos circulares muestran datos sobre los tipos de consultas. Y debajo (no se ve en la imagen), enumera los dominios principales y los dominios bloqueados principales, y lo mismo para los clientes.

Secciones del menú

En el menú principal encontraré enlaces a las otras páginas y secciones:

  • Panel de control : la página que acabamos de ver
  • Registro de consultas : si está habilitado, todas las consultas que realizó y si Pi-Hole las bloqueó o no
  • Datos a largo plazo : el tablero muestra datos sobre las últimas 24 horas, en esta sección, puede especificar el rango de fechas
  • Lista blanca : aquí puede agregar dominios a la lista blanca (si están en una lista negra y no desea bloquearlos). Por ejemplo, estoy usando Google Analytics para este sitio web y está en la lista negra, así que agregué la URL aquí.
  • Desactivar : a veces es posible que deba desactivar Pi-Hole durante unos minutos o de forma permanente para hacer algo específico en su computadora. Aquí es donde puedes hacerlo
  • Herramientas : un montón de herramientas para depurar Pi-Hole, te dejaré descubrir esta parte
  • Configuración : todos los menús de configuración, llegaremos a esto en el siguiente párrafo
  • Cerrar sesión / Donar / Ayuda : estos deben estar claros 🙂

Ajustes

Profundizando en la parte de la configuración. Al hacer clic en el elemento del menú “Configuración”, obtengo varias pestañas con formularios de configuración:

Básicamente, puedo editar aquí todas las cosas que elegí anteriormente en el asistente de instalación.

  • Sistema : En esta primera pestaña, puedo verificar información sobre la red y la versión y uso de Pi-Hole. También tiene una “Zona de peligro” para reiniciar servicios, reiniciar Raspberry Pi o borrar registros
  • Listas de anuncios : en esta pestaña, puedo administrar los dominios incluidos en la lista negra. Puedo deshabilitar o eliminar listas negras predeterminadas o agregar una nueva
  • DNS : la pestaña DNS es donde puedo cambiar los proveedores de DNS y configurar ajustes de DNS más avanzados
  • DHCP : esta pestaña me permite habilitar un servidor DHCP en Pi-Hole. Esa es otra forma de configurar clientes si mi enrutador actual no lo hiciese. No debo olvidar deshabilitar el antiguo servidor DNS si quiero probar esta opción.
  • Interfaz API / Web : la siguiente pestaña es para varias configuraciones sobre la interfaz. Puedo enmascarar dominios para el tablero y personalizar la visualización de la interfaz
  • Privacidad : en esta pestaña, puedo cambiar el nivel de privacidad que vi en el asistente de instalación para aumentar o disminuir el nivel de privacidad en la interfaz
  • Teletransportador : Finalmente, lo que ellos llaman “Teletransportador” es solo una herramienta de Importación / Exportación, para mover la configuración de una Raspberry Pi a otra.

Consejos

Antes de finalizar este tutorial, hay algunas otras cosas que es importante saber sobre Pi-Hole.

Actualizar la lista negra

Las listas negras de dominios cambian todos los días, se deben actualizar periódicamente para mantener una buena protección.

Para hacer esto, debo ir a Herramientas> Actualizar gravedad y hacer clic en Actualizar .

Pi-Hole descargará cada archivo de lista negra de las fuentes especificadas y volverá a cargar la configuración.

Actualiza el software

Pi-Hole publica actualizaciones y arreglos con regularidad, por lo que debo actualizarlo. Para hacer esto, el procedimiento es simple:

Debo conectarme a mi Raspberry Pi a través de SSH y escribir el comando sudo pihole -up :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
pi@raspberrypi:~ $ sudo pihole -up
  [] Update local cache of available packages
  [i] Existing PHP installation detected : PHP version 7.4.25
  [] Checking for git
  [] Checking for iproute2
  [] Checking for whiptail
  [] Checking for ca-certificates

  [i] Checking for updates...
  [i] Pi-hole Core:	up to date
  [i] Web Interface:	up to date
  [i] FTL:		up to date

  [] Everything is up to date!
pi@raspberrypi:~ $ 

¿Hay alguna forma de usar Pi-Hole para bloquear más dominios que anuncios? Sí, puedo agregar mi lista y nombres de dominio personalizados. Por lo tanto, puedo usarlo para bloquear cualquier dominio: no es seguro para niños, dominios específicos o sitios web conocidos por instalar malware.

¿Qué puedo hacer si bloqueo un sitio web útil? Si sitios web que utilizo con frecuencia no funcionan después de la configuración de Pi-Hole, puedo agregar el nombre de dominio en el menú de la lista blanca para desbloquearlo.

¿Qué hace y cómo funciona Pi-Hole?

Básicamente lo que hace Pi-hole es ponerse entre mis dispositivos y los servicios DNS que me dan acceso a todas las páginas de internet, y filtrar todos los anuncios y servicios de tracking gracias a que consulta una serie de listas con dominios de internet que están «fichados». Con Pi-hole voy a conseguir lo siguiente:

  • Protección de la red: En lugar de los plugins de los navegadores u otro software en cada ordenador, instalo Pi-hole y toda mi red estará protegida.
  • Bloquear anuncios en aplicaciónes: El bloqueo a nivel de red te permite bloquear los anuncios en aplicaciones móviles y televisores inteligentes (SmartTV), independientemente del hardware o del sistema operativo.
  • Mejorar el rendimiento de la red: Como los anuncios se bloquean antes de ser descargados, el rendimiento de la red mejora.
  • Control de estadísticas: voy poder controlar las estadísticas de bloqueos en mi red y averiguar que servicios son los menos respetan mi privacidad.

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.

Desde el apartado Group Management -> Adlists se pueden modificar las listas que Pi-hole usa para admitir o bloquear direcciones.

En mi caso, uso las listas de “The Blocklist Project“ y las listas que aparecen en verde en The Firebog, 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. (otra opción es https://filterlists.com/).

Una vez he agregado las listas, procedo a actualizarlas desde el menú “Tools” “Upadte Gravity

Usar filtrados adicionales desde el DNS

Los 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 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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
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 hay que visitar los siguientes dominios:

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

Instalando cloudflared

La instalación es bastante sencilla, sin embargo, hay que tener en cuenta en qué arquitectura estoy realizando la instalación.

arquitectura armhf (Raspberry Pi de 32 bits)

Descargo el binario precompilado y lo copio en el directorio /usr/local/bin/ para permitir la ejecución por parte del usuario cloudflared. Procedo a ejecutar el binario con la bandera -v para comprobar que todo funciona

1
2
3
4
$ wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm
$ sudo cp ./cloudflared-linux-arm /usr/local/bin/cloudflared
$ sudo chmod +x /usr/local/bin/cloudflared
cloudflared -v

Configuración cloudflaredpara ejecutarse al inicio

Manera manual

Creo un usuario llamado cloudflared para ejecutar el demonio:

1
$ sudo useradd -s /usr/sbin/nologin -r -M cloudflared

Procedo a crear un archivo de configuración para el usuario cloudflared:

1
$ sudo nano /etc/default/cloudflared

Edito el archivo de configuración copiando lo siguiente en /etc/default/cloudflared. Este archivo contiene las opciones de la línea de comandos que se pasan a cloudflared en el inicio:

1
2
# Commandline args for cloudflared, using Cloudflare DNS
CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query

Actualizo los permisos para el archivo de configuración y el binario cloudflared para permitir el acceso al usuario de cloudflared:

1
2
$ sudo chown cloudflared:cloudflared /etc/default/cloudflared
$ sudo chown cloudflared:cloudflared /usr/local/bin/cloudflared

Luego creo el servicio cloudflared.service con el siguiente script y lo guardo en /etc/systemd/system/. Esto controlará la ejecución del servicio y permitirá que se ejecute en el inicio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
$ sudo nano /etc/systemd/system/cloudflared.service
[Unit]
Description=cloudflared DNS over HTTPS proxy
After=syslog.target network-online.target

[Service]
Type=simple
User=cloudflared
EnvironmentFile=/etc/default/cloudflared
ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

Habilito el servicio cloudflared.service para que se ejecute en el inicio, luego inicio el servicio y verifico su estado:

1
2
3
$ sudo systemctl enable cloudflared
$ sudo systemctl start cloudflared
$ sudo systemctl status cloudflared

Ahora compruebo que está funcionando correctamente, ejecuto el comando dig que deberá devolver una respuesta similar a la siguiente:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ pi@raspberrypi:~ $ dig @127.0.0.1 -p 5053 google.com

; <<>> DiG 9.11.5-P4-5.1-Raspbian <<>> @127.0.0.1 -p 5053 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12157
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 22179adb227cd67b (echoed)
;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             191     IN      A       172.217.22.14

;; Query time: 0 msec
;; SERVER: 127.0.0.1#5053(127.0.0.1)
;; WHEN: Wed Dec 04 09:29:50 EET 2019
;; MSG SIZE  rcvd: 77

Configuración de Pi-hole

Finalmente, configuro Pi-hole para usar el servicio local cloudflared como servidor DNS ascendente especificando 127.0.0.1#5053 como DNS personalizado (IPv4)

Desinstalar cloudflared

Si se instala de forma manual

Cortesía de https://discourse.pi-hole.net/t/uninstall-cloudflare/21459/3

1
2
3
4
5
6
7
$ sudo systemctl stop cloudflared
$ sudo systemctl disable cloudflared
$ sudo systemctl daemon-reload
$ sudo deluser cloudflared
$ sudo rm /etc/default/cloudflared
$ sudo rm /etc/systemd/system/cloudflared.service
$ sudo rm /usr/local/bin/cloudflared