Pihole

Instalar Pihole

La instalación de Pihole es muy sencilla, y no requiere de grandes requisitos para funcionar, ya que en si, el software es muy liviano.

Se puede instalar en casi cualquier cosa desde un servidor virtual mínimo, una Raspberry Pi o junto con otra instancia de cualquier cosa que no tenga configurado un listener en el puerto 53 (DNS)

Requisitos

Mín. 2 GB de espacio libre, se recomiendan 4 GB
512 MB de RAM

Como podemos ver, "cabe" en casi cualquier cosa que montemos.

A pesar del nombre, no está limitado a ejecutar Pi-hole en una Raspberry Pi. Cualquier hardware que ejecute uno de los sistemas operativos compatibles servirá. Pi-hole es compatible con distribuciones que utilizan systemd o sysvinit

Sistemas operativos compatibles

Distribución Versión Arquitectura
Raspberry Pi OS
(formerly Raspbian)
Buster / Bullseye ARM
Armbian OS Cualquiera ARM / x86_64 / riscv64
Ubuntu 20.x / 22.x / 23.x ARM / x86_64
Debian 10 / 11 / 12 ARM / x86_64 / i386
Fedora 36 / 37 / 38 ARM / x86_64
CentOS Stream 8 / 9 x86_64

Direccionamiento IP

Pi-hole necesita una dirección IP estática para funcionar correctamente (valdría también con una reserva DHCP).

Puertos

Servicio Puerto Protocolo Notas
pihole-FTL 53 (DNS) TCP/UDP Si tienes otro servidor DNS en ejecución, como BIND, deberás desactivarlo para que Pi-hole responda a las consultas de DNS.
pihole-FTL 67 (DHCP) IPv4 UDP El servidor DHCP es una característica opcional que requiere puertos adicionales.
pihole-FTL 547 (DHCPv6) IPv6 UDP El servidor DHCP v6 es una característica opcional que requiere puertos adicionales.
lighttpd 80 (HTTP) TCP Si ya tienes otro servidor web ejecutándose, como Apache, el servidor web de Pi-hole no funcionará. Puedes desactivar el otro servidor web o cambiar el puerto en el que escucha lighttpd, lo que le permite mantener ambos servidores web en funcionamiento.
pihole-FTL 4711 TCP FTL es el puerto del motor API y utiliza el puerto 4711 en la interfaz localhost. No se debe poder acceder a este puerto desde ninguna otra interfaz.

Ahora vamos a ver como instalarlo en un servidor del panel de Neodigit o en cualquier máquina con Debian

Instalación

La instalación es muy sencilla y bastará con ejecutar un simple comando

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

O bien descargar el ejecutable y ejecutarlo

wget -O basic-install.sh https://install.pi-hole.net
sudo bash basic-install.sh

También se puede instalar mediante un clon de su repositorio de git

git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole
cd "Pi-hole/automated install/"
sudo bash basic-install.sh
Instalación en Docker

También se puede instalar en docker, la forma más sencilla con docker copose creando un fichero docker-compose.yml:

version: "3"

# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    # For DHCP it is recommended to remove these ports and instead add: network_mode: "host"
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp" # Only required if you are using Pi-hole as your DHCP server
      - "80:80/tcp"
    environment:
      TZ: 'Europe/Madrid'
      WEBPASSWORD: 'TecnocraticaMola' #'set a secure password here or it will be random'
    # Volumes store your data between container upgrades
    volumes:
      - './etc-pihole:/etc/pihole'
      - './etc-dnsmasq.d:/etc/dnsmasq.d'
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    cap_add:
      - NET_ADMIN # Required if you are using Pi-hole as your DHCP server, else not needed
    restart: unless-stopped

Configurar equipos

El siguiente paso es configurar como DNS en nuestros equipos de red, para que usen nuestro Pihole cono servidor DNS de nuestra red.


Configurar el DHCP

Podemos configurar un servidor de DHCP en nuestra instancia de Pihole.

IMPORTANTE no debemos de tener otro servidor DHCP en nuestra red, ya que esto provocará problemas a la hora de asignar direcciones IP en nuestra red local a los dispositivos.

Para configurar un servidor DHCP iremos a nuestro menú del Pihole y habilitaremos la opción de DHCP, vamos a Settings -> DHCP Settings.png

Vamos a la pestaña DHCP

dhcp.png

 

Aquí podemos definir el rango de direcciones IP que se van a asignar dinámicamente por DHCP

En caso de que a algún equipo de la red le queramos asignar una dirección estática por DHCP, podemos ir a la parte inferior y configurar para una determinada MAC Address, la dirección IP

static_dhcp.png

 

Configurar un DNS Local

En algunas ocasiones necesitamos disponer de un servicio DNS local, por ejemplo queremos que los equipos estén en un dominio de nuestra oficina o de nuestra casa, por ejemplo micasa.local o dominio.micasa o tecnocratica.oficina

Para ello podemos configurar el DNS para que asigne a los equipos un nombre con dominio local y se resuelva su IP mediante este nombre.

Para ello vamos a Local DNS y en DNS records pondremos nuestro nombre de dominio que queremos configurar y las IP con los nombres de las máquinas

DNS.png

Por ejemplo, queremos crear un registro para nuestra máquina Windows de pruebas que está en la dirección IP 10.200.3.135 esta máquina la vamos a llamar eduardo.taboada.local. Para eso creamos un registro A con el nombre eduardo.taboada.local y la IP 10.200.3.135, y pulsamos en añadir (ADD)

DNS_registrado.png


Blocklists

Existen diversas fuentes para los bloqueos del Pihole, por defecto se instalan algunas, pero podemos encontrar en la red varias.

Aquí os ponemos algunas de las que existen

https://github.com/crazy-max/WindowsSpyBlocker
https://github.com/notracking/hosts-blocklists
https://oisd.nl/setup/pihole
https://github.com/AdguardTeam/AdguardSDNSFilter
https://easylist.to/
https://www.github.developerdan.com/hosts/
https://github.com/nickspaargaren/no-google

Algunas de las que aparecen como fuentes en aplicaciones como NextDNS

github.com/AdguardTeam/AdguardSDNSFilter
kb.adguard.com/general/adguard-ad-filters#mobile-ads-filter
github.com/StevenBlack/hosts
kb.adguard.com/general/adguard-ad-filters#tracking-protection-filter
github.com/notracking/hosts-blocklists
github.com/jerryn70/GoodbyeAds
kb.adguard.com/general/adguard-ad-filters#base-filter
github.com/CHEF-KOCH/NSABlocklist
github.com/AdAway/adaway.github.io
www.github.developerdan.com/hosts
github.com/crazy-max/WindowsSpyBlocker
kb.adguard.com/general/adguard-ad-filters#social-media-filter
someonewhocares.org/hosts
gitlab.com/quidsup/notrack-blocklists
pgl.yoyo.org/adservers
github.com/hagezi/dns-blocklists
github.com/Perflyst/PiHoleBlocklist
github.com/anudeepND/blacklist
easylist.to/pages/other-supplementary-filter-lists-and-easylist-variants.html
kb.adguard.com/general/adguard-ad-filters#russian-filter
github.com/EnergizedProtection/block
winhelp2002.mvps.org/hosts.htm
github.com/hagezi/dns-blocklists
sysctl.org/cameleon
easylist.to/pages/other-supplementary-filter-lists-and-easylist-variants.html
github.com/hagezi/dns-blocklists
github.com/hagezi/dns-blocklists
github.com/Yhonay/antipopads
forums.lanik.us/viewforum.php?f=102
github.com/privacy-protection-tools/anti-AD
easylist.to/pages/other-supplementary-filter-lists-and-easylist-variants.html
github.com/bigdargon/hostsVN
logroid.github.io/adaway-hosts
github.com/EnergizedProtection/block
www.github.developerdan.com/hosts
github.com/hagezi/dns-blocklists
easylist.to/pages/other-supplementary-filter-lists-and-easylist-variants.html
github.com/EnergizedProtection/block
github.com/yous/YousList
easylist.to/pages/other-supplementary-filter-lists-and-easylist-variants.html
hostsfile.org/hosts.html
firebog.net/about
gitlab.com/CHEF-KOCH/cks-filterlist
github.com/EnergizedProtection/block
github.com/ABPindo/indonesianadblockrules
github.com/MajkiIT/polish-ads-filter
github.com/EnergizedProtection/block
github.com/EnergizedProtection/block
github.com/EnergizedProtection/block
paulgb.github.io/BarbBlock
github.com/bkrucarci/turk-adlist
github.com/jdlingyu/ad-wars
github.com/finnish-easylist-addition/finnish-easylist-addition
github.com/jmdugan/blocklists
easylist.to/pages/other-supplementary-filter-lists-and-easylist-variants.html
github.com/tomasko126/easylistczechandslovak
github.com/lassekongo83/Frellwits-filter-lists
github.com/easylist/EasyListHebrew
github.com/VeleSila/yhosts
github.com/hufilter/hufilter
github.com/EasyList-Lithuania/easylist_lithuania
easylist.to/pages/other-supplementary-filter-lists-and-easylist-variants.html
notabug.org/latvian-list/adblock-latvian
github.com/nickspaargaren/no-google

Regexp

Existe también la opción de realizar el bloqueo a través de expresiones regulares (regexp).

Un ejemplo de esto lo podemos encontrar en la siguiente URL

Estas expresiones regulares son de este estilo:

# Regular Expressions:

^ad([sxv]?[0-9]*|system)[_.-]([^.[:space:]]+\.){1,}|[_.-]ad([sxv]?[0-9]*|system)[_.-]
^(.+[_.-])?adse?rv(er?|ice)?s?[0-9]*[_.-]
^(.+[_.-])?telemetry[_.-]
^adim(age|g)s?[0-9]*[_.-]
^adtrack(er|ing)?[0-9]*[_.-]
^advert(s|is(ing|ements?))?[0-9]*[_.-]
^aff(iliat(es?|ion))?[_.-]
^analytics?[_.-]
^banners?[_.-]
^beacons?[0-9]*[_.-]
^count(ers?)?[0-9]*[_.-]
^mads\.
^pixels?[-.]
^stat(s|istics)?[0-9]*[_.-]