Headless Pi-Hole

Ok dus je bent ook een PiHole fan? Mooi! Ik ook, het enige waar ik niet zo'n fan van ben is de webinterface en alles wat je daarvoor nodig hebt. PiHole draait bij mij op een Raspberry PI 3b+ en ik gebruik resources graag waarvoor ik ze nodig heb. Een webinterface is daar geen onderdeel van, zeker niet als er prima alternatieven zijn! Een en ander werkt wel een beetje anders, dus daarom deze uitleg. Doe er je voordeel mee!

Installatie

De basis van de installatie is simpel; volg gewoon de instructie op https://github.com/pi-hole/pi-hole/#one-step-automated-install. Onthoud dat je geen webserver wilt installeren, dus kies bij de vraag voor de 'Administratieve interface' voor het niet installeren hiervan. In sommige builds van PiHole zijn dit twee componenten, namelijk 'lighttpd' en 'web administration'. Je kunt er dan voor kiezen om wel de website te installeren (dan worden de web files aangemaakt), maar kun je dit op een alternatieve web server dan lighttpd plaatsen. Mocht je ook twee vragen krijgen, installeer ze dan allebei niet. Ten slotte voor de installatie: ik heb in eerdere installaties problemen gehad met foutief aanmaken van databases als je tijdens de installatie er voor kiest om geen default adlists te laten installeren. Mijn advies: kies er 1 en laat de rest weg. We gaan deze niet gebruiken, maar dit voorkomt in ieder geval installatieproblemen in sommige builds. Deze adlist gaan we aan het eind van deze guide weghalen, dus maak je geen zorgen.

Terminologie

Voor we verder gaan kijken we eerst even kijken naar de terminologie van PiHole, deze wordt - in deze context - nog belangrijker dan hij al was:

  • Gravity: het updatemechanisme die adlists en domainlists combineert tot een allesomvattende lijst
  • Adlist: lijst waaraan je block-lists toevoegt
  • Domainlist: lijst waar je afzonderlijke domeinen blacklist of whitelist
  • Faster-Than-Light: de engine die uiteindelijk de DNS-verzoeken accepteert of blokkeert

Configuratie en beheer

Om verder te gaan met de configuratie moeten we een meegeleverde tool gebruiken in plaats van de webinterface. Dit is de 'pihole'-tool. Hier kun je basale informatie mee zien, en wijzigen. PiHole als platform gebruikt twee databases:

  • Query database: hierin kun je zien welke queries er gedaan worden (deze database is te vinden in: /etc/pihole/pihole-FTL.db)
  • Domain database: hierin worden adlists en domainlists beheerd (deze database is te vinden in: /etc/pihole/gravity.db)
In deze guide gebruiken we alleen de domain database, dus gravity.db. In deze database zijn twee tabellen die we nodig hebben:
  • adlist: waar de adlists in opgeslagen zijn
  • domainlist: waar de domainlists in opgeslagen zijn
Nu we weten welke tabellen uit welke database we nodig hebben moeten kunnen we queries gaan doen. Dit is de supported manier volgens de developers van PiHole (zie: https://docs.pi-hole.net/database/. Dit kan alleen niet met de pihole tool, maar met sqlite3.

Adlist vervangen

Laten we beginnen met het vervangen van de adlist die met de installatie van PiHole is meegekomen, deze willen we vervangen. Hier doen we respectievelijk 3 SQL queries voor: select om te zien, delete om de oude weg te halen en een insert om een nieuwe adlist toe te voegen:
sudo sqlite3 /etc/pihole/gravity.db "select * from adlist"

Dit geeft een overzicht van de verkeerde adlist. Het belangrijkste in deze regel is het 1e nummer, het ID. Op basis van het ID kunnen we de lijst verwijderen:
sudo sqlite3 /etc/pihole/gravity.db "delete from adlist where id=IDHIER"

Ten slotte voegen we een nieuwe toe:
sudo sqlite3 /etc/pihole/gravity.db "insert into adlist (address,enabled) values ('https://dbl.oisd.nl',1)"

Daarna moet je nog 1 ding doen, namelijk Gravity zijn werk laten doen:
pihole -g

Domein toevoegen/verwijderen

Domeinen toevoegen of verwijderen kan ook door middel van de pihole en de sqlite3 tools. Dit is meer een kwestie van persoonlijke voorkeur. Het verschil is dat je met sqlite3 kunt differentieren tussen exacte match en wildcard match, de pihole tool kan dit niet:
sudo sqlite3 /etc/pihole/gravity.db "insert into domainlist (type,domain,enabled) values (1,'https://www.ikwilhiernietmeerbijkunnen.nl',1)"

Er zijn 4 mogelijke waarden voor 'TYPE':

  • 0: exacte whitelist
  • 1: exacte blacklist
  • 2: regex whitelist
  • 3: regex blacklist
Je kunt 'enabled' nog op 0 zetten, maar voeg hem dan liever niet toe..

Logging

Een van de meestgebruikte - doch slecht geimplementeerde - features van de webinterface was de logging. Met behulp van de pihole tool, kun je hier veel beter en real-time naar kijken:
pihole -t

Het enige voordeel van de webinterface was dat je hier direct op 'Block' kon klikken. Nu kan dat niet meer en moet je als trailen (-t) en als je iets ziet wat je wilt blokkeren, CTRL+C drukken en dan blokkeren via:
pihole -b DOMEINHIER

Je kunt een blacklisted domein ook whitelisten door de -b te veranderen in -w. Daarnaast kun je natuurlijk ook de bovengenoemde sqlite3 query gebruiken.

Trending

Je kunt ook statistieken ophalen via sqlite3, maar dan moet je de query database gebruiken. Het voorbeeld hieronder geeft de 10 meest voorkomende domeinen weer:
sudo sqlite3 /etc/pihole/pihole-FTL.db "select domain, count(domain) from queries group by domain order by count(domain) desc limit 10"

Je kunt ook het database bestand openen voor queries, dat doe je door:
sudo sqlite3 /etc/pihole/pihole-FTL.db
Nu kun je makkelijker en sneller door de database browsen, je moet alleen alle queries afsluiten met een ';'. Zo kun je een overzicht van alle tabellen in de database krijgen met:
.tables;

Kun je kolomnamen van een tabel krijgen met:
pragma table_info(queries);

En kun je complexere queries gaan verzinnen als:
select domain, count(domain) from queries where domain LIKE '%msn%' group by domain order by count(domain) desc limit 10;

Chronometer

De pihole tool heeft een ingebouwd consoleoverzicht, lijkt op een micro dashboard en dat noemen ze de 'Chronometer'. Je kunt hem starten door middel van
pihole -c

Je krijgt dan wat summiere statistieken en wat info over hoe pihole draait. Hier zijn uitgebreidere alternatieven voor zoals https://github.com/pi-hole/PADD

Last but not least, er zijn tal van adlists te vinden op internet. Ik raad echter af om een 'zo groot mogelijke collectie' aan te leggen. Ik garandeer je dat wanneer je collectie van 5.000.000 domeinen aanlegt, 98% van de domeinen nooit zult raken. Reclamebedrijven (en anderen) targetten specifieke landen, dus een Indisch bedrijf heeft weinig baat bij Nederlandse popups. Ga dus geen Indische adlist toevoegen, dat is alleen maar zonde van je resources. Wat wel nuttig is, is proberen een zo hoog mogelijke ad-hitrate te krijgen. Dus voeg alleen die adlists toe waar je ook echt last van hebt en whitelist vanuit daar desnoods naar een voor jou gewenste situatie.

Ohja, nog 1 ding, je hebt nu geen webinterface meer, daar kan PADD overigens niet zo goed mee overweg (je ziet een webversie van '-1'). Anyway: Pihole CORE en PiHole FTL worden nog wel gewoon geupdate met nieuwe binaries. Deze kun je installeren door middel van:
pihole -up

En beyond

Hieronder nog een lijstje met tips van dingen die je in de gaten moet houden:

  • De pihole server gebruikt een static nameserver, niet de pihole FTL engine. Als je deze wilt aanpassen, doe je dit in /etc/dhcpcd.conf en zet je nameservers (onderaan) op de nameserver die je wilt. Save de file en restart dhcpcd
    Als je dit vervolgens wilt checken, gebruik je: cat /var/log/pihole.log |grep nameserver
  • Als je in een headless pi-hole scenario de upstream DNS server wilt wijzigen, gebruik je: pihole -a setdns 1.1.1.1