Inleiding
Wilt u veilig toegang krijgen tot het internet vanaf uw smartphone of laptop wanneer u verbinding maakt met een onbetrouwbaar netwerk (bijv. wifi in een hotel of café)? Gelukkig is er een manier om uw wensen in vervulling te laten gaan. U kunt veilig verbinding maken met een onbetrouwbaar netwerk alsof u zich op een privénetwerk bevindt met behulp van een Virtual Private Network (VPN).
Wat is een VPN?
VPN staat voor een Virtual Private Network. Het biedt de mogelijkheid om een beveiligde tunnel te openen naar een betrouwbare server. Alle verzoeken worden vervolgens via deze server verzonden en ontvangen. Het voordeel is het beveiligen van uw toegang en transacties bij het gebruik van openbare netwerken zoals gratis wifi in een hotel.
Via de VPN worden alle gegevens versleuteld en via de server verwerkt. Tussenliggende apparaten, zoals routers van derden en dergelijke, hebben geen mogelijkheid om het verkeer naar ongewenste bestemmingen om te leiden. Bovendien maakt u, zodra de verbinding met succes tot stand is gebracht, deel uit van het netwerk van de server. Andere servers, computers of apparaten zoals printers die normaal gesproken alleen toegankelijk zouden zijn in het lokale netwerk van de server, kunnen nu ook via de VPN-tunnel worden bereikt. Omdat echter niet alle gegevens via een versleutelde tunnel hoeven te worden verzonden, is het mogelijk om de VPN-client zo te configureren dat slechts een gedefinieerd deel van de verzoeken via de VPN-tunnel wordt verzonden. De rest van het verkeer wordt normaal via het internet verwerkt.
In deze handleiding leiden we u door de stappen voor het opzetten van een OpenVPN-server op Ubuntu 18.04.
Vereisten
U moet toegang hebben tot een Ubuntu 18.04-server om uw OpenVPN-service te hosten om deze handleiding te voltooien. Voordat u deze gids start, moet u ook een non-root gebruiker met sudo-rechten configureren. U kunt uw server eenvoudig installeren door onze handleiding over het opzetten van een Ubuntu-server te volgen..
Daarnaast hebt u een aparte computer nodig die fungeert als een certificeringsinstantie (CA). Technisch gezien kunt u uw OpenVPN-server of uw lokale computer als certificeringsinstantie gebruiken. We raden dit echter niet aan, omdat dit uw VPN blootstelt aan beveiligingslekken. Volgens de officiële OpenVPN-documentatie moet u de certificeringsinstantie op een aparte computer plaatsen die speciaal is bedoeld voor het importeren en ondertekenen van certificaatverzoeken. We gaan er dus van uit dat uw certificeringsinstantie zich op een aparte Ubuntu 18.04-server bevindt die ook een non-root gebruiker met sudo-rechten en een basisfirewall heeft. In deze handleiding zullen alle installatie- en configuratiestappen voor elk van de installaties zo eenvoudig mogelijk zijn. U kunt ook een kijkje nemen in onze handleiding over het opzetten van een Open VPN-server onder Docker.
Stap 1 – OpenVPN en EasyRSA installeren
Werk eerst de pakketindex van uw VPN-server bij en installeer OpenVPN. U kunt OpenVPN installeren met behulp van apt omdat het beschikbaar is in de standaard Ubuntu-repositories:
|
1 2 |
sudo apt update sudo apt install openvpn |
Stap 2: Een certificeringsinstantie maken
Maak een eenvoudige certificeringsinstantie (CA) om vertrouwde certificaten voor de OpenVPN-server uit te geven. Download hiervoor de nieuwste versie van EasyRSA op zowel uw CA-machine als uw OpenVPN-server met behulp van wget. Om de nieuwste versie te downloaden, gaat u naar de Releases-pagina van het officiële EasyRSA GitHub-project, kopieer de downloadlink voor het bestand dat eindigt op .tgz en plak deze in de volgende opdracht:
|
1 |
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz <span class="s1">--no-check-certificate</span> |
Pak vervolgens de tarball uit:
|
1 2 |
cd ~ tar xvf EasyRSA-3.0.4.tgz |

Op dit punt is alle vereiste software met succes geïnstalleerd op uw CA-computer en -server.
Stap 3 – EasyRSA-variabelen configureren en de CA bouwen
EasyRSA wordt geleverd met een configuratiebestand dat u kunt bewerken om een aantal variabelen voor uw CA te definiëren met behulp van deze opdracht:
|
1 |
cd ~/EasyRSA-3.0.4/ |
Er bevindt zich een bestand in de map met de naam vars.example. Maak een kopie van dit bestand en noem de kopie vars zonder bestandsextensie:
|
1 |
cp vars.example vars |
Gebruik de tekst-editor van uw voorkeur om dit nieuwe bestand te openen:
|
1 |
nano vars |
Zoek vervolgens de instellingen die de standaardwaarden voor velden voor nieuwe certificaten bepalen. Dit zal er ongeveer zo uitzien:
|
1 2 3 4 5 6 |
#set_var EASYRSA_REQ_COUNTRY "US" #set_var EASYRSA_REQ_PROVINCE "California" #set_var EASYRSA_REQ_CITY "San Francisco" #set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" #set_var EASYRSA_REQ_EMAIL "me@example.net" #set_var EASYRSA_REQ_OU "My Organizational Unit" |
Werk deze variabelen bij naar wens, zoals hieronder weergegeven:
|
1 2 3 4 5 6 |
set_var EASYRSA_REQ_COUNTRY "SL" set_var EASYRSA_REQ_PROVINCE "Zurich" set_var EASYRSA_REQ_CITY "Zurich City" set_var EASYRSA_REQ_ORG "CloudSigma" set_var EASYRSA_REQ_EMAIL "admin@example.com" set_var EASYRSA_REQ_OU "Community" |
Sla het bestand op en sluit het zodra u klaar bent. De volgende stap is om het easyrsa-script aan te roepen en uit te voeren met de optie init-pki om de openbare-sleutelinfrastructuur op de CA-server te initialiseren:
|
1 |
./easyrsa init-pki |

Voer vervolgens het commando build-ca uit met de optie nopass, zodat u niet telkens om een wachtwoord wordt gevraagd wanneer u met uw CA communiceert:
|
1 |
./easyrsa build-ca nopass |
In de uitvoer wordt u gevraagd om de common name voor uw CA te bevestigen:

Daarmee is uw CA ingesteld en klaar om certificaataanvragen te ondertekenen.
Stap 4 – Servercertificaat, sleutel en versleutelingsbestanden genereren
Nadat de CA gereed is, kunt u de privésleutel en de certificaataanvraag vanaf de server genereren en deze vervolgens naar de CA sturen voor ondertekening door het vereiste certificaat aan te maken. Navigeer eerst naar de EasyRSA-map op de OpenVPN-server:
|
1 |
cd EasyRSA-3.0.4 |
Voer vanaf daar het easyrsa-script uit met de optie init-pki. Hoewel u dit commando al op de CA-computer hebt uitgevoerd, moet dit commando hier ook worden uitgevoerd. Dat komt omdat de PKI-mappen van de server en de CA verschillend zijn:
|
1 |
./easyrsa init-pki |
Roep vervolgens het easyrsa-script opnieuw aan, ditmaal met de optie gen-req, gevolgd door de computer’s generieke naam:
|
1 |
./easyrsa gen-req server nopass |
Dit maakt een privésleutel voor de server en een certificaataanvraagbestand met de naam server.req aan. Kopieer de serversleutel naar de map /etc/openvpn/:
|
1 |
sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/ |
Zet het bestand server.req over naar uw CA-computer met behulp van een veilige methode (zoals SCP in het volgende voorbeeld):
|
1 |
scp ~/EasyRSA-3.0.4/pki/reqs/server.req cloudsigma@your_CA_ip:/tmp |
Navigeer vervolgens naar de EasyRSA-map op uw CA-computer:
|
1 |
cd EasyRSA-3.0.4/ |
Gebruik het easyrsa-script opnieuw om het bestand server.req te importeren en voeg de common name toe na het bestandspad:
|
1 |
./easyrsa import-req /tmp/server.req server |
Onderteken vervolgens de aanvraag door het easyrsa-script uit te voeren met de optie sign-req, gevolgd door het type aanvraag en de common name. Zorg er bij de certificaataanvraag van de OpenVPN-server voor dat u het type serveraanvraag gebruikt:
|
1 |
./easyrsa sign-req server server |
De uitvoer vraagt u te controleren of het verzoek afkomstig is van een betrouwbare bron. Typ yes en druk op Enter om te bevestigen. Controleer de hieronder weergegeven details om de nauwkeurigheid te garanderen. Let op: dit verzoek is nog niet met een wachtwoord geverifieerd.
Vraag het onderwerp aan en onderteken het als een servercertificaat voor 3650 dagen:

Als u de CA-sleutel hebt versleuteld, wordt u op dit punt om het wachtwoord gevraagd. Gebruik vervolgens een veilige methode om het ondertekende certificaat terug te sturen naar uw VPN-server:
|
1 |
scp pki/issued/server.crt siigma@your_server_ip:/tmp |
Zet het ca.rt-bestand over naar de server voordat u zich afmeldt bij de CA-computer:
|
1 |
scp pki/ca.crt siigma@our_server_ip:/tmp |
Log vervolgens opnieuw in op uw OpenVPN-server en kopieer de bestanden server.crt en ca.crt naar uw /etc/openvpn/-map:
|
1 |
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/ |
Navigeer vervolgens naar uw EasyRSA-map:
|
1 |
cd ~/EasyRSA-3.0.4/ |
Voer de volgende code in om een sterke Diffie-Hellman-sleutel te maken die u kunt gebruiken tijdens de sleuteluitwisseling:
|
1 |
./easyrsa gen-dh |
Wanneer dit is gebeurd, genereert u een HMAC-handtekening om de TLS-statuscontrolefunctionaliteit van de server te verbeteren:
|
1 |
openvpn --genkey --secret ta.key |
Wanneer de opdracht is voltooid, kopieert u de twee nieuwe bestanden naar de map /etc/openvpn/:
|
1 2 |
sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/ |
Op deze manier worden alle certificaten en sleutelbestanden die de server nodig heeft gegenereerd. Nu kunt u het juiste certificaat en de juiste sleutel maken die de clientcomputer zal gebruiken om toegang te krijgen tot de OpenVPN-server.
Stap 4 – Clientcertificaat en sleutelpaar genereren
Vervolgens maken we een clientsleutel en verschillende certificaten. Als u meerdere clients hebt, kunt u dit proces voor elke client herhalen. Houd er echter rekening mee dat u voor elke client een unieke naamwaarde aan het script moet doorgeven. In deze handleiding noemen we het eerste certificaat/sleutelpaar client1. Maak eerst een mapstructuur aan in uw thuismap om clientcertificaten en sleutelbestanden op te slaan:
|
1 |
mkdir -p ~/client-configs/keys |
Aangezien u het certificaat/sleutelpaar en het configuratiebestand van de client om veiligheidsredenen in deze map opslaat, moet u nu de machtigingen intrekken:
|
1 |
chmod -R 700 ~/client-configs |
Navigeer vervolgens terug naar de EasyRSA-map en voer het easyrsa-script uit met de opties gen-req en nopass, evenals de generieke naam van de client:
|
1 2 |
cd ~/EasyRSA-3.0.4/ ./easyrsa gen-req client1 nopass |
Druk op Enter om de algemene naam te bevestigen. Kopieer daarna het bestand client1.key naar de eerder gemaakte map /client-configs/keys/:
|
1 |
cp pki/private/client1.key ~/client-configs/keys/ |
Gebruik vervolgens een veilige methode om het bestand client1.req over te zetten naar uw CA-computer:
|
1 |
scp pki/reqs/client1.req sigma@your_CA_ip:/tmp |
Log in op uw CA-computer, navigeer naar de EasyRSA-map en importeer het certificaatverzoek:
|
1 2 3 |
ssh siigma@your_CA_ip cd EasyRSA-3.0.4/ ./easyrsa import-req /tmp/client1.req client1 |

Onderteken vervolgens, net als in de vorige stap, het verzoek op de server. Maar deze keer moet u het type clientverzoek opgeven:
|
1 |
./easyrsa sign-req client client1 |
Typ bij de prompt yes om te bevestigen dat u het certificaatverzoek wilt ondertekenen en dat het certificaatverzoek afkomstig is van een betrouwbare bron. Voer het woord “yes” in om door te gaan of voer iets anders in om te annuleren:
|
1 |
Bevestig Verzoek Details: Ja |

Als u de CA-sleutel hebt versleuteld, wordt u ook gevraagd om hier het wachtwoord in te voeren. Hiermee wordt een clientcertificaatbestand met de naam client1.crt gemaakt. Zet dit bestand terug over naar de server:
|
1 |
scp pki/issued/client1.crt siigma@your_server_ip:/tmp |
Maak opnieuw verbinding via SSH met je OpenVPN-server en kopieer het clientcertificaat naar de map / client-configs / keys /:
|
1 |
cp /tmp/client1.crt ~/client-configs/keys/ |
Kopieer vervolgens de bestanden ca.crt en ta.key naar de map / client-configs / keys /:
|
1 2 |
cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/ |
Tegelijkertijd zijn alle certificaten en sleutels van de server en de client gegenereerd en opgeslagen in de bijbehorende mappen op de server. Nu kun je doorgaan met het configureren van OpenVPN op de server.
Stap 5 – De OpenVPN-service configureren
Na het genereren van de client- en servercertificaten kun je de OpenVPN-service configureren om deze inloggegevens te gebruiken. Kopieer eerst het OpenVPN-voorbeeldbestand naar je configuratiemap en pak het vervolgens uit om het als basis voor de installatie te gebruiken:
|
1 2 |
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz |
Open het serverconfiguratiebestand in de teksteditor van jouw voorkeur:
|
1 |
sudo nano /etc/openvpn/server.conf |
Zoek vervolgens het HMAC-gedeelte door te zoeken naar de tls-auth-opdracht:
|
1 |
tls-auth ta.key 0 # Dit bestand is geheim |
Zoek het wachtwoordgedeelte door te zoeken naar de uitgecommenteerde wachtwoordregel. AES-256-CBC-versleuteling biedt een goed niveau van versleuteling en wordt goed ondersteund. De regel mag niet uitgecommenteerd zijn, maar als dat wel zo is, verwijder dan de “;” ervoor:
|
1 |
cipher AES-256-CBC |
Voeg daaronder een Auth-opdracht toe om het HMAC message-digest-algoritme te selecteren. SHA256 is hiervoor een goede keuze:
|
1 |
auth SHA256 |
Zoek vervolgens de regel met de dh-instructie die de Diffie-Hellman-parameters definieert. Vanwege enkele recente wijzigingen in EasyRSA kan de bestandsnaam van de Diffie-Hellman-sleutel afwijken van de bestandsnaam in het voorbeeldconfiguratiebestand van de server. Wijzig indien nodig de hier vermelde bestandsnaam door 2048 te verwijderen om deze af te stemmen op de sleutel van de vorige stap:
|
1 |
dh dh.pem |
Zoek ten slotte de gebruikers- en groepsinstellingen en verwijder de “;” aan het begin van elke regel:
|
1 2 |
user nobody group nogroup |
Tot nu toe zouden de wijzigingen die je in het voorbeeld-server.conf-bestand hebt aangebracht, OpenVPN moeten laten werken.
Stap 6 – Servernetwerkconfiguratie
Configureer IP-doorsturen om verkeer correct via de VPN te routeren. Dit is essentieel voor de VPN-functionaliteit die je server biedt:
|
1 |
sudo nano /etc/sysctl.conf |
Zoek naar de uitgecommenteerde regel die net.ipv4.ip_forward instelt. Verwijder het “#”-teken aan het begin van de regel om deze instelling te de-commentariëren:
|
1 |
net.ipv4.ip_forward=1 |
Sla het bestand op en sluit het zodra je klaar bent. Om het bestand te lezen en de waarden voor de huidige sessie aan te passen, typ je:
|
1 |
sudo sysctl -p |

Voeg vervolgens de openbare netwerkinterface van je machine toe:
|
1 |
ip route | grep default |
Je openbare interface is de tekenreeks in de uitvoer van deze opdracht die volgt op het woord “dev”. Dit resultaat toont bijvoorbeeld de interface met de naam ens3.

Open het bestand /etc/ufw/before.rules om de relevante configuratie toe te voegen:
|
1 |
$ sudo nano /etc/ufw/before.rules |
Voeg bovenaan het bestand de onderstaande gemarkeerde regels toe om het standaardbeleid voor de POSTROUTING-chain in de nat-tabel in te stellen en al het verkeer dat van de VPN komt te maskeren. Vervang ens3 in de onderstaande -A POSTROUTING-regel door de interface die je in de bovenstaande opdracht hebt gevonden:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# rules.before # Regels die moeten worden uitgevoerd vóór de via de ufw-opdrachtregel toegevoegde regels. Aangepaste # regels moeten aan een van deze chains worden toegevoegd: # ufw-before-input # ufw-before-output # ufw-before-forward # START OPENVPN-REGELS # NAT-tabelregels *nat :POSTROUTING ACCEPT [0:0] # Sta verkeer van OpenVPN-client naar wlp11s0 toe (wijzig in de interface die u hebt ontdekt!) -A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE COMMIT # EINDE OPENVPN-REGELS # Verwijder deze vereiste regels niet, anders treden er fouten op . . . |
Sla het bestand op en sluit het zodra u klaar bent. Vervolgens moet u UFW vertellen om doorgestuurd verkeer standaard ook toe te staan. Open hiervoor het bestand /etc/default/ufw:
|
1 |
sudo nano /etc/default/ufw |
Zoek daarin naar de richtlijn DEFAULT_FORWARD_POLICY en wijzig de waarde van DROP in ACCEPT:
|
1 |
DEFAULT_FORWARD_POLICY="ACCEPT" |
Sla het bestand op en sluit het wanneer u klaar bent. Pas vervolgens de firewall aan om verkeer naar OpenVPN toe te staan. Als u de poort en het protocol in het bestand /etc/openvpn/server.conf niet hebt gewijzigd, moet u UDP-verkeer naar poort 1194 openstellen. Als u de poort en/of het protocol hebt gewijzigd, vervang dan de waarden die u hier hebt geselecteerd. Als u bent vergeten de SSH-poort toe te voegen tijdens het volgen van de voorafgaande handleiding, voeg deze dan hier ook toe:
|
1 2 |
sudo ufw allow 1194/udp sudo ufw allow OpenSSH |
Nadat u deze regels hebt toegevoegd, schakelt u UFW uit en weer in om het opnieuw te starten en de wijzigingen te laden van alle bestanden die u hebt gewijzigd:
|
1 2 |
sudo ufw disable sudo ufw enable |

Gefeliciteerd, uw server is nu geconfigureerd om OpenVPN-verkeer correct af te handelen!
Conclusie
Als u deze handleiding helemaal hebt gevolgd, kunt u nu veilig op internet surfen. U kunt uw identiteit, locatie en verkeer weghouden van nieuwsgierige blikken.
Veel computerplezier!
Reacties
Nog geen reacties. Wees de eerste.