Malware en reclame filteren met de Raspberry Pi en Pi-hole

Noud van Kruysbergen
0

Veel dingen wil je al uit het internetverkeer halen voordat het je huis binnenkomt, zoals crypto-dieven, phishing-websites, tracking-code en agressieve reclame. Pi-hole filtert dat er meteen uit voor het hele (ook draadloze) netwerk. Het is makkelijk te installeren en met een browser te configureren.

Pi-hole werkt als een zwart gat in het netwerk dat schadelijke en irritante content opslokt – vandaar de naam. Het technisch uitgangspunt is snel uitgelegd: Pi-hole zit als een DNS-proxy tussen de clients in het netwerk en de DNS-server van de provider. Op basis van filterlijsten bepaalt hij welke DNS-requests naar de DNS-server doorgestuurd worden en welke hij blokkeert.

Als een client bijvoorbeeld naar het ip-adres van ct.nl vraagt, stuurt de proxy de request door en wordt het antwoord met de ip-adressen 185.173.21.78 (IPv4) respectievelijk 2a0b:3100:100:34::21:78 (IPv6) naar de client teruggestuurd.

Wil een client echter het ip-adres van een domein weten dat op een zwarte lijst staat, beantwoordt de proxy de request met zijn eigen adres. Als de client daarop probeert om een HTTP-verbinding daarmee te maken, levert Pi-hole een website terug met daarop de melding dat de toegang geblokkeerd werd. De DNS-proxy filtert verbindingen op die manier heel effectief zonder dat het hele dataverkeer omgeleid hoeft te worden – dat heeft dan ook geen gevolgen voor de performance. Pi-hole kan zich om alle clients in een lokaal netwerk bekommeren, van pc’s en smartphones tot smart-tv’s en IoT-apparaten. Daar is geen software-installatie op de clients voor nodig.

Opensource tools

Het Pi-hole-project vindt het wiel niet opnieuw uit, maar gebruikt populaire opensource tools als de DNS-server dnsmasq en de webserver lighttpd. Voor het filteren worden gangbare blacklists gebruikt, waar in totaal meer dan 100.000 domeinen op staan – meestal van reclamebedrijven.

Het installeren en configureren van Pi-hole wordt door een set-upscript gedaan. Dat zet de DNS-filters voor je klaar en vergt geen diepgaande kennis over netwerktechnieken of Linux. De belangrijkste instellingen, zoals het beheer van de filterlijsten, kun je vervolgens via de overzichtelijke webinterface doen. Die levert ook interessante statistieken over de DNS-requests van de clients. Als je dieper in de materie wilt duiken, kun je dit open doe-het-zelf-systeem naar hartenlust aanpassen.

Pi-hole is heel schappelijk wat de eisen aan de hardware betreft: het is gemaakt om te gebruiken met een Raspberry Pi met minstens 512 MB geheugen, maar draait ook op andere Linux-machines onder Ubuntu, Debian, Fedora en CentOS. Een ouder Raspberry Pi-model volstaat al. Die heb je vast wellicht nog ergens in een la liggen.

In dit artikel beschrijven we het installeren op een Raspberry Pi binnen een Fritzbox-netwerk. Als je met Docker werkt, is er een Pi-hole-image om bijvoorbeeld van een uitbreidbare NAS van QNAP, Synology enzovoort een filterende DNS-proxy te kunnen maken. We hebben bij dergelijke scenario’s wel erg zitten worstelen met het gebruik van IPv6 en kunnen dat dan ook zeker niet aanraden.

Pi-snelstart

Pi-hole is op een Raspberry Pi snel aan de praat te krijgen. Als je al een Raspberry Pi hebt draaien, kun je meteen door naar het deel over het installeren van Pi-hole. Download anders eerst de laatste Raspbian-versie en pak de image uit. Voor Pi-hole heb je genoeg aan een tot het hoogstnodige gereduceerde Lite-versie. Zet de Raspbian-image vervolgens op een minstens vier gigabyte grote geheugenkaart die je speciaal voor Pi-hole wilt gaan gebruiken – de oorspronkelijke inhoud gaat immers verloren.

Bij Windows kan dat allemaal heel snel met Etcher of Win32 Disk Imager. Selecteer bij ‘Select image’ de te installeren Raspbian-image en vervolgens met ‘Select drive’ de stationsletter van de kaartlezer. Door op de knop ‘Flash!’ te drukken, wordt de image naar de kaart gekopi eerd. Daarna staat op de kaart een FAT32-partitie met de naam ‘boot’. Maak daar een leeg bestand aan met de naam ‘ssh’ om via SSH bij de Raspberry Pi te kunnen komen.

Netwerkkabel

Omdat DNS latentiegevoelig is, moet je de Pi bij voorkeur via een netwerkkabel op het netwerk aansluiten. Als het niet anders kan, omdat je bijvoorbeeld een Raspberry Pi Zero zonder LAN-interface hebt, kun je de mini computer op de volgende manier ook via wifi verbinden: maak op de bootpartitie simpelweg een bestand aan met de naam wpa_supplicant.conf met de volgende content:

ctrl_interface=DIR=/var/run/
wpa_supplicant GROUP=netdev
update_config=1
country=NL
network={
ssid=”<SSID van je wifi >”
psk=”<wifi -wachtwoord>”
key_mgmt=WPA-PSK
}

Stop de geheugenkaart daarna in de Raspberry Pi en sluit hem aan op de voeding. Hij start dan op en zal binnen een minuut in je netwerk zichtbaar zijn met de hostnaam ‘raspberrypi’. Vervolgens maak je een SSH-verbinding met die host om Raspbian te configureren en Pi-hole te installeren.

Linux en macOS hebben standaard een SSH-client, maar bij Windows 10 kun je ook op een eenvoudige manier een OpenSSH-client activeren: zoek via het startmenu naar ‘Apps en onder delen’, klik op ‘Optionele onderdelen beheren’ en vervolgens ‘Een onderdeel toevoegen’. Installeer daar ‘OpenSSH Client (Beta)’. Als je die niet ziet, ga je bij de Systeeminstellingen naar ‘Bijwerken en beveiliging’.

Na een herstart kun je bij de Opdrachtprompt dan het commando ssh gebruiken. Het volgende commando maakt verbinding met de Raspberry Pi: ssh pi@raspberry.

Wachtwoord veranderen

Voer het standaard geconfigureerde wachtwoord ‘raspberry’ in, en dan ben je aangemeld als de standaardgebruiker pi. Als eerste moet je het standaard wachtwoord dan veranderen met passwd. Maak het wachtwoord niet al te makkelijk, want iedereen die het weet en zich in hetzelfde netwerk bevindt, kan zich bij je Raspberry Pi aanmelden en hem via sudo met rootrechten naar believen beheren – en ook het internetverkeer analyseren, omleiden en vervalsen. Kies dus een zo veilig mogelijk wachtwoord en bewaar het in je wachtwoordmanager.

Daarna werk je het besturingssysteem en de componenten met

sudo apt-get update
sudo apt-get upgrade

weer helemaal bij. Dat kan een kwartiertje duren, maar daarna is de Raspberry Pi helemaal startklaar.

Pi-hole installeren

Het installeren van Pi-hole kun je makkelijk handmatig doen.Je kunt echter ook gaan voor een kant-en-klare Raspberry Pi met Rasbian en Pi-hole al geïnstalleerd, dan kun je een aantal van de volgende stappen overslaan.

De ontwikkelaars bieden een installatiescript dat je met één commando kunt downloaden en uitvoeren:

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

Het script bekommert zich om het installeren van alle benodigde scripts en afhankelijkheden. Tijdens het installeren hoef je alleen een paar info-vensters met de spatiebalk als ‘OK’ te bevestigen. Het script vraagt ook naar een paar configuratieparameters: bij ‘Select Upstream DNS Provider’ vul je bijvoorbeeld de DNS-server in die Pi-hole voor de name-resolving moet gebruiken. Als je een router gebruikt, kun je bij ‘Custom’ daar het beste het bijbehorende IPv4-adres invullen, waardoor de DNS-requests de gebruikelijke weg bewandelen nadat ze door Pi-hole gefilterd zijn.

IP-adres

De requests van de clients gaan dan eerst naar Pi-hole en daarna naar de router en de daar ingestelde DNS- server. Daarmee zorg je ervoor dat de hostnaamresolving in het lokale netwerk blijft functioneren en je voor de webinterface van je router bijvoorbeeld fritz.box of router.asus.com kunt blijven gebruiken. Als je een andere DNS-dienst wilt uitproberen omdat je bijvoorbeeld de DNS-dienst van je provider niet vertrouwt of die te langzaam vindt, kun je bij de instellingen van je router een andere DNS-server invullen, zoals die van Quad9 (9.9.9.9).

Pi-hole werkt in het lokale netwerk standaard via IPv4 en IPv6. Bij de volgende stap heb je de mogelijkheid een van beide protocollen te deactiveren. In de meeste gevallen is het aan te raden om de standaard instelling te laten zoals die is.

De Raspberry Pi heeft een statisch ip-adres nodig, zodat hij door de clients altijd te bereiken is. Daarom stelt het set-upscript dit in. Daarvoor wordt het op dat moment gebruikte ip-adres gebruikt dat de Raspberry Pi via DHCP van de router gekregen heeft . Dat is meestal een goede keuze. Dat wordt alleen problematisch als het geval zich voordoet dat de router dat ip-adres op een gegeven moment aan een andere client toekent. Dat probleem kun je oplossen door het ip-adres van de Pi bij de router vast in te stellen.

Webinterface installeren

Daarna vraagt het installatiescript of de webinterface geïnstalleerd moet worden. Dat moet je zeker doen, want dat vergemakkelijkt het beheren van de filters enorm. Vervolgens moet je beslissen of Pi-hole de DNS-requests van de clients moet loggen. Het logbestand is een interessante informatiebron om achter de door de clients aangevraagde domeinen te komen. Dat is met name behulpzaam bij het verfijnen van de filterregels. Als je het loggen inschakelt, moet je wel zorgen voor toestemming van alle medegebruikers binnen je netwerk.

Het installatiescript weet nu alles wat het weten moet en gaat de benodigde componenten downloaden en die configureren. Korte tijd later zal het script melden dat het installeren gelukt is en je alle relevante data tonen, zoals het IPv4- en IPv6-adres, de link naar de webinterface en een random gegenereerd administrator wachtwoord. Noteer die gegevens of maak een screenshot. Als de installatie gelukt is, kom je via http://raspberrypi/admin bij de webinterface van Pi-hole. Het door de installer genoemde adres http://pi.hole/admin werkt nog niet omdat de clients nog niet geconfigureerd zijn.

Clients configureren

Om te zorgen dan de clients hun DNS-requests in het vervolg aan Pi-hole stellen, moet je het IPv4- en IPv6-adres ervan nog als DNS-server instellen. Als je het dataverkeer van alle clients in je netwerk wilt filteren, dan is één instelling in de router al voldoende. Daarmee deel je aan de clients via DHCP mee naar welk adres ze de DNS-requests moeten sturen. Bij een Fritzbox zit die instellingsmogelijkheid bij ‘Home Network / Home Network Overview’ op het tabblad ‘Network Settings’. Klik op de knop ‘IPv4 Addresses’ onder ‘IP Addresses’ en vul bij ‘Local DNS server’ onder ‘Home Network’ dan het IPv4-adres van de Raspberry Pi in. Herhaal die stap vervolgens voor IPv6.

Als je alleen het netwerkverkeer van specifieke clients wilt filteren, stel je daarop het ip-adres van de Pi in bij de netwerk instellingen. Bij Windows 10 vind je de betreff ende instelling door in het startmenu te zoeken naar ‘Netwerkstatus’ en ‘Adapter opties wijzigen’. Klik met rechts op de gewenste netwerkverbinding en op ‘ Eigenschappen’. Daarna open je de eigenschappen van ‘Internet Protocol versie 4 (TCP/IPv4)’ en vul je het ip-adres van de Pi-hole-pi in bij ‘De volgende DNS-serveradressen gebruiken / Voorkeurs-DNS-server’. Dat herhaal je indien nodig vervolgens nog voor IPv6.

Om voor elkaar te krijgen dat de clients de nieuw ingestelde DNS-server gaan gebruiken, kan het nodig zijn de netwerkverbinding kort te verbreken. Of alles goed ingesteld is, kun je herkennen aan het feit dat de webinterface van de Pi-hole-installatie nu ook te bereiken is via het adres http://pi.hole/admin.

Om ervoor te zorgen dat de Pi via IPv6 betrouwbaar in het lokale netwerk te benaderen is, moet je je router in ieder geval lokale v6-adressen (Unique Local Addresses, ULA) laten uitdelen. Bij de Fritzbox zitten die instellingen onder ‘Home Network / Home Network Overview / Network Settings / IPv6 Addresses / Unique Local Addresses’. Activeer daar de optie ‘Always assign unique local addresses (ULA)’.

Rondleiding door de interface

Er komen bij een DNS-server interessante data langs, die een blik in het internetgebruik van de clients mogelijk maken. Pi-hole laat die data op zijn webinterface overzichtelijk zien en toont bij de Dashboard-weergave bijvoorbeeld het totale aantal afgehandelde DNS-requests en hoeveel daarvan er geblokkeerd zijn. Bovendien kun je achterhalen welke domeinen het vaakst bezocht zijn en welke clients het meest actief zijn.

De weergave werkt zich automatisch zelfstandig bij en ziet er door het responsieve design ook op een smartphone goed uit. De ‘Query Log’ levert een gedetailleerde inkijk in de laatste DNS-requests. Daar zie je welke clients wanneer naar welke domeinen gezocht hebben en of een request geblokkeerd werd (‘Pi-holed’). Bovendien kun je de opgevraagde domeinen met een muisklik op de blacklist of whitelist zetten – die laatste is vooral belangrijk als een website of een programma niet meer werkt zoals normaal omdat een noodzakelijke verbinding door Pi-hole geblokkeerd werd.

Blokkeren maar

In de kolom ‘DNSSEC’ staat of Pi-hole het DNS-antwoord van zijn bron cryptografisch kon verifiëren. Via het menu-item ‘Disable’ kun je het filteren voor een bepaalde tijd uitschakelen – bijvoorbeeld om een website te kunnen bezoeken die niet wil werken als er een actieve adblocker gebruikt wordt. Die functie werkt dan wel meteen voor alle clients. Na afloop van de ingestelde tijdsduur trekt Pi-hole het schild dan weer omhoog.

In het menu onder ‘Tools’ kun je de blokkeerlijsten bijwerken (‘Update Lists’) en met ‘Query adlists’ controleren of en op welke filterlijsten een bepaald domein staat. ‘Tail pihole.log’ laat realtime het huidige logbestand zien. Daarmee kun je over de schouder van dnsmasq meekijken wat die aan het doen is.

Een elementaire beheertaak als het herstarten van het systeem en het verwijderen van het logbestand kun je doen bij ‘Settings’. Via het submenu ‘Block Lists’ kun je instellen welke blacklists er gebruikt moeten worden. Pi-hole is in principe bedoeld om te werken als adblocker, maar hoeft niet op die manier gebruikt te worden: op twee van de lijsten staan alleen domeinen die vaak met malware te maken hebben en dus opvielen doordat ze malware verspreiden of als deel van de infrastructuur daarvan werken (Command-and-Control-server).

Als je niet tevreden bent met de ingestelde lijsten, kun je in het invoerveld onderaan de lijst eigen blacklists toevoegen. Op de Nocoin-lijst staan bijvoorbeeld enkele domeinen die ervoor zorgden dat de browsers cryptocoins gingen minen. Als je online reclame geen probleem vindt en voornamelijk browser-mining wilt voorkomen, dan kun je de Nocoin-lijst als enige filterlijst instellen.

Meer trucs

Je kent nu alle elementaire functies om Pi-hole te kunnen starten en beheren. Het filtersysteem kan echter meer: in het FAQ-deel van het projectstaat een complete documentatie. Je kunt Pi-hole bijvoorbeeld ook via SSH en Terminal besturen. Het commando pihole -c start een live statistiek met de naam chronometer, die er duidelijk meer nerdy uitziet dan de fraaie webinterface. Met pihole -up krijg je de Pi-hole-installatie weer helemaal up-to-date. Met de parameter -r roep je de configuratiewizard, zoals je die de eerste keer doorlopen hebt, weer opnieuw aan. Dat kan handig zijn om de Pi-hole in een ander netwerk te installeren.

Onze ervaringen met Pi-hole zijn voornamelijk positief. Het filtersysteem deed zijn werk met de standaardconfiguratie al goed en filtert bijna alle reclame-uitingen er betrouwbaar uit. Pi-hole blokkeerde 30 tot 50 procent van alle DNS-requests zonder dat dit tot zichtbare beperkingen van het internetgebruik leidde. Ook op een smartphone was te merken dat het filter actief was omdat zelfs in-app-reclame en verbindingspogingen naar analysebedrijven als Mixpanel geblokkeerd werden – zolang die maar via een DNS-request binnengehaald worden.

Slechts in een enkel geval moesten we elementen van een website op de whitelist zetten omdat we die door het herkennen van een adblocker anders niet konden gebruiken. Of je online reclame door Pi-hole of een browseruitbreiding wilt laten blokkeren blijft echter een gewetenskwestie: voor veel website-exploitanten is reclame immers een belangrijke – en vaak ook de enige – inkomstenbron.

 

Meer maker-projecten lees je in Maker Magazine

Meer over

Pi-hole

Deel dit artikel

Lees ook

Vliegtuigen spotten met een Raspberry Pi

Met een Raspberry Pi, de FlightAware-dongle en de PiAware-software kun je de vliegtuigen spotten die boven je huis langskomen.

Bekijk je energieverbruik met een Raspberry Pi

Als er bij jou thuis een slimme meter geïnstalleerd is, heb je met een Raspberry Pi een simpele mogelijkheid om het verbruik aan gas en stroom realtim...

Interessant voor jou

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er