Met virtuele privénetwerken (VPN's) kunt u uw online datatransmissies verbergen en uw veiligheid verbeteren terwijl u op openbare plaatsen op internet surft. Veel online serviceproviders bieden zowel gratis als betaalde VPN-opties die u kunt gebruiken. Maar zelfs de bestbetaalde plannen kunnen soms onbetrouwbaar of traag zijn.

Kon je maar je eigen VPN maken tussen je mobiele computer en je thuiscomputer.

Eigenlijk is dat proces gemakkelijker dan je zou denken. Vandaag bespreken we hoe u OpenVPN kunt gebruiken om een ​​veilige verbinding tot stand te brengen tussen een client en een server op een Linux-computer.

Houd er rekening mee dat we een routeringsconfiguratie zullen maken en geen overbruggingsconfiguratie, wat in de meeste gevallen goed zou moeten zijn. Windows-gebruikers kunnen dit doen door de OpenVPN-documentatie te lezen, te beginnen met het gedeelte over het instellen van een certificeringsinstantie. Commando's die in Windows worden gebruikt, zullen vergelijkbaar zijn met de hieronder getoonde.

Wat je nodig hebt

U hebt twee computers nodig: de ene is de servermachine en de andere de client. De servermachine kan uw thuiswerkplek zijn of een Linux-instantie van DigitalOcean of Linode. De clientcomputer is de computer die u regelmatig gebruikt. Omdat deze tutorial wordt gedaan onder Linux, moeten beide computers ook Linux draaien.

Opmerking : in deze zelfstudie gebruiken we Ubuntu als onze distro voor zowel de server- als de clientcomputer.

Installeren van OpenVPN

Om te beginnen, moet u OpenVPN en Easy-RSA op uw server installeren. Installeer vervolgens OpenVPN op uw clientcomputer.

Op Ubuntu zou je Easy-RSA van deze Github-pagina moeten installeren. Ubuntu bevat Easy-RSA versie 2 in zijn opslagplaatsen. De Github-koppeling biedt Easy-RSA-versie 3, die de opdrachten volgt die ik in dit artikel zal gebruiken.

 sudo apt-get install openvpn git clone https://github.com/OpenVPN/easy-rsa.git 

In de map waarin je de Github-repository hebt gekopieerd, kopieer je de "easyrsa3" -directory in "/ etc / easy-rsa /."

 sudo mkdir / etc / easy-rsa sudo cp -r ./easyrsa3/* / etc / easy-rsa / 

Public Key Infrastructure (PKI)

OpenVPN maakt gebruik van een Public Key Infrastructure (PKI) om de identiteit van servers en clients vast te stellen, zodat die afzonderlijke entiteiten met elkaar kunnen praten. De PKI gebruikt een hoofdcertificeringsinstantie (CA) naast individuele certificaten en privésleutels voor elke server en client.

De CA moet de server- en clientcertificaten ondertekenen. OpenVPN controleert vervolgens of de server de identiteit van elke client verifieert en tegelijkertijd controleert elke client de identiteit van de server.

De setup hier is ingewikkelder dan u zou kunnen vinden voor PPTP-achtige verbindingen, maar het biedt betere beveiliging aan gebruikers en geeft de server meer vrijheid om aangevraagde inkomende clientverbindingen te accepteren of te weigeren.

Het CA-certificaat maken

Voor een strengere beveiliging wordt aanbevolen dat uw CA-machine anders is dan uw server. Voor de duidelijkheid, dit artikel gebruikt dezelfde machine voor beide taken. U moet uw procedures voor het kopiëren van bestanden aanpassen aan uw situatie - of u scp voor netwerkoverdracht gebruikt of een USB-sleutel gebruikt om bestanden handmatig te verplaatsen.

Opmerking : als u een afzonderlijke computer als uw CA gebruikt, moet u Easy-RSA op die machine installeren.

1. Verander mappen naar "/ etc / easy-rsa /:"

 cd / etc / easy-rsa / 

2. Kopieer indien nodig "/etc/easy-rsa/vars.example" naar "/ etc / easy-rsa / vars." Open vervolgens vars om de inhoud te bewerken:

 sudo cp ./vars.example ./vars sudo nano ./vars 

3. Voer de details in, zoals uw land, provincie, stad, organisatie en e-mailadres. Onthoud de weergegeven lijnen door de "#" aan het begin van elke regel te verwijderen.

Als u klaar bent met bewerken, slaat u op (Ctrl + o) en verlaat u (Ctrl + x).

4. Initialiseer uw nieuwe PKI en genereer de keypair van de certificeringsinstantie die u gaat gebruiken om individuele server- en clientcertificaten te ondertekenen:

 export EASYRSA = $ (pwd) sudo ./easyrsa init-pki sudo ./easyrsa build-ca 

Kopieer het ca.crt-bestand dat u zojuist hebt gemaakt naar uw OpenVPN-serverdirectory. Je moet ook de eigenaar en groep wijzigen met Chown:

 sudo cp /etc/easy-rsa/pki/ca.crt / etc / openvpn / server / sudo chown root: root /etc/openvpn/server/ca.crt 

Het servercertificaat en de privésleutel maken

Ga terug naar uw Easy-RSA-directory en genereer het servercertificaat en zijn privésleutel:

 cd / etc / easy-rsa sudo ./easyrsa init-pki sudo ./easyrsa gen-req ServerName nopass 

U kunt "Servernaam" in de bovenstaande opdracht wijzigen in de naam die u wenst. Zorg ervoor dat u deze wijziging weerspiegelt wanneer u uw nieuwe sleutel naar de OpenVPN-serverdirectory kopieert:

 sudo cp /etc/easy-rsa/pki/private/ServerName.key / etc / openvpn / server / 

Diffie-Hellman Parameters Bestand

OpenVPN maakt gebruik van de Diffie-Hellman (DH) sleuteluitwisselingsmethode voor het veilig uitwisselen van cryptografische sleutels in een netwerk. U maakt een DH-parametersbestand met de volgende opdracht:

 sudo openssl dhparam -out /etc/openvpn/server/dh.pem 2048 

Het laatste nummer, 2048, geeft in die opdracht het aantal bits weer dat is gebruikt bij het maken van het bestand. U zou bijvoorbeeld 4096 kunnen gebruiken, maar het genereren van het bestand zou veel langer duren en de beveiliging zou niet veel verbeteren. De standaardwaarde is 2048 en die waarde is voldoende voor de meeste gebruikscasussen.

Op hash gebaseerde berichtverificatie

OpenVPN maakt ook gebruik van een Hash-gebaseerde Message Authentication (HMAC) -handtekening om te waken tegen kwetsbaarheden in SSL / TLS-handshakes. Maak het bestand met deze opdracht:

 sudo openvpn --genkey --secret /etc/openvpn/server/ta.key 

Client bestanden

Op dit punt hebt u een aantal bestanden voor uw server gemaakt. Nu is het tijd om bestanden voor uw klanten te maken. U kunt dit proces meerdere keren herhalen voor zoveel clients als u nodig hebt. U kunt op elke computer met Easy-RSA clientbestanden op een veilige manier maken.

Ga naar de Easy-RSA-directory en initialiseer de PKI opnieuw als je dat nog niet hebt gedaan:

 cd / etc / easy-rsa sudo ./easyrsa init-pki 

Maak een clientsleutel en certificaat. Wijzig mappen als u de vorige stap hebt overgeslagen.

 cd / etc / easy-rsa sudo ./easyrsa gen-req ClientName nopass 

Als u het proces herhaalt, hoeft u de PKI niet voor elke nieuwe client te initialiseren. Zorg ervoor dat u "ClientName" elke keer weer uniek maakt.

Het ondertekenen van server- en klantcertificaten

De CA moet nu uw server- en clientcertificaten ondertekenen.

Als u in uw "/ etc / easy-rsa / pki / reqs /" -bestand kijkt, ziet u alle verzoekbestanden (.req) Easy-RSA die u in de vorige easyrsa gen-req opdrachten hebt gemaakt.

In dit screenshot zijn er slechts twee .req-bestanden. Uw nummer zal variëren als u in de vorige stap meer dan één client hebt gemaakt.

Als u een afzonderlijke CA-machine hebt gebruikt, moet u die .req-bestanden nu overdragen naar de CA voor ondertekening. Als dat is voltooid, gaat u naar de Easy-RSA-directory en ondertekent u uw bestanden met de volgende opdrachten, waarbij u de juiste locatie van elke .req en de naam van elke server en client weerspiegelt.

 cd / etc / easy-rsa sudo ./easyrsa import-req /etc/easy-rsa/pki/reqs/ServerName.req Server1 sudo ./easyrsa import-req /etc/easy-rsa/pki/reqs/ClientName.req Client1 sudo ./easyrsa sign-req server Server1 sudo ./easyrsa sign-req client Client1 

Houd er rekening mee dat u Easy-RSA een andere naam moet geven voor uw server- en clientcertificaten. ServerName.req wordt hier bijvoorbeeld gebruikt om Server1.crt te maken.

Je zou nu twee nieuwe bestanden moeten vinden - "/etc/easy-rsa/pki/issued/Server1.crt" en "/etc/easy-rsa/pki/issued/Client1.crt" - die je zult overdragen naar hun respectieve machines (te zien in de volgende sectie van dit artikel). U kunt alle REQ-bestanden verwijderen die nog overblijven.

Langs de .CRT-bestanden

Nu zijn de ondertekende certificaten (elke .crt) klaar om te werken voor hun eigenaars. Verplaats het serverbestand naar zijn OpenVPN-locatie en maak een nieuwe map voor de clientcertificaten:

 sudo mv /etc/easy-rsa/pki/issued/Server1.crt / etc / openvpn / server / sudo chown root: root /etc/openvpn/server/Server1.crt sudo mkdir / etc / easy-rsa / pki / signed sudo mv /etc/easy-rsa/pki/issued/Client1.crt / etc / easy-rsa / pki / signed / 

Als u de map "... pki / signed /" hier maakt, krijgt u een gelabelde locatie om meerdere clientcertificaten te plaatsen.

Gedeelde server- en clientbestanden

Nu zou je vijf bestanden in je "/ etc / openvpn / server /" map moeten hebben: ca.crt, dh.pem, Server1.crt, ServerName.key en ta.key.

U hebt twee van dezelfde bestanden nodig in uw OpenVPN-clientmap op de computer van de client. Kopieer ze over naar gebruik met scp of een flash-schijf. Kopieer zowel "/etc/openvpn/server/ca.crt" en "/etc/openvpn/server/ta.key" naar de "/ etc / openvpn / client /."

Zorg ervoor dat u uw clientcertificaat en sleutel naar dezelfde locatie kopieert. Kopieer "/etc/easy-rsa/pki/signed/Client1.crt" en "/etc/easy-rsa/pki/private/ClientName.key" naar "/ etc / openvpn / client /." Van je klant. Herhaal dit proces voor eventuele extra clients die u mogelijk hebt gemaakt.

Voor elke client moet u nu vier bestanden hebben in "/ etc / openvpn / client:" Client1.crt, ClientName.key, ca.crt en ta.key.

Server- en clientconfiguratiebestanden

Uw laatste stap voordat u de VPN start, is het bewerken van configuratiebestanden voor de server en de client. Zoek eerst de bestanden "default server.conf" en "client.conf". Ze bevinden zich waarschijnlijk op een van deze locaties:

  • “/ Usr / share / OpenVPN / examples”
  • "/ Usr / share / doc / openvpn / examples / sample-config-files /" (Ubuntu configs bevindt zich hier)

Opmerking : op Ubuntu moet je het bestand "server.conf.gz" uitpakken. Gebruik gunzip -d ./server.conf.gz om het server.conf-bestand van het gecomprimeerde pakket te krijgen.

Kopieer elk configuratiebestand naar de bijbehorende "/ etc / openvpn / server /" en "/ etc / openvpn / client /" directory.

Maak in server.conf de volgende wijzigingen. Zorg ervoor dat de namen en locaties van uw ca.crt, Server1.crt, ServerName.key en dh.pem in uw configuratiebestand worden vermeld. Mogelijk moet u volledige paden gebruiken - zoals een regel met de tekst "cert /etc/openvpn/server/Server1.crt."

Wijzig de regel tls-auth... om tls-crypt ta.key te lezen. Ook hier kan een volledig pad nodig zijn.

Maak een uncomment (verwijder de ";") uit de regels "user nobody" en "group nobody".

Voor uw klant maakt u vergelijkbare wijzigingen. Na het maken van het configuratiebestand reflecteert u de namen en locaties van uw ca.crt, Client1.crt, ClientName.key en ta.key (met dezelfde verplaatsing van tls-auth... naar tls-crypt... ), plaats de naam of het IP-adres en de poort van uw server.

Tijd om verbinding te maken

Nu kunt u uw server en client starten. Dit is eenvoudig, als alles hierboven zoals gepland verloopt.

Start de server met:

 openvpn /etc/openvpn/server/server.conf 

en de klant met:

 openvpn /etc/openvpn/client/client.conf 

Het succesvol maken van een VPN toont aan het eind van de uitvoer de outputuitlezing van de klant "Initialisatie Sequence Completed". U zult ook een nieuw type verbinding vinden in uw beschikbare netwerkinterfaces.

Deze schermafbeelding toont de interface "tun0". Dat is wat de OpenVPN-server heeft gemaakt. U kunt het adres zien als 10.8.0.1 en dat adres vanaf de client pingen om een ​​succesvolle verbinding te verifiëren.

Routering van internetverkeer via de server

Op dit punt wilt u waarschijnlijk toegang tot internet krijgen via uw server vanaf uw externe client. Om dit te doen, moet u eerst uw serverconfiguratiebestand wijzigen. Voeg de regel push 'redirect-gateway def1 aan uw serverconfiguratiebestand.

 echo "push \" redirect-gateway def1 \ "" | sudo tee -a /etc/openvpn/server/server.conf 

U moet ook uw server laten weten dat hij de internetverkeersverzoeken van de client correct moet routeren. Met deze opdracht worden uw Iptables-regels voor pakketfiltering gewijzigd:

 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE 

Als u de regel "server 10.8.0.0 255.255.255.0" in uw server.conf-bestand niet hebt gewijzigd, zou het IP-adres in die opdracht moeten werken. U moet "eth0" wijzigen om overeen te komen met de ethernetinterface van uw server. Je kunt aan de vorige schermafbeeldingen zien dat mijn computer 'enp19s0' gebruikt.

Vervolgens kunt u DNS-instellingen naar de client pushen. Elk adres dat een klant kan bereiken, kan worden gepusht. U kunt deze opdracht gebruiken als beginpunt:

 echo "push \" dhcp-optie DNS 10.8.0.1 \ "" | sudo tee -a /etc/openvpn/server/server.conf 

Ten slotte kunt u doorsturen van pakketten op de server als volgt inschakelen:

 echo 1 | sudo tee / proc / sys / net / ipv4 / ip_forward 

U zou nu uw cliënt moeten kunnen gebruiken om toegang te krijgen tot het internet via de VPN.

Conclusie

Ik weet dat dit een lange weg is geweest. Hopelijk heb je succes gevonden bij het maken van een VPN en het op een veilige manier verbinden met internet.

Als dit niet anders is, is dit een goede leerervaring geweest voor wat er nodig is om een ​​veilige digitale tunnel te maken. Bedankt dat je tot het einde bent toegetreden.