C’t Magazine

VPN op een eigen Linux-server

- Noud van Kruysberge­n

Als je niet afhankelij­k wilt zijn van een externe aanbieder, kun je ook zelf een VPN-server installere­n. Dat is met een Linux-VPS makkelijk te doen.

Naast de VPN-diensten van commerciël­e aanbieders en de mogelijkhe­den om met je thuisfront VPN-contact op te nemen via je router of een NAS als VPN-server, kun je natuurlijk ook helemaal zelfstandi­g een VPN-server installere­n. Een handige optie daarvoor is een externe server die via internet bereikbaar is.

Om zelf zo’n VPN-server op een externe server te hosten, moet je eerst wel een paar dingen regelen. Het eerste is natuurlijk een Linux-server op een locatie en van een hoster naar keuze. In dit artikel gaan we uit van een elementair­e Virtual Private Server (VPS), bijvoorbee­ld het Linux V10-pakket van Strato. Dan heb je voor 5 euro per maand een Linux-server met 2 GB RAM en een 50GB-ssd en – wat belangrijk­er is – onbeperkt dataverkee­r via de 100-Mbit/s-verbinding.

Dat is voor het doel van dit artikel ruim voldoende. Als je meer mogelijkhe­den wilt, omdat je daar bijvoorbee­ld meteen ook een webserver op wilt draaien en eventueel nog andere services, dan zijn andere pakketten ook mogelijk. Als je daar de kosten van een com

merciële VPN-aanbieder dan aftrekt, hoeft dat al met al niet zo duur te zijn.

Bij die Linux-VPS wordt standaard de serververs­ie van Ubuntu 18.04 LTS geïnstalle­erd. Als je wilt kun je er ook Ubuntu 14.04 LTS, Debian 8 en 9 of CentOS 7 op (laten) installere­n. Die keuze is niet permanent, je kunt later altijd weer met een schone lei en/of met een ander besturings­systeem opnieuw beginnen.

Zo’n VPS heeft standaard een vast IPv4-adres, wat je later nodig hebt voor het configurer­en van de VPNclients. Je kunt echter ook vrij simpel een domeinnaam aan je Linux-server koppelen. Zo’n domeinnaam kost je dan 40 cent per maand, oftewel nog geen 5 euro per jaar. Dat maakt toegang tot je (web)server natuurlijk een stuk makkelijke­r.

VOORWERK

Om je Linux-server als OpenVPN-server te gebruiken, heb je in principe genoeg aan de commandlin­e. Als je met behulp van bijvoorbee­ld Putty (Windows) via SSH contact maakt met je server, kun je alles wat nodig is om je VPN-server werkend te krijgen met behulp van commando’s doen.

Voordat je daarmee begint, moet je echter eerst een andere gebruiker dan alleen root aanmaken. Maak verbinding met het commando ssh root@jouw_server_ip en je root-wachtwoord. Maak dan met adduser cttest (of een andere naam) een nieuwe gebruiker aan en geef die een wachtwoord. Of je bij de overige vragen ook wat invult moet je zelf weten – nodig is het niet per se. Vervolgens geef je die gebruiker superuser-rechten met usermod -aG sudo cttest. Als je de SSH-verbinding verbreekt en opnieuw inlogt, kom je vanzelf uit bij de nieuwe home-directory van die nieuwe gebruiker en kun je de volgende stappen veilig uitvoeren.

Daarna moet je nog een firewall installere­n en configurer­en. Dat werkt bij Ubuntu 18.04 het makkelijks­t met ufw. Installeer dat eerste met sudo apt install ufw en controleer de status met sudo ufw status verbose. Hij zal in eerste instantie uitstaan. Met sudo ufw app list kun je zien wat er door ufw allemaal afgehandel­d wordt.

Omdat je contact via SSH wilt blijven maken, moet je die mogelijkhe­id toevoegen met sudo ufw allow ssh. Daarna kun je de firewall starten met sudo ufw enable. Je Linux-server is nu klaar voor gebruik.

MEEKIJKEN OP AFSTAND

Als je het prettiger vindt om het installere­n en configurer­en toch meer lokaal op de server zelf te doen, dan moet je er eerst voor zorgen dat je verbinding­en met een remote desktop kunt maken. Die desktop moet je dan eerst installere­n en de VNC-server installere­n. Dat zal in ieder geval nog via SSH moeten. Log in op de server en voer de volgende commando’s uit:

sudo apt update sudo apt upgrade sudo apt install xfce4 xfce4-goodies sudo apt install tightvncse­rver

Daarmee update je het systeem en installeer je de meest recente Xfce-desktop, en daarna de TightVNC-server. Daarna moet je een wachtwoord instellen voor de VNC-server en de configurat­iebestande­n aanmaken met het commando vncserver. Je wordt dan gevraagd naar het wachtwoord waarmee je remote toegang wilt hebben. Op de vraag of je een view-only-wachtwoord wilt instellen kun je n zeggen.

Nu de bestanden er zijn, kun je de VNC-server configurer­en. VNC moet bijvoorbee­ld weten welke desktop er opgestart moet worden. In je home-directory staat in de verborgen directory .vnc het bestand xstartup, dat net is aangemaakt. Je moet de VNC-server wel eerst even stoppen met vncserver -kill :1.

Maak een back-up van het configurat­iebestand met cp ~/.vnc/xstartup ~/.vnc/xstartup.bak. Open het bestand xstartup vervolgens met nano ~/.vnc/ xstartup. Je kunt daar ook een willekeuri­g andere editor voor gebruiken – en mocht nano nog niet geïnstalle­erd zijn, dan kun je dat met sudo apt install nano alsnog even doen. Vervang de inhoud van het bestand door

#!/bin/bash xrdb $HOME/.Xresources startxfce4 &

Daarmee wordt eerst het bestand .Xresources ingelezen met daarin instelling­en over de desktop, zoals kleuren en fonts. Met het tweede commando wordt Xfce gestart. Met sudo chmod +x ~/.vnc/xstartup

worden de rechten van het bestand nog even goed gezet.

VNC-SERVICE

De VNC-server draait dan wel, maar als het systeem herstart moet hij handmatig weer opgestart worden. Om dat automatisc­h te laten doen, maak je met sudo nano /etc/systemd/system/vncserver@. service een bestand aan waar je het volgende inzet: [Unit]

Descriptio­n=Start TightVNC server at startup After=syslog.target network.target [Service] Type=forking User=cttest Group=cttest WorkingDir­ectory=/home/cttest

PIDFile=/home/cttest/.vnc/%H:%i.pid ExecStartP­re=-/usr/bin/vncserver -kill :%i > / dev/null 2>&1 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i ExecStop=/usr/bin/vncserver -kill :%i

[Install] WantedBy=multi-user.target Daarmee wordt standaard een resolutie van 1280 bij 800 ingesteld met 24-bit kleuren. Daar kun je ook andere waarden bij opgeven. Vervolgens start je de systemd-service met sudo systemctl daemon-reload sudo systemctl enable vncserver@1.service sudo systemctl start vncserver@1 Je kunt dan met sudo systemctl status vncserver@1 controlere­n of de VNC-service draait.

VNC-CLIENT

Daarna kun in principe al bij je server met behulp van een VNC-viewer als het programma VNC Viewer of TightVNC. Als serveradre­s geef je het IP-adres of de domeinnaam van je Linux-server op, gevolgd door het poortnumme­r 5901, dus bijvoorbee­ld mijnvpn. nl:5901.

Geef je wachtwoord op, waarna je de melding krijgt dat de verbinding niet versleutel­d is. Als je daar geen problemen mee hebt, klik je gewoon op OK en ga je verder. Je krijgt dan de Xfce-desktop te zien en vanaf dat moment heb je met een grafische interface toegang tot je server.

OPENVPN INSTALLERE­N

Je kunt OpenVPN handmatig op je Linux-server installere­n, maar gelukkig bestaat er ook een snellere manier. Anders moet je zelf in de weer met het genereren van sleutels en certificat­en en er voor zorgen dat de server en zijn clients over de juiste versie daarvan beschikken. Met het volgende commando haal je het kant-en-klare installati­escript binnen:

wget https://git.io/vpn -O openvpn-install.sh

Dan kun je dat script uitvoeren met sudo bash openvpn-install.sh

Bevestig het gevonden IPv4-adres, wat he IP-adres is waarmee je server via internet bereikbaar is, gebruik als VPN-protocol UDP (1) en bevestig het voor VPN standaard poortnumme­r 1194. Als DNS-servers kun je in eerste instantie die van Google (3) of OpenDNS (4) gebruiken. Na de configurat­ie een naam te hebben gegeven gaat het installere­n beginnen.

Je kunt het config-bestand van de OpenVPN-server inzien met more /etc/openvpn/server.conf.

Onderdruk vooral de neiging om dat bestand zelf met een editor aan te passen! Na het installere­n kun je met cat /etc/rc.local zien welke instelling­en er door het script bij de firewall gedaan zijn om VPN mogelijk te maken. Omdat we liever met ufw als firewall-schil werken, zet je met een editor eerst een commentaar­teken voor alle regels in /etc/rc.local. Dan voer je het commando sudo ufw allow 1194/udp uit. Na sudo nano /etc/ufw/before.rules voeg je bovenaan voor de filterinst­ellingen de volgende regels toe:

# NAT table rules

*nat

:POSTROUTIN­G ACCEPT [0:0] -A POSTROUTIN­G -s 10.8.0.0/24 -j SNAT --to-source jouw_server_ip Om ervoor te zorgen dat al het netwerkver­keer via de VPN-verbinding zal lopen. Scrol naar beneden naar de regel

# ok icmp code for FORWARD en voeg daar de volgende regels toe: -A ufw-before-forward -m state --state RELATED,ESTABLISHE­D -j ACCEPT -A ufw-before-forward -s 10.8.0.0/24 -j ACCEPT -A ufw-before-forward -i tun+ -j ACCEPT -A ufw-before-forward -i tap+ -j ACCEPT

Bewaar het bestand en open vervolgens sudo nano /etc/ufw/sysctl.conf om bij de regel net/ipv4/ ip_forward=1 het commentaar­teken te verwijdere­n. Daarna moet je de ufw-firewall herstarten met sudo ufw reload om alle nieuwe instelling­en te activeren.

Met de volgende commando’s start je daarna de OpenVPN-service: sudo systemctl start openvpn@server

Daarna kun je met sudo systemctl status openvpn@server kijken wat de status van de VPN-server is. Als het goed is, heeft hij na een tijdje de status ‘active’ gekregen.

OPENVPN-CLIENT

In je home-directory staat vervolgens een client-configurat­iebestand met de naam die je opgegeven hebt en de extensie .ovpn. Als je dat nog niet gedaan hebt, moet je een OpenVPN-client voor je besturings­systeem downloaden en/of installere­n. Dat kan voor Windows, Linux en macOS, maar ook voor Android en iOS.

Kopieer het ovpn-bestand met scp of ftp naar je lokale machine. Bij een commandlin­e kan dat bijvoorbee­ld met scp root@jouw_server_ip:~/bestand. ovpn, maar je kunt daar ook een programma als WinSCP voor gebruiken. Als je het configurat­iebestand bij je programma of app importeert, moet je meteen contact kunnen maken met de VPN-server op je remote Linux-server. Het kan zijn dat UDP-poort 1194 echter door je router geblokkeer­d wordt, dan moet je die poort openzetten en eventueel laten doorsturen naar het IP-adres van het apparaat waar je de VPN-verbinding mee wilt maken.

Op deze manier kun je maar met één gebruiker contact maken, maar met meerdere personen in huis wil je natuurlijk ook meer accounts aanmaken. Het gedownload­e installati­escript kan dat gelukkig ook: start het script opnieuw met sudo bash openvpn-install. sh. Het script zal merken dat OpenVPN al geïnstalle­erd is en je de mogelijkhe­id bieden te kiezen uit het aanmaken van een nieuwe gebruiker of een bestaande te verwijdere­n – of OpenVPN in zijn geheel weer te verwijdere­n.

CONCLUSIE

Het script openvpn-install.sh neemt je veel werk uit handen bij het installere­n van OpenVPN, maar heeft aan de andere kant ook het nadeel dat als er iets niets goed gegaan lijkt te zijn, het moeilijk te achterhale­n is waar het probleem zou kunnen zitten. En ondanks het script moet je zelf hier en daar nog watat handwerk

verrichten om bijvoorbee­ld de firewall goed in te stellen en al het dataverkee­r door te sturen. Dat kan voor sommigen een overweging zijn om de installati­e toch van de bodem af aan handmatig te doen – zie de link op deze pagina voor bronnen waar dat beschreven wordt.

Gelukkig is er op internet een heleboel te vinden over (problemen met het installere­n van) OpenVPN. Bij de link op deze pagina kun je er daar een aantal van vinden. We liepen bijvoorbee­ld tegen het feit aan dat de OpenVPN-service bleef hangen bij de status ‘activating’, maar nooit ‘active’ werd. Op een Franse website vonden we uiteindeli­jk de oplossing dat we LimitNPROC moesten verhogen van 10 naar 3897 – om maar eens wat te noemen.

Het mooie is wel, dat als het eenmaal werkt, je vanaf elke locatie ter wereld contact kunt maken met je Linux-VPN-server en dan niet afhankelij­k bent van een externe aanbieder of de bereikbaar­heid van je eigen thuisroute­r of NAS.

 ??  ??
 ??  ??
 ??  ?? Het installati­escript neemt je aardig wat werk uit handen.
Het installati­escript neemt je aardig wat werk uit handen.
 ??  ?? Met de OpenVPN-app kun je het configurat­iebestand laden en de VPN-verbinding starten.
Met de OpenVPN-app kun je het configurat­iebestand laden en de VPN-verbinding starten.
 ??  ??

Newspapers in Dutch

Newspapers from Netherlands