De kinderen van nu groeien op in een online wereld, waarin iedereen voortdurend met elkaar in verbinding staat. In bijna elk gezin zijn wel één of meer PC’s, laptops of tablets te vinden en steeds meer kinderen lopen met een smartphone rond. Linux Magazine onderzocht hoe je als ouder ervoor kunt zorgen dat het niet allemaal uit de hand loopt.

 

Wanneer je een computernetwerk beheert waar ook kinderen gebruik van maken, dan wil je dat dit zo veilig mogelijk is. Of het nu om je netwerk thuis gaat of dat van de club of het buurthuis, in alle gevallen is het raadzaam om ervoor te zorgen dat niet alles van buiten ongefilterd op het scherm kan verschijnen. Gelukkig kunnen wij met onze Linux systemen zelf het nodige regelen.

We beginnen met het gebruik van de computer zelf. Wanneer je een PC of laptop voor je kind inricht, dan spreekt het vanzelf dat je daarbij voor een open source omgeving kiest. Je hoeft dan minder zorgen te hebben over allerlei virussen en dergelijke. Verder biedt een Linux systeem een goede scheiding tussen wat de beheerder mag en kan en wat een gebruiker mag en kan. Daarnaast is de data van de gebruikers onderling goed af te schermen. Het is dan prima mogelijk een PC of laptop veilig met elkaar te delen.

Tijdsrestricties

Wanneer je wilt voorkomen dat je kind alle vrije tijd achter de computer doorbrengt, dan kan het zinvol zijn hier tijdsrestricties op aan te brengen. Debian systemen en systemen die daarvan zijn afgeleid, zoals Ubuntu, hebben in de directory /etc/security een aantal configuratiebestanden. In het bestand time.conf kun je tijdsrestricties configureren. Het gaat echter makkelijker via een grafische tool.

Voor Ubuntu is Timekpr ontwikkeld. Helaas wordt deze applicatie niet meer door Ubuntu zelf ondersteund. Wil je Timekpr installeren, dan moet je eerst een nieuwe repository toevoegen. In listing 1 staan de drie stappen die je moet doorlopen om Timekpr te installeren. Hiermee kregen wij Timekpr op Ubuntu 14.04 succesvol werkend.

Nadat je Timekpr geïnstalleerd hebt, vind je via het menu onder ‘Systeem’ de menukeuze Timekpr control panel. Je kunt hiermee eenvoudig per gebruiker instellen binnen welk tijdsvenster het systeem gebruikt mag worden. Je kunt per dag alleen een aangesloten tijdsvenster aangeven, dus niet ‘s morgens een halfuurtje en ‘s middags een uur. Ook is het mogelijk om per gebruiker een maximum aantal minuten computergebruik per dag in te stellen. Hiermee kun je in ieder geval de totale computertijd per dag limiteren. Deze instellingen kun je desgewenst per dag van de week apart instellen, bijvoorbeeld in het weekend meer computertijd of op vrijdag- en zaterdagavond wat langer. Je kunt op deze manier met Timekpr eenvoudig tijd voor huiswerk afdwingen.

 

Veilig internet

Het is vrijwel onmogelijk om alle schadelijke content tegen te houden en toch de gebruiker geheel vrij het internet op te laten gaan. Wat we wel kunnen, is met een firewall bepaalde porten open zetten of juist afsluiten. Daarnaast kunnen we proberen de inhoud die vanaf websites wordt opgehaald te filteren.

Dat laatste doen we met behulp van een zogenoemde proxy-server. Wij nemen hiervoor een specifiek systeem centraal in het netwerk op. Het is effectief om dit op één plek in het netwerk te doen in plaats van op ieder werkstation apart. Op deze manier is er maar op één plaats één filter nodig en al het verkeer dat via WiFi naar smartphones, tablets en laptops gaat, wordt dan gefilterd.

Wij bouwen een transparante webproxy, dit betekent dat al het webverkeer via het filter loopt. Zo kan je filteren zonder dat op de werkstations en laptops iets speciaals moet worden ingesteld. We richten het netwerk zo in, dat het onmogelijk is om buiten dit systeem naar websites toe te gaan.

Proxy-server

De webproxy bestaat uit een proxy-server met een webfilter plugin. De proxy-server bevindt zich tussen de webbrowser op het werkstation en het internet. Wanneer je in je webbrowser een webpagina opvraagt, dan gaat dit verzoek vanaf de browser naar de proxy-server. De proxy-server voert vervolgens het verzoek uit en haalt de betreffende content op en levert deze door aan de browser. Bij de afhandeling van het verzoek communiceert de proxy-server met de webfilter plugin om te beoordelen of de content kan worden doorgegeven dan wel moet worden tegen gehouden. De proxy-server kan verder nog andere nuttige taken verrichten, zoals het tegenhouden van weglekkende privacy-gevoelige informatie van je webbrowser. Sommige proxy-servers bewaren de gevraagde content een tijdje (‘cachen’), zodat indien de betreffende informatie nog een keer opgevraagd wordt, deze niet meer vanaf het internet moet worden opgehaald. Dit was vooral in de tijd van langzame modems een zinvolle functie. Caching proxy-servers waren de eerste webproxies, later verschoof het accent meer naar filteren.

Er bestaan verschillende open source proxy-servers, zoals Squid, Privoxy en Tinyproxy. Squid is een proxy-server met een lange bestaansgeschiedenis en werd vroeger al ingezet als caching proxy. Privoxy bestaat iets korter en is oorspronkelijk ontwikkeld om advertenties weg te filteren. Tinyproxy is ontwikkeld met als doel een proxy te maken die weinig resources vraagt. Al deze proxy-servers kunnen ingezet worden om webcontent te filteren. Pas wanneer je meer voortgezette stappen wilt zetten, worden de verschillen belangrijk.

Met de proxy-server kunnen we het ‘normale’ webverkeer filteren, bijvoorbeeld verkeer vanaf https://linuxmag.nl. Versleuteld verkeer (bijvoorbeeld vanaf https://linuxmag.nl) is natuurlijk niet op inhoud te controleren (daarom is het juist versleuteld) en loopt buiten de proxy om.

Hardware

Om een transparante proxy-server te kunnen realiseren, hebben we een machine met twee netwerkinterfaces nodig. De buitenste netwerkaansluiting verbinden we met de router en de binnenste met het interne netwerk. Zie hiervoor de bijgaande schematische afbeelding.

Op deze manier moet al het verkeer door de proxy-server en weten we zeker dat het niet mogelijk is om de server te omzeilen. Kijk dus even of je nog een moederbordje met twee netwerkaansluitingen hebt liggen. Een andere optie is een extra netwerkaansluiting met bijvoorbeeld een USB-naar-ethernet verloopkabel te realiseren.

Wanneer je uitsluitend draadloze systemen in je netwerk hebt, zou je ook kunnen overwegen om als tweede netwerkaansluiting een WiFi-dongle of iets dergelijks te gebruiken. Let er wel op dat die dan expliciet als accesspoint moet kunnen functioneren, veel WiFi-netwerkinterfaces laten dat namelijk niet toe of zijn daar niet geschikt voor. Het maken van een bridge met zo’n draadloze netwerkinterface wordt in dit artikel niet behandeld.

We gaan de machine als bridge inzetten, dit betekent dat je met iptables aan de slag moet. Voor wie dat nog niet eerder gedaan heeft, kan dit een klusje zijn waar je misschien wat meer tijd voor reserveren.

Nadat je hebt bedacht welke hardware je gaat inzetten, is de volgende keuze het besturingssysteem. Wanneer de proxy-server eenmaal draait, zul je deze voornamelijk remote gaan beheren. Het is dus niet nodig om een systeem met grafische omgeving op te zetten. Dat scheelt weer installatietijd en resources. We kiezen voor een ‘kale’ Debian installatie, dit betekent dat wanneer we tijdens de installatie de keuze krijgen voorgelegd wat voor systeem we willen installeren, je voor ‘ssh-server’ kiest (zie screenshot). Wij gaan hieronder uit van een Debian Jessie systeem. Overigens is dit geen dwingende keuze, wanneer je meer vertrouwd bent met een andere Linux distributie, dan kun je die ook installeren. De aanvullende software die we gaan installeren, is voor alle grotere distributies als package beschikbaar en dus eenvoudig toe te voegen. Wel kunnen de packages andere namen hebben en kunnen de gebruikte paden en directory-namen verschillen.

Voor wat betreft de inrichting van onze server kiezen wij hier voor Tinyproxy als proxy-server met Dansguardian als webfilter plugin. Hiermee kunnen we een webproxy opzetten die helpt om kindveilig te surfen en ook nog eens advertenties wegfiltert. Nadat de installatie van het kale Debian systeem is afgerond, log je in als gebruiker. Dit kun je op het systeem zelf doen, maar je kunt het ook over ssh vanaf je eigen PC of laptop doen. Met het commando ‘su –’ word je root (heb je in plaats van Debian voor Ubuntu gekozen, doe dan ‘sudo –i’). Sluit voorlopig even een van de twee netwerkaansluitingen aan.

Start met de installatie van Dansguardian en Tinyproxy: ‘apt-get install dansguardian tinyproxy’ en accepteer de te installeren dependencies. Het systeem probeert na de installatie Dansguardian op te starten, maar omdat deze nog niet geconfigureerd is lukt dit niet en wordt een foutmelding gegeneerd. Hier hoef je dus niet van te schrikken. Bij het installeren nam Debian meteen ook Clamav mee, dit is blijkbaar als dependency aangeduid. Clamav is een viruschecker die kan controleren op virussen voor Microsoft Windows machines. Om Clamav daadwerkelijk te gebruiken, zal het systeem hiervoor apart moeten configureren.

Configuratie

De volgende stap is het configureren van Tinyproxy en Dansguardian. Open het bestand /etc/dansguardian/dansguardian.conf in je favoriete editor, bijvoorbeeld met: ‘nano /etc/dansguardian/dansguardian.conf’. In de bovenste regels vind je een regel die begint met ‘UNCONFIGURED’, zet een hekje (#) aan het begin van deze regel. Verder moeten we nog de proxy-port aanpassen, in het configuratiebestand staat deze op 3128, dit moeten we veranderen in 8888. Scroll een paar schermen naar beneden om de regel met de proxy-port te vinden en verander 3128 in 8888. (Squid gebruikt port 3128, terwijl Tinyproxy port 8888 gebruikt.)

Hierna kunnen we een eerste test doen. Start Dansguardian met het commando ‘/etc/init.d/dansguardian start’. Wanneer je geen foutmelding krijgt, dan kun je met ‘ps aux’ zien dat Dansguardian gestart is. Start op je werkstation je webbrowser, bijvoorbeeld Firefox en stel daar nu als proxy-server het ip-adres van je Tinyproxy machine in met port 8080. Je kunt nu normaal surfen, open bijvoorbeeld de website www.npo.nl om dit te controleren. Ga naar /etc/dansguardian/lists, hier vind je een aantal bestanden met betrekking tot de filtering. Open het bestand bannedsitelist en zoek naar ‘List other sites to block’. Hier zie je badboys.com, voeg hieronder een regel toe en zet daar ‘npo.nl’ in (zonder aanhalingstekens). Herstart Dansguardian met /etc/init.d/dansguardian restart. Open in je browser opnieuw www.npo.nl. Je krijgt nu een pagina met de mededeling “Access has been denied”. Ook wanneer je de site ‘exampleadultsite.com’ probeert te openen, krijg je een access denied melding.

Naughtynesslimit

Dansguardian filtert webpagina’s niet alleen op de domeinnaam, maar ook door de inhoud van de webpagina’s tekstueel te scannen. We kunnen de mate waarin Dansguardian pagina’s filtert verder verfijnen. Open het bestand /etc/dansguardian/dansguardianf1.conf in je editor. Zoek naar de regel met de term ‘naughtynesslimit’. In deze regel vind je de drempelwaarde vanaf welke Dansguardian een access denied gaat geven. Standaard staat deze op 50 (filteren voor kleine kinderen), deze kan je desgewenst verhogen naar bijvoorbeeld 100 of 160. Je kunt met deze waarde zelf een beetje experimenteren.

We hebben nu gezien dat de proxy en het filter werken. Vervolgens moeten we deze als bridge in het systeem gaan inzetten. Een bridge is een systeem met twee netwerkaansluitingen die we op zo’n manier in het netwerk aansluiten dat al het verkeer wel door de bridge heen moet.

Bridge bouwen

Eerst moeten we een netwerk-bridge maken tussen de twee netwerkaansluitingen. Controleer met het commando ifconfig dat het systeem beide netwerkinterfaces ziet, bijvoorbeeld eth0 en eth1. We geven het systeem straks een vast ip-adres, zodat we via ssh de proxy kunnen beheren. Bepaal welk adres je hiervoor wilt gebruiken, bijvoorbeeld 192.168.1.2 als je een 192.168.1.xxx-netwerk hebt. Meestal heeft in zulke netwerken de router 192.168.1.1 als adres.

Installeer de betreffende tooltjes met ‘apt-get install bridge-utils’ (al dan niet met sudo er voor). Hierna gaan we de netwerkconfiguratie aanpassen. Op Debiansystemen en Ubuntu staat de netwerkconfiguratie in /etc/network/interfaces. Kopieer dit bestand als back-up, bijvoorbeeld naar /etc/network/interfaces-orig. Hierna pas je dit bestand aan, zie het voorbeeld in listing 2, kies hierin de juiste ipnummers.

Vervolgens open je het bestand /etc/sysctl.conf in je editor. Zoek naar de regel met ‘net.ipv4.ip_forward = 1’ en zorg dat hier geen hekje voor staat. Hierdoor weet de kernel dat je het forwarden van IPv4 packages toestaat. Reboot het systeem en kijk of je met ssh kunt inloggen.

Sluit de twee netwerkaansluitingen aan, zodat deze tussen je router en je werkstation zit, zodanig dat eth0 aan de kant van de router zit. Udev zorgt ervoor dat na het herstarten van het systeem steeds dezelfde netwerkaansluiting hetzelfde device wordt (bijvoorbeeld eth0 of eth1). Weet je niet welke van de twee interfaces eth0 is, wacht dan met aansluiten van de netwerkkabels tot het systeem op is en sluit dan één kabel aan. Je krijgt op de console een melding en anders zie je die in dmesg. Hierin vind je welke netwerkinterface zojuist is aangesloten. Nadat beide netwerkaansluitingen bekabeld zijn, moet je vanaf je werkstation nu met netwerkverkeer door de bridge heen kunnen. Probeer bijvoorbeeld te pingen naar je router of een webpagina te openen. Wanneer dit goed gaat, dan weet je dat de bridge goed is geconfigureerd.

Nu moeten we nog ervoor zorgen dat het http-verkeer door het filter gaat. Dit doen we via iptables. Met iptables beheer je de firewall. Neem de regels uit listing 3 over.

Nadat je ze via de commandline hebt ingetypt, kun je ze controleren met ‘iptables -L’ en ‘iptables -t nat -L’. De eerste regel zorgt ervoor dat gebruikers niet rechtstreeks met Tinyproxy kunnen connecten en zo het Dansguardian-filter overslaan. De tweede regel zorgt ervoor dat verkeer op port 80, dat vanaf het netwerk via eth1 binnenkomt, wordt omgeleid naar Dansguardian.

Wanneer je met iptables werkt, is het vaak handig om de regels via de commandline in te geven. Wanneer alles werkt zoals bedoeld, dan laten we iptables zelf de rules wegschrijven in een bestandje.

Om te zorgen dat de iptables rules worden geladen bij het booten van het systeem, is in Debian een package ‘iptables-persistent’ gemaakt. Dit installeer je met ‘apt-get install iptables-persistent’. Bij het installeren van dit package worden meteen de huidige rules gesaved, kies voor de ipv4 rules. De rules die op het moment van installeren actief zijn, worden opgeslagen in /etc/iptables/rules.v4. Dus wanneer je later wijzingen wilt aanbrengen, dan kun je die daar in wegschrijven. De beste manier is om ze eerst via de commandline in te typen en te testen. Wanneer zij goed werken, kun je ze via ‘iptables-save > /etc/iptables/rules.v4’ opslaan, zodat de regels een reboot overleven. Dit pad is zoals het in Debian is opgenomen. Het kan zijn dat dit bij andere distributies een ander pad is.

Tunnel

Je hebt nu een transparante webproxy gebouwd en daarmee je netwerk gezinsvriendelijk gemaakt. Desgewenst kun je met iptables verdere firewall-rules in je bridge opnemen. De bridge zit immers al op de juiste plek om al het verkeer te filteren. Wat gebruikers nog wel kunnen doen, is met bijvoorbeeld ssh een tunnel naar een systeem buiten je netwerk opzetten en via deze tunnel gaan browsen. Omdat hiervoor een willekeurige port gebruikt kan worden, kun je dit heel moeilijk via een firewall voorkomen. Maar totdat de kinderen een leeftijd hebben dat ze dat zelf bedenken, heb je in ieder geval een stuk veiliger netwerk.