Pi-Hole erweitert – Cyber Security

Den Anfang haben die vielen online Werbeeinschaltungen gemacht. Dann kamen Browser Add-Ons, um das Problem wieder in den Griff zu bekommen. Schlussendlich bin ich dann doch wieder bei Pi-Hole gelandet. Dieses mal aber gleich als Docker Container und davon gleich ein ganzer Schwarm.

Die Standardkonfiguration genügt natürlich nicht, denn ich möchte noch folgende Funktionen:

  • DNS over HTTPS (vgl.: DoH)
  • DNS request im round robin Verfahren an verschiedene DNS Provider
  • DNS Verkehr generell filtern
  • Wartung weitgehend automatisieren von
    • Positivlisten und Ausnahmen
    • Filterlisten nach regulären Ausdrücken
    • Negativlisten

Daraus ist dann meine ‚docker-compose.yml‘ Datei geworden. Es werden zwei Container geladen – Cloudflared und Pihole. Pihole filtert und nimmt die Clientanfragen intern entgegen. Cloudflared reicht die Anfragen nach draussen via DoH weiter und verteilt diese auch zwischen den aufgeführten Servern. (Anm.: das ist nur eine gut gemeinte Verschleierung, aber die Anfrage selber ist schon verschlüsselt und somit nicht im Klartext lesbar.)

version: "3"

# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
  cloudflared:
    container_name: cloudflared
    # Restart on crashes and on reboots
    restart: unless-stopped
    image: cloudflare/cloudflared
    command: proxy-dns
    environment:
      - "TUNNEL_DNS_UPSTREAM=https://1.1.1.1/dns-query,https://1.0.0.1/dns-query,https://9.9.9.9/dns-query,https://149.112.112.9/dns-query"

      # Listen on an unprivileged port
      - "TUNNEL_DNS_PORT=5053"

      # Listen on all interfaces
      - "TUNNEL_DNS_ADDRESS=0.0.0.0"

    # Attach cloudflared only to the private network
    networks:
      default:
        ipv4_address: 172.16.0.3

  pihole:
    container_name: pihole
    # pihole container repository including update database from file
    image: jacklul/pihole:latest
    
    environment:
      # set a secure password here
      WEBPASSWORD: 'XXXXXXXXXXXX'
      DNS1: '172.16.0.3#5053'
      DNS2: 'no'
    # Volumes store your data between container upgrades
    volumes:
      - '/data/pi-hole/etc-pihole/:/etc/pihole/'
      - './etc-dnsmasq.d/:/etc/dnsmasq.d/'
      - '/etc/localtime:/etc/localtime:ro'
      - '/data/pi-hole/pihole-updatelists/:/etc/pihole-updatelists/'
    cap_add:
      - NET_ADMIN
      
    restart: unless-stopped
    networks:
      default:
        # static IP address for pi-hole
        ipv4_address: 172.16.0.2

networks:
  default:
    driver: bridge
    ipam:
     config:
       # your chosen docker network here
       - subnet: 172.16.0.0/24

Datei und Verzeichnis für die Updatelisten anlegen – analog zum Pfad aus der yml Datei (vgl.: docker-compose.yml).

root@firewalla:~# ls -als /data/pi-hole/pihole-updatelists/pihole-updatelists.conf 
4 -rw-r--r-- 1 root root 324 Dec  7 11:03 /data/pi-hole/pihole-updatelists/pihole-updatelists.conf

Die yml Datei für den Pihole Docker hat den folgenden Inhalt:

ADLISTS_URL="https://v.firebog.net/hosts/lists.php?type=tick  https://raw.githubusercontent.com/you/adlists/master/my_adlists.txt"
WHITELIST_URL="https://raw.githubusercontent.com/anudeepND/whitelist/master/domains/whitelist.txt"
REGEX_BLACKLIST_URL="https://raw.githubusercontent.com/mmotti/pihole-regex/master/regex.list"

Die aktuellen Images holen mit:

pi@firewalla:~/.firewalla/run/docker/pi-hole (Firewalla Gold) $ sudo docker-compose pull

pi@firewalla:~/.firewalla/run/docker/pi-hole (Firewalla Gold) $ sudo docker image prune

Die Container starten

pi@firewalla:~/.firewalla/run/docker/pi-hole (Firewalla Gold) $ sudo docker-compose up -d --remove-orphans

Die alten Container und Versionen entsorgen, wenn alles funktioniert

pi@firewalla:~/.firewalla/run/docker/pi-hole (Firewalla Gold) $ sudo docker image prune

Der Benutzer „pi“ ist anscheinend bei Firewalla ein Überbleibsel. Die aktuelle Hardware unterscheidet sich doch ein wenig von einem Raspberry Pi.

Damit ist der Käse für einen Docker Container geschnitten. Schwarm und Konsorten beschreibe ich vielleicht ein nächstes Mal. Genauso, wie das Problem mit den Zertifikaten von Subdomainen, die in den letzten 24 Stunden ausgestellt wurden. Google beschäftigt sich zum Beispiel damit. Aber das ist ein eigenes Thema.

Quellen:
https://pi-hole.net
https://www.docker.com
https://github.com/jacklul/pihole-updatelists
https://github.com/cloudflare/cloudflared

Share on:

1 thought on “Pi-Hole erweitert – Cyber Security”

  1. Damit nichts „überläuft“ – nicht mehr Platz als notwendig, in Anspruch genommen wird, hilft mir dieses „Miniscript“, dass ich via Cron Job @daily laufen lasse. Dabei werden zuerst alle Docker Compose Konfiguationsdateien gesucht und für diese nach neuen Images jeweils gesucht. Neue Images werden auch aktiviert und daraufhin werden die nicht mehr verwendeten Images gelöscht.

    #!/usr/bin/env bash

    readarray -d “ composeConfigs < <(find . -type f -name docker-compose.y* -print0) for cfg in "${composeConfigs[@]}"; do docker-compose -f "$cfg" pull docker-compose -f "$cfg" up -d done docker image prune

    Antworten

Leave a Comment