abonneren

OPNsense VPN-server opzetten en configureren

OPNsense VPN
Als je buitenshuis toegang tot je thuisnetwerk wilt, kan dat op een veilige manier met een vpn-server. Het routerbesturingssysteem OPNsense maakt het heel gemakkelijk om zo’n vpn-server op je router te draaien. In dit artikel gaan we in op alle mogelijkheden. Een OPNsense VPN-server opzetten doe je als volgt.

Eerder vertelden we je hoe je met OPNsense een veilige firewall en router voor je thuisnetwerk instelt. Hier bouwen we daarop voort en installeren we een vpn-server op de OPNsense-machine. We gaan er hier dus van uit dat je OPNsense op je router hebt draaien. Voor de installatie en configuratie daarvan verwijzen we je door naar het volgende artikel:

Firewall op router installeren met open-source OPNsense

Vpn staat voor ‘virtual private network’ en het is een versleutelde verbinding via internet tussen twee locaties. Dat kan bijvoorbeeld tussen een hoofdkantoor en een agentschap van een bedrijf zijn, of tussen je smartphone en je thuisnetwerk. Dankzij dit virtuele netwerk lijkt het voor de verbonden toestellen of de verschillende locaties op één lokaal netwerk verbonden zijn. Op de achtergrond gebeurt de communicatie via internet, via een versleutelde tunnel, zodat alle verzonden informatie privé blijft.

In dit artikel gaan we niet in op het verbinden van meerdere kantoren, maar focussen we ons op het verbinden van mobiele toestellen zoals een smartphone of laptop met je thuisnetwerk. Op die manier heb je dus op een veilige manier toegang tot je domoticasysteem thuis of de gedeelde bestanden op je nas. En als je je OPNsense-router als gateway opgeeft voor het virtuele netwerk, kun je ook nog eens vanaf elke plek internetten via je internetverbinding thuis. Ideaal om regioblokkades te omzeilen als je in het buitenland bent.

Er bestaan diverse technologieën om een vpn op te zetten. OPNsense ondersteunt standaard IPsec en OpenVPN. In deze workshop gebruiken we Open VPN, dat ook weleens als SSL VPN omschreven wordt. Er bestaan OpenVPN-clients voor alle mogelijke besturingssystemen en de configuratie is vrij eenvoudig. Daarnaast ondersteunt OPNsense via plug-ins tinc, ZeroTier en WireGuard.

Dat zijn zeker interessante opties om te bekijken, maar nog niet zo breed ondersteund. Tevens zijn er plug-ins voor L2TP en PPTP, maar die worden ondertussen als onveilig beschouwd.

Certificaatautoriteit en servercertificaat aanmaken

Als vpn-server draaien we OpenVPN, dat voor zijn beveiliging net zoals ssl met certificaten werkt. De certificaten van clients en servers dienen ondertekend te worden door een certificaatautoriteit (CA), die zich daardoor in feite borg stelt voor het certificaat: als gebruiker vertrouw je alle certificaten die door de CA ondertekend zijn.

Om websites met https te kunnen bezoeken (waarvoor onderliggend ook ssl gebruikt wordt), bevatten alle besturingssystemen een lijst met ‘betrouwbare’ CA’s. Alle servercertificaten die door die CA’s ondertekend zijn, worden door je browser automatisch vertrouwd. Maar als je zelf je eigen vpn-server gaat opzetten en certificaten voor de clients gaat aanmaken, zijn die natuurlijk niet ondertekend door de standaard CA’s.

OPNsense VPN

We gaan daarom in OPNsense onze eigen CA aanmaken waarmee we onze certificaten ondertekenen. Daarvoor ga je links in de webinterface van OPNsense naar System / Trust / Authorities (zie bovenstaande afbeelding) en klik je rechtsboven op Add. Bij Method kies je voor Create an internal Certificate Authority.

Vul daarna alle gegevens in. Geef je CA een naam (bijvoorbeeld OpenVPN CA). Verhoog de standaard sleutellengte (Key length) gerust van 2048 bits naar het veiligere 4096 bits en het Digest Algorithm van SHA256 naar het veiliger SHA512. Standaard is je CA-certificaat een jaar geldig. Klik tot slot onderaan op Save om het CA-certificaat op te slaan.

Dan kunnen we nu een certificaat voor de vpn-server aanmaken. Ga daarvoor naar System / Trust / Certificates en klik rechtsboven weer op Add. Kies Create an internal Certificate en vul alle gegevens in, met bijvoorbeeld als beschrijvende naam OpenVPN-servercertificaat.

Je ziet dat er bij Certificate authority je hiervoor aangemaakte OpenVPN CA ingevuld staat. Daarmee verzekeren we dat ons certificaat door de CA ondertekend wordt. Zet zeker het type certificaat op Server Certificate en kies gerust weer een veiligere Key length en Digest Algorithm. Vul bij Common Name hetzelfde in als de beschrijvende naam en klik tot slot onderaan op Save.

Gebruikers aanmaken

Nu gaan we voor iedereen die toegang nodig heeft tot ons vpn een gebruiker aanmaken. Dat doe je door in System / Access / Users rechtsboven op Add te klikken. Vul een gebruikersnaam, twee keer hetzelfde wachtwoord en een volledige naam in. Zet onderaan bij Certificate een vinkje bij Click to create a user certificate. Klik dan op Save.

Je krijgt nu de vraag om een certificaat voor de gebruiker aan te maken. Kies weer Create an internal Certificate, verander eventueel weer de Key length en Digest Algorithm en laat al de rest op de standaardwaarden staan. Het type certificaat moet Client Certificate zijn en als certificaatautoriteit moet er je hiervoor aangemaakte OpenVPN CA staan. Ook dit certificaat is weer standaard een jaar geldig, daarna moet je het vernieuwen.

OPNsense VPN

Klik onderaan op Save om het certificaat aan te maken, waarna je weer op de pagina om de gebruiker aan te maken terechtkomt. Klik hier onderaan op Save and go back om de nieuwe gebruiker op te slaan.

OpenVPN-server instellen

Dan komen we nu op het punt dat we de OpenVPN-server kunnen inschakelen. Klik links op VPN / OpenVPN / Servers en dan rechtsboven op Add. Je ziet hier een hele lijst velden om in te vullen en opties om aan te vinken, maar de meeste kun je op hun standaardwaarde laten staan. We lopen langs de opties die je dient te veranderen en die speciale aandacht vereisen.

Vul een beschrijving van je vpn-server in en kies bij Server Mode voor Remote Access (SSL TLS + User Auth). Bij Backend for authentication kies je voor Local Database. Het protocol laat je op UDP staan en de apparaatmodus op tun. De interface verander je naar WAN en het poortnummer laat je op 1194 staan.

Onder de cryptografische instellingen kies je als servercertificaat je hiervoor aangemaakte OpenVPN-servercertificaat, waarbij je de CA waarmee het certificaat ondertekend is tussen haakjes staat. Kies ook gerust veiliger cryptografische parameters, zoals 4096 bits voor de optie DH Paramters Length, AES-256-CBC voor de optie Encryption algorithm en SHA512 voor de optie Auth Digest Algorithm. Overigens moeten je clients deze parameters wel ondersteunen: mogelijk dien je ze dus uit compatibiliteitsoverwegingen toch wat conservatiever in te stellen.

Onder Tunnel Settings staan de instellingen voor het virtuele netwerk. Bij IPv4 Tunnel Network vul je een privé-adresbereik in dat je aan je vpn wilt toekennen, zoals 10.10.0.0/24. Bij IPv4 Local Network vul je het adresbereik in van je lokale netwerk waartoe je de vpn-clients toegang wilt geven, bijvoorbeeld 192.168.0.0/24. Kies bij Compression voor Enabled with Adaptive Compression. Gebruik je geen IPv6, vink dan Disable IPv6 aan.

Klik onderaan op Save om je vpn-server op te zetten. Daarna draait je OpenVPN-server en het succes daarvan kun je nakijken in VPN / OpenVPN / Log File.

OPNsense VPN

Firewall instellen

Je vpn-server draait nu, maar is nog niet bereikbaar: je dient eerst in de firewall de poort van de OpenVPN-server open te zetten op de wan-interface. Open Firewall / Rules / WAN en klik bovenaan rechts op Add. Kies bij protocol UDP en vul bij Destination port range bij zowel from als to de waarde OpenVPN in. Voeg ook een beschrijving toe, zodat je later nog weet waarvoor deze firewallregel dient. Klik onderaan op Save en dan bovenaan op Apply changes. Als je OPNsense-router nog achter een router van je provider hangt, moet je daar in de instellingen voor portforwarding ook udp-poort 1194 naar je OPNsense-router laten doorsturen.

Daarna dienen de vpn-clients ook nog toegang te krijgen tot het thuisnetwerk op je lan-interface. Klik links op Firewall / Rules / OpenVPN en daarna op Add. Als je je vpn-clients toegang tot alle toestellen op je lokale netwerk wilt geven, hoef je alleen maar bij Source voor Single host or Network te kiezen, dan 10.10.0.0/24 in te vullen, je firewallregel een beschrijving te geven, op te slaan en de wijzigingen toe te passen.

OPNsense VPN

Android-client configureren

Nu de serverkant klaar is, wordt het tijd om de clients te configureren. We tonen je hoe dat werkt op Android. Installeer eerst de app OpenVPN for Android van Arne Schwabe. Voor iOS verloopt het proces vergelijkbaar en dan raden de ontwikkelaars van OPNsense de app OpenVPN Connect aan.

Open op je Android-telefoon (terwijl je met het thuisnetwerk verbonden bent) de webinterface van je OPNsense-router en ga naar VPN / OpenVPN / Client Export. Vul bij de hostname je dynamische dns in en kies bij het exporttype File Only. Klik dan onderaan op het downloadicoontje naast de gebruiker die je gedefinieerd hebt. Open het bestand met de OpenVPN-app en sla het profiel op.

Zorg nu dat je niet met je wifi-thuisnetwerk verbonden bent, open de OpenVPN-app, druk op je profiel en bevestig dat je met de vpn-server wilt verbinden. Geef je gebruikersnaam en wachtwoord in. Als alles goed gaat, ben je nu via je vpn verbonden met je thuisnetwerk en zijn je lokale ip-adressen bereikbaar.

OPNsense VPN

Hostnames en je lokale dns-server gebruiken

Met deze aanpak kun je alleen nog maar bij je lokale toestellen via hun ip-adres, niet via hun lokale hostname. Je smartphone gebruikt immers nog altijd de standaard dns-server die in Android ingesteld is en die kent je lokale hostnames niet.

We gaan er hier van uit dat je in je thuisnetwerk de standaard ingeschakelde dns-server van OPNsense gebruikt, Unbound. Geef dan in de dhcp-instellingen van OPNsense (Services / DHCPv4 / [LAN]) je lokale toestellen een statisch ip-adres op basis van hun mac-adres met een bijbehorende hostname. Vink daar de optie Register DHCP static mappings aan en vink ook in Services / Unbound DNS / General de optie Register DHCP leases aan. Zo zijn al je toestellen in je thuisnetwerk via hun hostname bereikbaar.

Nu hoeven we alleen nog te zorgen dat ook de clients die via het vpn met je thuisnetwerk verbinden je lokale dns-server gebruiken. Ga daarvoor in de instellingen van je vpn-server naar Client Settings, vink DNS Default Domain aan en vul het domein van je thuisnetwerk in (bijvoorbeeld home), vink DNS Servers aan en vul dan het ip-adres van je OPNsense-machine als dns-server in (of het ip-adres van je dns-server als je die op een andere machine in je netwerk hebt draaien). De opties Dynamic IP, Address Pool en Topology vink je ook het best aan.

Nadat je onderaan op Save hebt geklikt, verbind je opnieuw je Android-telefoon met het vpn. Je zult zien dat je de toestellen in je thuisnetwerk nu ook via hun hostnames kunt bereiken. Een leuk neveneffect is dat nu alle dns-aanvragen op je Android-telefoon via je router thuis verlopen. Als die via een dns-blocklist advertenties en malware blokkeert, profiteer je nu ook onderweg van deze beveiliging.

Mobiel surfen via je thuisrouter

Tot nu gebruiken we ons vpn gewoon om van buitenaf bij systemen op ons thuisnetwerk te kunnen. Maar we kunnen nog meer: als we met ons thuisnetwerk verbonden zijn, kunnen we ook onze router thuis als springplank gebruiken om te surfen. Waarom zou je die omweg via je huis gebruiken in plaats van rechtstreeks mobiel te surfen? Daar kunnen verschillende redenen voor zijn.

Allereerst als je met regioblokkades te maken krijgt: een website die niet werkt als je je in het buitenland bevindt. Dan verbind je gewoon met je vpn thuis en bezoek je de website via je thuisrouter. Voor die website lijkt het alsof jij thuis bent. Maar deze manier van surfen komt ook van pas als je het wifi-netwerk van je hotel niet vertrouwt: dan verbind je gewoon met het onveilige wifi-netwerk, maar surf je over de vpn-verbinding naar je huis.

OPNsense VPN

En tot slot kan deze manier van surfen ook nuttig zijn als je op je router thuis allerlei beveiligingsmaatregelen zoals firewallregels en een ‘intrusion prevention system’ ingesteld hebt: door je smartphone via je router thuis te laten surfen, profiteer je ook buitenshuis van dit alles.

Deze mogelijkheid inschakelen is met alles wat je tot nu tot gedaan hebt vrij eenvoudig: vink in de instellingen van je vpn-server Redirect Gateway aan. Sla je wijziging op en daarna wordt al het netwerkverkeer van je Android-telefoon via je router geforceerd wanneer die met het vpn verbonden is.

Troubleshooting

Lukt het verbinden met je vpn niet de eerste keer, kijk dan in het logboek van de vpn-server van OPNsense: dat vind je onder VPN / OpenVPN / Log File. Als je bijvoorbeeld het verkeerde wachtwoord ingevoerd hebt, krijg je dat hier te zien. Is dat het probleem niet, kijk dan eens in Firewall / Log Files / Live View. Je ziet daar realtime welke netwerkpakketjes er door de firewall tegengehouden en doorgelaten worden.

Misschien ontdek je hier dat je in de instellingen van de firewall iets verkeerds hebt geconfigureerd? De OpenVPN-client onder Android toont bij het verbinden ook een logboekvenster dat nuttige informatie kan opleveren.

Multifactorauthenticatie en time-based one-time password

Tot nu toe loggen we met onze smartphone op het vpn-netwerk in met een gebruikersnaam en wachtwoord in combinatie met een clientcertificaat. Het is dus een vorm van multifactorauthenticatie: iemand die je via je vpn op je thuisnetwerk wil komen, heeft daarvoor het juiste clientcertificaat nodig (iets wat je hebt, op je telefoon) én je gebruikersnaam en wachtwoord (iets wat je weet). Dat is al een stevige beveiliging tegen toegang door onbevoegden.

Maar je kunt nog een extra factor toevoegen, een eenmalige code (‘one-time password’ of OTP). Op deze manier vraagt de OpenVPN-server je bij elke aanmelding een nieuwe code om in te voeren. Die code haal je uit bijvoorbeeld de app Google Authenticator of Authy. Die installeer je dan wel het best op een ander toestel dan datgene waarmee je op het vpn wilt verbinden.

Ga in de webinterface van OPNsense naar System / Access / Servers. Je ziet dat er momenteel één toegangsserver geconfigureerd is, namelijk Local Database. Die controleert van gebruikers of de combinatie van een ingevoerde gebruikersnaam en wachtwoord bekend is. Klik rechts op Add om een andere toegangsserver toe te voegen. Geef de server een beschrijvende naam, zoals TOTP VPN-toegang, en kies als type Local + Timebased One Time Password. De andere instellingen laten we op hun standaardwaarde staan. Klik op Save.

OPNsense VPN

Bewerk nu onder System / Access / Users de gebruiker die je voor je vpn aangemaakt hebt. Vink bij OTP seed de optie Generate new secret (160 bit) aan en klik op Save. OPNsense maakt dan een willekeurige startwaarde voor je OTP-codes aan. Klik dan op Click to unhide bij OTP QR code. Scan de qr-code die verschijnt met je authenticatie-app. In Google Authenticator gaat dat door op het rode plusteken rechts onderaan te drukken

Ga dan naar VPN / OpenVPN / Servers en bewerk je vpn-server. Vink bij Backend for authentication de Local Database uit en vink je zonet ingestelde TOTP VPN-toegang aan. Sla je wijzigingen op met Save. Vul nu op je Android-telefoon in je OpenVPN-client bij het inloggen in het wachtwoordveld eerst de zescijferige OTP-code van Google Authenticator in en daarna je normale wachtwoord. Je vpn is nu ook veilig als iemand je telefoon steelt en toevallig je wachtwoord heeft kunnen bekijken.

Geschreven door: Koen Vervloesem op

Category: Workshop, Security

Tags:

Laatste Vacatures