Pi-Hole
Pi-Hole blockiert bereits auf Netzwerkebene Werbung und Internet-Tracker. Es arbeitet als DNS-Sinkhole und optional als DHCP-Server, und ist für den Einsatz in einem privaten Netzwerk gedacht. Pi-Hole wurde ursprünglich für den Raspberry Pi entwickelt, läuft aber auf allen Linux-Distributionen.
.;;,.
.ccccc:,.
:cccclll:. ..,,
:ccccclll. ;ooodc
'ccll:;ll .oooodc
.;cll.;;looo:.
.. ','.
.',,,,,,'.
.',,,,,,,,,,.
.',,,,,,,,,,,,....
....''',,,,,,,'.......
......... .... .........
.......... ..........
.......... ..........
......... .... .........
........,,,,,,,'......
....',,,,,,,,,,,,.
.',,,,,,,,,'.
.',,,,,,'.
..'''.
Installation
Die Installation am besten per Shell-Skript vornehmen.
Wichtig:
SELinux darf nicht auf „Enabled“ stehen.
Web-GUI: Ist kein Webserver mit PHP (cli pdo xml json intl) installiert, bringt das Installationsskript lighttpd sowie PHP aus dem Remi-Repo mit. Auf einem bestehenden Apache installiert es sich in
/var/www/html/pihole
.Details zum „Privacy Mode“: https://docs.pi-hole.net/ftldns/privacylevels/
Auf RHEL 8:
curl -sSL https://install.pi-hole.net | PIHOLE_SKIP_OS_CHECK=true bash
Das Skript fragt interaktiv ab:
Select Upstream DNS Provider: z.B. Cloudflare
Pi-hole relies on third party lists in order to block ads: StevenBlack's Unified Hosts List
Do you wish to install the web admin interface?: On
Do you wish to install the web server (lighttpd) and required PHP modules?: On
Do you want to log queries? : On
Select a privacy mode for FTL: Anonymous mode
Danach ist das Web-GUI über http://pi-hole/admin erreichbar, ein zufälliges Passwort wird am Ende des Skripts mitgeteilt.
Anschliessend können die Clients die Pi-Hole-Maschine als primären DNS-Resolver verwenden.
Passwort zurücksetzen
PIHOLE_SKIP_OS_CHECK=true sudo -E pihole admin password
Blacklists, Updates
Eine Sammlung an URLs, die Blacklisten mit Ad-Serving-Domains pflegen, kann z.B. von https://v.firebog.net/hosts/lists.php bezogen werden. Hat man sich für einige Blacklisten entschieden, werden diese im GUI unter http://pi-hole/admin/groups-adlists.php importiert. Danach muss die interne Datenbank /etc/pihole/gravity.db:adlists
mit Ad-Serving-Domains entweder per Web-GUI oder per Kommandozeile aktualisiert werden (letzteres am besten regelmässig per Cronjob):
PIHOLE_SKIP_OS_CHECK=true sudo -E pihole updateGravity
Log-DB begrenzen
Pi-Hole speichert die Logdaten in einer SQ-Lite Datenbank ab. Per default werden die Daten 365 Tage behalten. Um diesen Wert zu ändern muss die Datei /etc/pihole/pihole-FTL.conf
ergänzt werden.
echo "MAXDBDAYS=30" >> /etc/pihole/pihole-FTL.conf
Sollte die DB bereits Daten beinhalten welche älter als die angegebenen Tage sind, muss erst der Dienst gestoppt und die DB-Datei gelöscht/gesichert werden. Beim starten des Dienstes wird die DB-Datei dann neu erzeugt.
systemctl stop pihole-FTL.service
rm /etc/pihole/pihole-FTL.db
systemctl start pihole-FTL.service
Mehrere Pi-Holes mit Gravity-Sync
Quelle: https://github.com/vmstan/gravity-sync
Ein Pi-Hole wird als primärer Host festgelegt, dem mindestens ein weiterer Host folgt.
Am primären Pi-Hole nimmt man Konfigurationsänderungen vor, z. B. manuelles Zulassen von Listen, Hinzufügen von Blocklisten, Geräte-/Gruppenverwaltung oder Konfigurieren von benutzerdefinierten/lokalen Netzwerk-DNS.
Auf den angeschlossenen Pi-Holes installiert man zunächst Pi-Hole. Das Shell-Script
gravity-sync
überträgt die Daten vom primären auf die anderen Geräte, was für Ausfallsicherheit und Lastverteilung sorgt.
Auf beiden Pi-Holes die benötigten Tools installieren:
dnf -y install sqlite sudo git cronie rsync
Setup auf dem ersten Pi-Hole:
export GS_INSTALL=primary && curl -sSL https://gravity.vmstan.com | bash
Setup auf dem zweiten Pi-Hole:
ssh-keygen
export GS_INSTALL=secondary && curl -sSL https://gravity.vmstan.com | bash
Das interaktive Skript fragt diverse Einstellungen ab:
[?] Use Advanced Installation Options? (Y/N, default N): Y
[i] Advanced Configuration Selected
[?] Local/Secondary Pi-hole Instance Type? (Allowed: 'docker' or 'podman' or 'default'): default
[?] Primary/Remote Pi-hole Instance Type? (Allowed: 'docker' or 'podman' or 'default'): default
[?] Local/Secondary Pi-hole Settings Directory Path? (Leave blank for default '/etc/pihole'):
[?] Primary/Remote Pi-hole Settings Directory Path? (Leave blank for default '/etc/pihole'):
[?] Local/Secondary DNSMASQ Settings Directory Path? (Leave blank for default '/etc/dnsmasq.d'):
[?] Primary/Remote DNSMASQ Settings Directory Path? (Leave blank for default '/etc/dnsmasq.d'):
[?] Custom SSH Port to Connect to Primary/Remote host? (Leave blank for default '22'):
[?] Enable Ping/ICMP Check of Primary/Remote? (Y/N, default 'Y'):
[?] Custom SSH PKIF Location? (Leave blank for default '.ssh/id_rsa'):
[?] Enable Replicate 'Local DNS Records' Feature? (Y/N, default 'Y'):
[?] Enable Replicate 'Local CNAME Records' Feature? (Y/N, default 'Y'):
[✓] Saving Local CNAME Preference to gravity-sync.conf
[?] Change Backup Retention in Days? (Leave blank for default '3'):
[i] Required Gravity Sync Settings
[?] Primary/Remote Pi-hole Address (IP or DNS): pihole1
[✓] Testing Network Connection (ICMP)
[✓] Saving Primary/Remote Host to gravity-sync.conf
[?] Existing SSH User for pihole1: root
[✓] Saving User root to gravity-sync.conf
[i] Using existing ~/.ssh/id_rsa file
[✓] Importing New gravity-sync.conf
[i] Registering key-pair to pihole1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -p '22' 'root@pihole1'"
and check to make sure that only the key(s) you wanted were added.
[✓] Creating Bash Alias
[∞] Gravity Sync CONFIGURE completed after 72 seconds
Sync manuell anstossen (nach dem Setup unbedingt empfohlen!):
gravity-sync/gravity-sync.sh pull
Bemerkung
Das Admin-Passwort wird nicht synchronisiert, ist also auf jedem Pi-Hole tendenziell anders.
Vergleich zwischen der primären und der sekundären Datenbank durchführen:
gravity-sync/gravity-sync.sh compare
Automatische Syncs einrichten:
gravity-sync/gravity-sync.sh automate
[∞] Initalizing Gravity Sync (3.4.7)
[✓] Loading gravity-sync.conf
[✓] Evaluating arguments: AUTOMATE
no crontab for root
[i] Select synchronization frequency (in minutes)
[?] Valid options are 5, 10, 15, 30 or 0 to disable (default: 15):
[✓] Saving new synchronization task to crontab
[∞] Gravity Sync AUTOMATE completed after 4 seconds
Status der letzten automatischen Ausführung anzeigen:
gravity-sync/gravity-sync.sh cron
Logs einsehen:
gravity-sync/gravity-sync.sh logs
Am Ende die DNS-Einstellungen der Clients so anpassen, dass auch die weiteren Pi-Holes verwendet werden.
Built on 2024-11-18