De serie ‘Zet je eigen server op’ zoomt deze keer in op pfSense. Dat pakket richt zich op de kerntaken van router en firewall. Het is bovendien erg populair, flexibel én opensource.

pfSense is een opensource FreeBSD-distributie, maar dat betekent niet dat je FreeBSD van haver tot gort moet kennen. Immers, het pakket laat zich geheel beheren vanuit een gebruiksvriendelijke webinterface. De mogelijkheden zijn erg uitgebreid, zoals je kunt zien op www.tinyurl.com/pfsense-functies. Gezien de naam en de afstamming – pf staat voor packet filtering en pfSense is ontstaan als een afsplitsing van m0n0wall – zal het je niet verbazen dat pfSense in eerste instantie een krachtige firewall is waarmee je het pakketfilter granulair kunt controleren en wat ook bandbreedtecontrole en pakketprioritering mogelijk maakt. De tool doet tevens dienst als (nat-)router, dhcp- en dns-server en captive portal en ondersteunt verder nog dynamisch dns, vpn en multi-wan met load balancing. Bovendien laten heel wat externe pakketten zich met een druk op de knop in pfSense integreren, zodat je ook gemakkelijk de functionaliteit van bijvoorbeeld een authenticatie- of proxyserver toevoegt.

We tonen je hoe je pfSense installeert en configureert, hoe je firewall-regels creëert, nat en port forwarding activeert en externe pakketten toevoegt. Kom je ooit ergens vast te zitten, dan staat er een erg actieve community voor je klaar op forum.pfsense.org.

Op dit moment kent pfSense de stabiele release 2.1. Deze kan je ook wel als een virtuele toepassing downloaden (met name in de vorm van een ova-pakket – Open Virtualization Archive – zodat je die in omgevingen als VMware of Virtualbox kan importeren), maar wij gaan ervan uit dat je de installatie op een harde schijf wilt uitvoeren. In principe is een bescheiden pc voldoende – 100 MHz Pentium, 128 MB ram en 1 GB harde schijf zijn de officiële minimumeisen – maar veel hangt af van de beoogde transfersnelheden en functionaliteiten. Aangezien je de machine ongetwijfeld ook als router en firewall zal willen inzetten, heb je in elk geval minimaal twee netwerkkaarten nodig – drie, indien je tevens een DMZ wilt opzetten.

Surf naar www.pfsense.org/mirror.php?section=downloads en klik een naburige host aan, zoals Coltex in Amsterdam. Die biedt heel wat verschillende versies aan (zie ook www.tinyurl.com/pfs-versies), maar wij kiezen voor pfSense-LiveCD-2.1-RELEASE-i386.iso.gz. Merk op dat er ook een 64-bits versie bestaat, die dus meer geheugen kan aanspreken, maar de 32-bits variant is het grondigst uitgetest en werkt ook prima op een 64-bit systeem. Pak dit archiefbestand uit en brand het iso-bestand vervolgens op een cd. Het is de bedoeling dat je met deze cd de machine opstart waarop je pfSense wilt installeren.


Slechts een kleine greep uit de beschikbare downloads…

Afhankelijk van je pc moet je wellicht nog een ommetje naar het bios maken om de bootsequentie goed in te stellen (optische schijf eerst). Of je roept via een toets (als F10 of F12) een speciaal bootmenu op en je selecteert zelf je cd/dvd-station. Kort nadat je systeem van cd is opgestart, laat je doorstarten met Boot pfSense [default]. Wat later geef je via de I-toets aan dat je de Installer aan het werk wilt zetten. Op een bepaald moment krijg je onder meer nog de gelegenheid de toetsenbordindeling (keymap) in te stellen; dat wordt wellicht iets als dutch.iso.acc.kbd. Nog een stadium verder kan je kiezen tussen een Quick/Easy Install of Install pfSense. We gaan ervan uit dat je slechts één harde schijf hebt aangesloten (die je helemaal aan pfSense wilt toewijzen) en dan mag je de snelle/makkelijke installatie-optie selecteren. Besef wel dat de inhoud van je (eerste) harde schijf door deze operatie overschreven wordt!

Nog wat verder kies je voor Standard Kernel en even later mag je het systeem herstarten en kan je de cd verwijderen. We nemen aan dat je (in dit stadium) geen vlan’s wilt creëren en dus antwoord je met N op de desbetreffende vraag. Nu is het even opletten: je krijgt een overzicht van de gedetecteerde netwerkkaarten te zien en het is de bedoeling dat je elke kaart aan de juiste interface koppelt (wan of lan). Ben je niet zeker om welke kaart het gaat, dan kan je de netwerkkabels er even uittrekken en (via de A-toets) de automatische detectie activeren. Dan merk je vanzelf wel welke connectie beschikbaar komt, waarna je de bijhorende naam kunt invullen. Je zult merken: standaard krijgt je lan-interface het adres 192.168.1.1.



De installatie vergt niet noodzakelijk veel input van de gebruiker. 

Nu kan je de netwerkkabel van de lan-interface aan een switch hangen. De andere machines uit je netwerk verbind je dan eveneens met deze switch. Stel deze machines in op dhcp: je zult merken dat ze automatisch een adres krijgen binnen het 192.168.1.0/24-bereik, aangezien op de pfSense-machine een dhcp-server actief is.

Nu kan je pas echt aan de slag. Start op een van deze netwerkmachines een browser op en stem die af op https://192.168.1.1. Als alles goed is, krijg je nu het aanmeldvenster van je pfSense te zien. De initiële ID is admin met als wachtwoord pfsense. Een configuratiewizard start automatisch op (indien niet, open het menu System en kies Setup Wizard). Vul een zelfgekozen hostnaam en domein in, evenals een primaire en secundaire dns-server. Voor zover die niet door je internetprovider worden toegewezen, gebruik je eventueel de servers van OpenDNS: 208.67.222.222 en 208.67.220.220. De ntp-server kan je ongemoeid laten en als tijdzone stel je iets in als Europe/Amsterdam. In de volgende schermen configureer je desgewenst nog de wan- en lan-interface. Bij wan kan je uit vier types kiezen: Static, dhcp, PPPoE en pptp, afhankelijk van je situatie (provider). Zoals gezegd staat het lan-adres standaard ingesteld op 192.168.1.1, maar dat valt hier eventueel aan te passen. Helemaal op het einde kies je liefst een ander, stevig admin-wachtwoord. Druk vervolgens op Reload en geef pfSense de tijd alle aanpassingen door te voeren (circa 2 minuten). Na afloop kom je via Click here to continue on to pfSense webConfigurator in je dashboard terecht. Die geeft je detailinformatie over je pfSense-systeem.

Mocht je het internet niet op kunnen, dan bevindt je wan-netwerk zich wellicht in een private adresruimte. In dat geval open je het menu Interfaces, kies je wan en verwijder je onderaan het vinkje bij Block private networks. Vergeet wijzigingen niet telkens vast te leggen met de knop Save. Klik je de grote pfSense-knop (linksboven) aan, dan krijg je het statusvenster te zien. Het is niet uitgesloten dat je bij Version een link krijgt aangeboden naar pfSense-update. Ook is het mogelijk dat updates zich niet laten installeren wanneer die niet digitaal ondertekend zijn. Dat valt aan te passen via System, Firmware, Updater Settings: hier plaats je dan een vinkje bij Allow auto-update firmware images with a missing or invalid digital signature to be used. Tot slot doe je er verstandig aan af en toe de pfSense-configuratie te backuppen: dat doe je via het tabblad Diagnostics, waar je Backup/Restore kiest. Via de knop Download configuration geef je dan een geschikt pad mee voor de backup (in xml-formaat). Via de optie Restore configuration kan je zo’n backup dan altijd nog terugzetten. Overigens is een compleet herstel niet altijd nodig: op het tabblad Config History kan je namelijk stapsgewijs naar (de snapshot van) een vorige configuratie terug.


Een setup wizard gidst je door de noodzakelijke configuratie-instellingen.


Het dashboard biedt een handig overzicht van je pfSense-systeem.

De firewall is de core business van pfSense. Het gaat om een ‘stateful firewall’ en pfSense houdt van elke verbinding gedetailleerde informatie bij in een ‘state table’. Die kan je op elk moment raadplegen via het tabblad Diagnostics, States (of door Show states aan te klikken op je Dashboard). Standaard laat de firewall alle uitgaande verkeer toe – van lan naar wan – maar wordt al het binnenkomende verkeer geblokkeerd (behalve uiteraard als het om datapakketjes gaat die bij een gekende actieve connectie horen).

Voor je aan de slag gaat met het creëren en finetunen van firewallregels moet je wel goed beseffen dat verkeer door zo’n regel alleen wordt gefilterd op de interface waar dat verkeer wordt geïnitieerd. Concreet: vertrekt het verkeer bijvoorbeeld vanuit je lan, dan moet je die regel ook op de lan-interface instellen, ongeacht de bestemming van dat verkeer.

Stel, je wilt voorkomen dat specifieke machines uit je netwerk kunnen ‘pingen’. Dan ga je als volgt te werk. Ga naar het tabblad Firewall en kies Rules. Open het tabblad Lan en klik op het plus-knopje Add new rule. Bij Action stel je Block (of Reject) in. De interface laat je staan op Lan, bij Protocol kies je icmp en het icmp-type stel je in op Echo request. Laat je Source ingesteld op Any dan geldt de regel voor alle apparaten binnen je netwerk. Je kunt dat bijvoorbeeld ook tot één enkele pc beperken – in dat geval kies je Single host or alias en vul je het bijhorende ip-adres in. Wil je alleen pingen naar buiten beperken, kies bij Destination dan Lan subnet en plaats een vinkje bij Not. Eventueel plaats je een vinkje bij Log om de blokkades (tijdelijk) te kunnen inspecteren. De rubriek Advanced geeft nog veel meer opties voor verdere finetuning. We laten het hier echter bij en klikken op Save: de regel wordt toegevoegd. Bevestig met Apply changes.

Mocht de regel niet functioneren, dan heeft dat ongetwijfeld te maken met de volgorde van de regels in de firewall: pfSense loopt die namelijk ‘chronologisch’ (van boven naar beneden) af. Staat jouw regel bijvoorbeeld onder de standaardregel Default allow Lan to any rule, dan zal die worden genegeerd. Het is dan zaak jouw regel boven die andere te krijgen: plaats in dat geval een vinkje bij jouw regel en klik op het knopje move selected rule before this rule, bij de standaardregel. Nu werkt het wél zoals verwacht, zoals de logs zullen bevestigen: zie Status, System logs, Firewall.


De regel moet niet alleen juist geconfigureerd zijn, hij moet ook nog in een logische volgorde staan.


Pingen van deze client naar www.pcmweb.nl (144.76.139.4) botst op een ‘njet’.

pfSense fungeert ook als router en ondersteunt (uiteraard) nat-functionaliteit (Network Address Translation). Zo kunnen verschillende pc’s uit je netwerk zich via eenzelfde publieke ip-adres met het internet verbinden. De router onthoudt dan wel van welk (interne) apparaat een specifieke aanvraag kwam.

Heb je een eigen webserver draaien op een van de apparaten in je netwerk en wil je die ook van buitenaf bereikbaar maken, dan kan dat als volgt. Ga naar het tabblad Firewall en kies deze keer Nat, Port forward. Druk op het knopje om een nieuwe regel te creëren, met de volgende instellingen. De Interface stel je in op Wan, aangezien je van buitenaf wilt opereren en het Protocol laat je op TCP staan. Source kan je ingesteld laten op Any (tenzij je de connectie zou willen beperken tot specifieke hosts). Bij Destination kies je Wan address (van je pfSense-router). Bij Destination port range selecteer je http. Mocht je provider deze poort (80) blokkeren, dan zit er weinig anders op dan een ander, niet-geblokkeerd poortnummer te gebruiken (bijvoorbeeld 8080). Uiteraard moet dit poortnummer dan ook expliciet worden meegegeven bij een connectie van buitenaf. Redirect target IP stel je in op het lan-ip-adres van het apparaat waarop je server draait en bij Redirect target port vul je de poort in waarop je webserver draait – 80 of 8080. Bevestig met Save: de nieuwe regel wordt toegevoegd en de bijhorende firewallregel wordt gecreëerd.

Om een connectie te maken met je server moet je dus wel het wan-ip-adres van je router kennen. Vervelend, maar wel eenvoudig op te lossen met een (gratis) dynamische dns-dienst die dan een (zelfgekozen) hostnaam aan dat ip-adres zal koppelen. Overigens kan pfSense die koppeling tussen ip-adres en hostnaam intact houden: dat leg je vast via het tabblad Services, bij Dynamic DNS, waar je de betreffende service selecteert en zowel hostnaam als accountgegevens invult.


Ook voor een ‘simpele’ port forwarding-regel zijn er heel wat opties mogelijk.


pfSense kan ook met heel wat diensten voor ‘dynnamisch dns’ overweg.

Zoals gezegd laat pfSense zich met tal van externe modules uitbreiden, de zogenoemde ‘packages’. Wil je weten welke modules al zijn geïnstalleerd, open dan het menu System, kies Packages en ga naar het tabblad Installed Packages. De kans is groot dat je op dit moment nog een lege lijst aantreft. We tonen hoe je zelf zo’n pakket toevoegt.

Ga naar het tabblad Available Packages, waar je een honderdtal pakketten aantreft. Besef wel dat flink wat van deze pakketten door de gebruikersgemeenschap zijn ontwikkeld: je hebt dus geen garanties (van de makers van pfSense) dat die vlekkeloos werken of zullen worden doorontwikkeld. Hoe dan ook, je kunt hier terecht voor modules rond netwerkbeheer, antivirus, authenticatie (zoals freeradius), proxies, enz. Als voorbeeld nemen we de erg populaire webproxy Squid. Om deze te installeren druk je het bijhorende plus-knopje in en bevestig je met OK. pfSense begint met de download en even later is de installatie een feit. Dat uit zich onder meer in een extra optie in het menu Services: Proxy server. Selecteer die, kies de gewenste proxy interface (wellicht is dat lan), plaats een vinkje bij Transparant proxy en kies Dutch bij Language. De andere opties kan je voorlopig laten voor wat ze zijn. Bevestig met Save.

Tijd voor een kleine test. Open bij Proxy server het tabblad Access Control en vul in de rubriek Blacklist bijvoorbeeld .*youtube.* in. Sla de wijziging op en merk dat je niet langer naar de YouTube-site kunt surfen! Goed om weten: er zijn nog handige pakketten, waaronder LightSquid (analysetool voor Squid-logs) en Squidguard (inhoudsfilter met fijnmazige gebruikerstoegang).


Squid laat zich zeer snel instellen (als transparante proxy).

Deel dit artikel
Voeg toe aan favorieten