Privoxy – De privacy enhancing proxy
- August 23, 2018
- 0
Met een proxy server krijg je meer controle over de browsers in je netwerk. Zo kan je ongewenste websites blokkeren voor je kinderen of pagina’s cachen om sneller te surfen. Privoxy is een proxy server die specifiek is ontwikkeld om je privacy te beschermen. In deze workshop leggen we je uit hoe dat precies in zijn werk gaat!
Voor wie niet zo vertrouwd is met het concept van een proxy server, leggen we dit nog even uit. Een proxy server is een extra server in je netwerk tussen jouw browser en de webservers waarnaar je surft. Je hoeft daarvoor zelfs geen extra machine te regelen: de proxy software kan ook gewoon op jouw desktop of laptop draaien. Het voordeel van een aparte machine (zoals een Raspberry Pi) is wel dat alle apparaten in jouw thuisnetwerk via de proxy server kunnen surfen. In je browser stel je vervolgens het IP-adres en het poortnummer van de proxy server in. Daarna stuurt je browser alle requests via de proxy server in plaats van rechtstreeks naar het internet. De antwoorden van de webservers komen ook via dezelfde proxy server terug. De proxy server is dus een soort doorgeefluik tussen jouw netwerk en het internet. Maar een proxy server doet vaak nog veel meer dan dat.
Proxy servers
De meeste proxy servers implementeren nog extra functionaliteit om de surfervaring van de clients te optimaliseren. Proxy software is vaak gespecialiseerd in één bepaalde toepassing. Zo is apt-cacher-ng ontwikkeld om software downloads onder Ubuntu of Linux Mint te versnellen, DansGuardian om ongepaste inhoud voor kinderen te blokkeren en Squid wordt meestal in grotere omgevingen gebruikt om webinhoud te cachen en/of te blokkeren. Het is ook mogelijk om meerdere proxy services met elkaar te verbinden: dat noemt men proxy chaining. Meestal combineert men dan een specifieke proxy service, zoals DansGuardian, met een meer algemene proxy server, zoals Squid. DansGuardian zorgt dan voor het blokkeren van inhoud en Squid voor de caching. Ook de bekende Tor client -om anoniem te surfen op het internet- is in feite een proxy service. Zo zou je zelfs drie proxy services achter elkaar kunnen gebruiken: Squid voor caching, Privoxy om je privacy te beschermen en tot slot Tor om je IP-adres te verbergen op het internet. In deze workshop beperken we ons tot een eenvoudige set-up met enkel Privoxy. Het verkeer van Privoxy forwarden via Tor is trouwens erg gemakkelijk: daarop komen we later nog terug.
Privacy
Privoxy bevat verschillende features om je privacy te beschermen op het internet. Om te beginnen filtert Privoxy al het inkomend webverkeer. Daarbij worden heel wat zaken geblokkeerd, onder andere advertenties, tracking gifs (onzichtbare afbeeldingen om je surfgedrag te monitoren), sommige cookies, pop-ups of vensters die van grootte veranderen en irritante html- of javascript-code (zoals knipperende tekst). Het precieze gedrag van die filters is erg nauwkeurig te configureren, maar gelukkig werkt de standaardconfiguratie in de meeste gevallen prima. Privoxy kan ook de headers van het uitgaand netwerkverkeer filteren, om bijvoorbeeld informatie te verbergen die je browser toevoegt aan elke request. In deze workshop concentreren we ons op het filteren van inkomend webverkeer, want dat is Privoxy’s belangrijkste functionaliteit.
Installatie
Privoxy bestaat al meer dan vijftien jaar en vind je dus zeker terug in jouw distributie. In Ubuntu of Linux Mint installeer je het pakket privoxy. Na installatie hoef je aan Privoxy verder niets te configureren: Privoxy draait al en luistert op poort 8118 op jouw machine naar binnenkomende requests. Je hoeft alleen je browser nog te configureren om Privoxy te gebruiken. We geven een voorbeeld voor Firefox, voor andere browsers is de procedure erg gelijkaardig. Ga naar Edit > Preferences en kies Advanced in de linkerbalk. Ga naar de Network-tab en klik op Settings… onder het Connection-kopje. Selecteer de optie Manual proxy configuration en vul volgende gegevens in:
– HTTP Proxy: localhost; Port: 8118
– SSL Proxy: localhost; Port: 8118
Sluit dit venster en surf nu naar de url p.p (dit is een shortcut die Privoxy voorziet). Is alles correct geconfigureerd, dan zie je nu Privoxy’s statuspagina. De titel geeft meteen aan dat Privoxy actief is (enabled, het is ook mogelijk om Privoxy’s filtering tijdelijk uit te schakelen). Verder bevat het menu enkele handige links die we verderop zullen gebruiken bij het configureren en troubleshooten.
Surfen met Privoxy
Alles staat nu klaar om te surfen via Privoxy. Open eens enkele van je favoriete websites en kijk of ze nog advertenties bevatten. Misschien ben je je niet eens meer bewust hoeveel advertenties de meeste pagina’s bevatten. Een leuke test is om eerst een pagina te openen zonder Privoxy, daarna de browser cache te legen en diezelfde pagina dan te openen mét Privoxy. Open tijdens jouw test misschien ook het Network-tabblad van Firefox’ ingebouwde Developer Tools met de sneltoets Ctrl-Shift-Q (of Ctrl-Shift-E vanaf Firefox 55). Die toont je meteen hoe lang het duurt om de pagina te laden en hoeveel data gedownload wordt. We deden een korte test met de homepage van een bekende Vlaamse krant die eigenlijk niet veel advertenties bevat. Zonder Privoxy had die 9 seconden nodig om 4.5MB te laden en mét Privoxy was dat 7 seconden voor 3.3MB.
Voor de eerste twee schermen wist Privoxy maar liefst 255 pixels aan verticale ruimte te besparen door drie advertenties weg te filteren. Op websites met meer advertenties is het effect natuurlijk nog groter. Wil je meer informatie over wat Privoxy precies met die webpagina gedaan heeft? Selecteer dan ‘Look up which actions apply to a URL and why’ op de p.p-pagina, vul de URL van de webpagina in en klik op Go. Je krijgt nu een lange lijst van acties die Privoxy heeft toegepast voordat de webpagina is weergegeven. Voorlopig zegt dit je misschien weinig, maar het is nuttige informatie als je bijvoorbeeld uitzonderingen wilt toevoegen voor bepaalde websites. Soms is Privoxy immers iets té ijverig waardoor een webpagina niet correct geladen wordt. Via een eigen actie-configuratie los je dergelijke problemen op.
Configuratie
Voordat we meer in detail naar de filters en acties kijken, lopen we eerst langs enkele algemene configuratie-opties. Die vind je terug in het bestand /etc/privoxy/config. Dat bestand is een slordige 2.000 regels lang, maar elke optie is dan ook uitgebreid gedocumenteerd. Een groot deel van de opties hoef je waarschijnlijk nooit te wijzigen. De eerste drie onderdelen mag je bijvoorbeeld overslaan. De interessante opties beginnen pas vanaf het vierde onderdeel (Access control and security):
-listen-address: dit moet je alleen aanpassen als je Privoxy op bijvoorbeeld een Raspberry Pi installeert om vanaf meerdere machines te gebruiken. Standaard kan enkel de machine waarop Privoxy draait ook surfen via Privoxy.
-enable-remote-toggle: zet deze optie op 1 om Privoxy tijdelijk in- of uit te kunnen schakelen vanuit je browser. Er verschijnt dan een extra optie ‘Toggle Privoxy on or off’ op de p.p-pagina. Dat is handig om de filtering snel uit te schakelen als je vermoedt dat een bepaalde website niet correct functioneert omwille van Privoxy. Uiteraard kan je de proxy-instellingen in je browser aanpassen, maar het voordeel van deze optie is dat Privoxy meteen voor alle browsers (en eventueel voor alle machines in je netwerk) inactief is.
Forwarding
In het vijfde onderdeel (Forwarding) geef je aan of Privoxy alle requests nog moet doorsturen naar een andere proxy server. Standaard gebeurt dat niet, zodat je Privoxy standalone kan gebruiken. Wil je bijvoorbeeld via het Tor-netwerk surfen? Privoxy bevat reeds de juiste configuratie-opties. Die hoef je alleen maar in te schakelen door het #-teken aan het begin van de regel weg te halen:
forward-socks5 / 127.0.0.1:9050 .
forward 192.168.*.*/ .
forward 127.*.*.*/ .
Uiteraard werkt dat alleen maar als je eerst de Tor-client installeert op je machine. De meeste andere opties in het configuratiebestand zijn alleen nuttig om problemen met Privoxy te troubleshooten. Als je de configuratie zou willen wijzigen, is dat waarschijnlijk omdat Privoxy de inhoud van bepaalde websites te agressief filtert. Die configuratie vind je terug in enkele andere bestanden onder /etc/privoxy, namelijk:
-default.filter: bevat tientallen filters om bepaalde inhoud te blokkeren.
-default.action: beschrijft de beschikbare acties voor Privoxy om uit te voeren op bepaalde webpagina’s. Een filter is maar één mogelijke actie: in afbeelding 5 zie je dat één webpagina in tientallen acties resulteert.
-match-all.action: de standaardacties die Privoxy uitvoert als er geen specifieke instellingen zijn voor het domein of de URL in kwestie.
-user.filter: om eigen filters te definiëren.
-user.action: om eigen acties te definiëren.
Wijzig alleen de laatste twee bestanden om de configuratie aan te passen. De andere bestanden worden immers overschreven bij elke upgrade van Privoxy. Jouw wijzigingen zouden dan verloren gaan!
Filters
In het default.filter-bestand vind je de precieze beschrijvingen van wat Privoxy nu precies doet om bepaalde inhoud te blokkeren. Elk filter bestaat uit een type (in hoofdletters), een naam en een korte beschrijving. Daarna volgen verschillende cryptische regels die steevast met “s” beginnen. Dat zijn patronen waarnaar Privoxy zoekt en die het vervangt door andere patronen (de s staat voor substitute). De patronen zelf zijn in zogenaamde Perl-compatible reguliere expressies geschreven. Misschien ken je al reguliere expressies van commandline tools, zoals sed en grep. Heb je nog nooit reguliere expressies gebruikt? Trek dan maar enkele uren uit om je erin te verdiepen! Meer informatie vind je bijvoorbeeld in de manpages van perlrequick en perlretut (enkel beschikbaar na installatie van het pakket perl-doc).
Gelukkig hoef je zelden een filter aan te passen of een extra filter toe te voegen. Twee voorbeeldfilters zijn: jumping-windows (om te verhinderen dat webpagina’s je browservenster van grootte of positie veranderen) en frameset-borders (om alle frames van een rand te voorzien waarmee je het frame groter of kleiner maakt). Wie enige kennis van HTML bezit, ziet meteen dat Privoxy de oorspronkelijke HTML-code van de webserver gewoon aanpast voordat het die terugstuurt naar jouw webbrowser.
Acties
Het belangrijkste configuratiebestand van Privoxy is ongetwijfeld default.action. Dat bevat een hele reeks acties (waaronder filters) en patronen waarop Privoxy die acties toepast. Elke actie begint met de naam van de actie tussen accolades, voorafgegaan door een + of een – om de actie in respectievelijk uit te schakelen. Bijvoorbeeld:
{+block}
Daarna volgen steeds één of meerdere regels met de patronen waardoor de actie geldt. Een patroon kan verwijzen naar een deel van een domeinnaam, bijvoorbeeld domeinen die beginnen met ad:
ad*.
Of naar een deel van het pad naar de webpagina, bijvoorbeeld een php-pagina met een parameter genaamd bannerid:
/.*bannerid=
Standaard bevat Privoxy al een configuratie die in de meeste gevallen goed zou moeten werken. Webinhoud filteren of blokkeren is immers steeds een delicate afweging tussen beveiliging en functionaliteit. Filter je te weinig, dan biedt Privoxy niet voldoende bescherming voor jouw privacy. Filter je te veel, dan werken bepaalde websites gewoon niet meer naar behoren. Daarom voorziet Privoxy al verschillende uitzonderingen voor websites die erg lastig te filteren zijn. Onder ‘Site-specific unblockers’ vind je bijvoorbeeld heel wat patronen die Privoxy niet mag blokkeren. Onder ‘Site-specific special rules’ vind je dan weer een aantal websites waarvoor Privoxy bepaalde acties uitschakelt. Om zulke uitzonderingen eenvoudiger te configureren, gebruikt Privoxy aliases. De fragile alias is bijvoorbeeld als volgt gedefinieerd:
fragile = -block -crunch-all-cookies -filter -fast-redirects -hide-referer
En verderop vinden we volgende code:
{fragile}
www.apple.com
Dat betekent dat Privoxy voor Apple’s website niets blokkeert, geen cookies tegenhoudt, geen filters uitvoert, enzovoorts.
Aangepaste regels
Na verloop van tijd kom je wellicht een webpagina tegen waarvoor Privoxy ten onrechte een bepaalde actie uitvoert. Wil je zeker zijn dat het probleem bij Privoxy ligt, schakel Privoxy dan even uit via de toggle op de status-pagina. Uiteraard wil je Privoxy niet altijd uitschakelen om die webpagina te bezoeken. De oplossing? Een eigen uitzonderingsregel aanmaken in /etc/privoxy/user.action. De mogelijke schuldige acties vind je via het eerder vermelde ‘Look up which actions apply to a URL and why’ op Privoxy’s status-pagina. We sommen hier enkele gangbare voorbeelden op, maar aarzel niet om de documentatie te raadplegen als je een ander probleem wilt oplossen. Een link naar de documentatie van jouw exacte Privoxy-versie vind je trouwens ook op de status-pagina.
We beginnen met een eenvoudig voorbeeld. Krijg je een foutmelding, zoals in afbeelding 8 te zien in je browser, dan heeft Privoxy de pagina geblokkeerd. Via de link ‘go there anyway’ laat Privoxy je alsnog de pagina bezoeken, maar handig is anders. Om de webpagina toe te laten, schakel je de block-actie uit voor het domein (of de url) in kwestie. Bijvoorbeeld:
{ -block }
ads.google.com
De URL voldoet aan maar liefst drie verschillende block-patronen in default.action, maar wij overschrijven dit in user.action.
Een tweede voorbeeld. Stel dat je graag de website van onze collega’s bij Hardware.info leest voor het laatste hardware-nieuws. Ook als niet-abonnee vind je hier een schat aan informatie, deels gefinancierd door advertenties. Wil je zo eerlijk zijn om de advertenties op die website niet te blokkeren? Voeg dan volgende code toe aan user.action:
{ allow-ads }
.hardware.info
‘Allow-ads’ is een alias voor de drie acties -block, -filter{banners-by-size} en -filter{banners-by-link}.
Niet-werkende sites
Bepaalde websites hebben er veel belang bij om zoveel mogelijk informatie over jou te vergaren. Gebruik je software zoals Privoxy, dan werken dergelijke websites vaak niet meer naar behoren. Uiteraard is het aan jou om te beslissen of je die websites wilt blijven gebruiken of niet. Het voordeel van Privoxy is dat je je privacy tenminste niet ten grabbel gooit voor elke website die je bezoekt. Merk je dat één van je favoriete websites echt niet meer werkt, maar wil je die tóch blijven gebruiken? Dan voeg je gewoon een uitzondering toe voor die ene website. Het beste is om enkel die acties uit te schakelen die problemen veroorzaken. Zo blijft je privacy toch nog maximaal beschermd voor die website. Vind je niet meteen de juiste actie of zijn er meerdere acties die roet in het eten gooien? Probeer dan eens één van de volgende ingebouwde aliases die het probleem vaak al oplossen:
-allow-all-cookies: om geen cookies te blokkeren.
-allow-popups: om pop-upvensters toe te staan.
-shop: workaround voor de meeste online winkels (cookies en pop-ups toestaan).
-fragile: een oplossing voor zogenaamde “breekbare” websites die erg gemakkelijk in de war raken door Privoxy.
Eenvoudig en krachtig
Aan de slag gaan met Privoxy is erg eenvoudig. Eén pakket installeren, je browserinstellingen aanpassen en je privacy is beter beschermd tijdens het surfen. Installeer je Privoxy op een Raspberry Pi, dan zijn meteen alle apparaten -computers, smartphones, tablets- in je netwerk beschermd. Maar na verloop van je tijd merk je misschien dat bepaalde websites niet helemaal correct werken of dat sommige advertenties tóch nog door de mazen van het net glippen. Dat los je op door aangepaste regels te configureren. Echt moeilijk is dat niet, maar je moet er wel enkele tekstbestanden voor aanpassen én je moet over enige kennis van reguliere expressies beschikken. Gelukkig is er voldoende documentatie beschikbaar en kan je je baseren op de talloze voorbeelden in Privoxy’s standaardconfiguratie. Het loont alleszins de moeite om een beetje tijd te investeren in Privoxy, want het maakt het surfen heel wat aangenamer!