Virtuelle private nettverk (VPN) lar deg skjule dine online dataoverføringer og forbedre sikkerheten din mens du surfer på Internett fra offentlige steder. Mange Internett-leverandører tilbyr både gratis og betalte VPN-alternativer for deg å bruke. Men selv de beste betalte planene kan være upålitelige eller sakte til tider.

Hvis du bare kunne lage din egen VPN mellom din mobile datamaskin og din hjemme-datamaskin.

Faktisk er prosessen enklere enn du kanskje tror. I dag skal vi diskutere hvordan du kan bruke OpenVPN til å opprette en sikker forbindelse mellom en klient og en server på en Linux-maskin.

Husk at vi skal opprette en rutekonfigurasjon og ikke en brudd, noe som burde være bra for de fleste brukstilfeller. Windows-brukere kan følge med ved å lese OpenVPN-dokumentasjonen, som begynner med avsnittet om å sette opp en sertifiseringsinstans. Kommandoer som brukes i Windows, vil være lik de som vises nedenfor.

Hva trenger du

Du trenger to datamaskiner - en er servermaskinen mens den andre er klienten. Servermaskinen kan være ditt hjemme skrivebord eller en Linux-forekomst fra DigitalOcean eller Linode. Klientmaskinen er datamaskinen du bruker regelmessig. Siden denne opplæringen er ferdig på Linux, må begge datamaskiner kjøre Linux også.

Merk : I denne opplæringen bruker vi Ubuntu som vår distro for både serveren og klientmaskinen.

Installere OpenVPN

For å komme i gang må du installere OpenVPN og Easy-RSA på serveren din. Deretter installerer du OpenVPN på klientmaskinen din.

På Ubuntu bør du installere Easy-RSA fra denne Github-siden. Ubuntu inkluderer Easy-RSA versjon 2 i sine repositorier. Github-lenken tilbyr Easy-RSA versjon 3, som følger kommandoene jeg vil bruke i denne artikkelen.

 sudo apt-get installer openvpn git klon https://github.com/OpenVPN/easy-rsa.git 

I katalogen du klonte Github-depotet, kopierer du "easyrsa3" katalogen den inneholder i "/ etc / easy-rsa /."

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

Public Key Infrastructure (PKI)

OpenVPN benytter en Public Key Infrastructure (PKI) for å etablere identiteten til servere og klienter, slik at de separate enhetene kan snakke med hverandre. PKI bruker en mester sertifiseringsinstans (CA) sammen med individuelle sertifikater og private nøkler for hver server og klient.

CA må signere server- og klientsertifikatene. OpenVPN kontrollerer da for å se at serveren autentiserer identiteten til hver klient, og samtidig kontrollerer hver klient identiteten til serveren.

Oppsettet her er mer komplisert enn du kan finne for PPTP-stil-tilkoblinger, men det gir bedre sikkerhet til brukere og gir serveren større frihet til å akseptere eller nekte forespørsler om innkommende klientforbindelser.

Opprette CA-sertifikatet

For strammere sikkerhet anbefales det at din CA-maskin er forskjellig fra serveren din. For korthet, vil denne artikkelen bruke samme maskin for begge oppgaver. Du bør endre filkopieringsprosedyrene for å imøtekomme situasjonen din - om det bruker scp for nettverksoverføringer eller ved hjelp av en USB-nøkkel for å flytte filer manuelt.

Merk : Hvis du bruker en egen datamaskin som din CA, må du installere Easy-RSA på den maskinen.

1. Endre kataloger til "/ etc / easy-rsa /:"

 cd / etc / easy-rsa / 

2. Hvis nødvendig, kopier "/etc/easy-rsa/vars.example" til "/ etc / easy-rsa / vars." Deretter åpner vars for å redigere innholdet:

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

3. Skriv inn detaljene som land, provins, by, organisasjon og e-post. Uncentent linjene som vises her ved å fjerne "#" i begynnelsen av hver enkelt.

Når du er ferdig med redigering, lagre (Ctrl + o) og avslutte (Ctrl + x).

4. Initialiser den nye PKI-en og generer sertifikatmyndighetens keypair som du vil bruke til å signere individuelle server- og klientsertifikater:

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

Kopier ca.crt-filen du nettopp har opprettet til OpenVPN-serverkatalogen din. Du bør også endre eier og gruppe med Chown:

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

Opprette Server-sertifikatet og Private Key

Bytt tilbake til Easy-RSA-katalogen din og generer server-sertifikatet og dets private nøkkel:

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

Du kan endre "Servernavn" i kommandoen ovenfor til hvilket navn du ønsker. Pass på at du reflekterer den endringen når du kopierer den nye nøkkelen til OpenVPN-serverkatalogen:

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

Diffie-Hellman Parameters File

OpenVPN benytter Diffie-Hellman (DH) nøkkelutvekslingsmetoden for sikker utveksling av kryptografiske nøkler over et nettverk. Du vil opprette en DH-parameterfil med følgende kommando:

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

Det endelige nummeret, 2048, i den kommandoen viser antall biter som brukes til å lage filen. For eksempel kan du bruke 4096, men det ville ta mye lengre tid å generere filen og ville ikke forbedre sikkerheten mye. Standard er 2048, og den verdien er tilstrekkelig for de fleste brukstilfeller.

Hash-basert meldingskontroll

OpenVPN bruker også en Hash-basert meldingsautentisering (HMAC) signatur for å beskytte mot sårbarheter i SSL / TLS-håndtrykk. Lag filen med denne kommandoen:

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

Klientfiler

På dette tidspunktet har du opprettet en rekke filer for serveren din. Nå er det på tide å lage filer til kundene dine. Du kan gjenta denne prosessen flere ganger for så mange kunder som du trenger. Du kan opprette klientfiler trygt på hvilken som helst datamaskin med Easy-RSA installert.

Skriv inn Easy-RSA-katalogen og initialiser PKI igjen hvis du ikke har gjort det allerede:

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

Opprett en klientnøkkel og et sertifikat. Bytt kataloger hvis du hoppet over forrige trinn.

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

Hvis du gjentar prosessen, trenger du ikke å initialisere PKI for hver ny klient. Bare vær sikker på å endre "ClientName" for å være unik hver gang.

Signering av server og klientsertifikater

CA må nå signere server- og klientsertifikater.

Hvis du ser i filen "/ etc / easy-rsa / pki / reqs /", bør du se alle forespørselen (.req) -filene Easy-RSA opprettet i de tidligere easyrsa gen-req .

I dette skjermbildet er det bare to .req-filer. Ditt nummer vil variere hvis du har gjort mer enn en klient i forrige trinn.

Hvis du brukte en separat CA-maskin, må du nå overføre disse .req-filene til CA for signering. Når det er ferdig, skift til Easy-RSA-katalogen og signer filene dine med følgende kommandoer, sørg for å gjenspeile riktig sted for hver .req og navnet på hver server og klient.

 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 klient Client1 

Vær oppmerksom på at du må gi Easy-RSA et annet navn for server- og klientsertifikater. ServerName.req vil bli brukt her, for eksempel for å opprette Server1.crt.

Du bør nå finne to nye filer - "/etc/easy-rsa/pki/issued/Server1.crt" og "/etc/easy-rsa/pki/issued/Client1.crt" - som du overfører til sine respektive maskiner (sett i neste del av denne artikkelen). Du kan slette eventuelle .req-filer som forblir.

Passerer langs .CRT-filene

Nå er de signerte sertifikatene (hver .crt) klare til å fungere for sine eiere. Flytt serverfilen til sin OpenVPN-posisjon og lag en ny katalog for klientsertifikatene:

 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 / signert sudo mv /etc/easy-rsa/pki/issued/Client1.crt / etc / easy-rsa / pki / signert / 

Opprett mappen "... pki / signed /" her gir deg en merket plassering for å plassere flere klientsertifikater.

Delte server- og klientfiler

Nå skal du ha fem filer i "/ etc / openvpn / server /" katalogen: ca.crt, dh.pem, Server1.crt, ServerName.key og ta.key.

Du trenger to av de samme filene i OpenVPN-klientmappen på klientens maskin. Kopier dem over med scp eller en flashdisk etter behov. Kopier både "/etc/openvpn/server/ca.crt" og "/etc/openvpn/server/ta.key" til klientens "/ etc / openvpn / client /."

Pass på at du kopierer klientsertifikat og nøkkel til samme sted. Kopier "/etc/easy-rsa/pki/signed/Client1.crt" og "/etc/easy-rsa/pki/private/ClientName.key" til klientens "/ etc / openvpn / client /." Gjenta denne prosessen for eventuelle ekstra klienter du kanskje har opprettet.

For alle klienter, bør du nå ha fire filer i "/ etc / openvpn / client:" Client1.crt, ClientName.key, ca.crt og ta.key.

Server- og klientkonfigurasjonsfiler

Ditt siste skritt før du starter VPN, er å redigere konfigurasjonsfiler for serveren og klienten. Finn først "standard server.conf" og "client.conf" -filene. De vil sannsynligvis være på en av disse stedene:

  • “/ usr / share / OpenVPN / eksempler”
  • "/ Usr / share / doc / openvpn / examples / sample-config-filer /" (Ubuntu konfigs er plassert her)

Merk : På Ubuntu må du pakke ut "server.conf.gz" -filen. Bruk gunzip -d ./server.conf.gz å hente server.conf filen fra den komprimerte pakken.

Kopier hver config-fil til sin respektive "/ etc / openvpn / server /" og "/ etc / openvpn / client /" -katalog.

I server.conf gjør du følgende endringer. Kontroller at navnene og plasseringene til ca.crt, Server1.crt, ServerName.key og dh.pem er oppført i konfigurasjonsfilen din. Du må kanskje bruke hele banene - som en linje som leser "cert /etc/openvpn/server/Server1.crt."

Endre tls-auth... -linjen for å lese tls-crypt ta.key . Igjen kan en full sti være nødvendig.

Uncomment (fjern ";") fra "user no" og "group nobody" linjer.

For din klient vil du gjøre tilsvarende endringer. Etter å ha gjort konfigurasjonsfilen, gjenspeiler navnene og plasseringene til ca.crt, Client1.crt, ClientName.key og ta.key (med samme trekk fra tls-auth... til tls-crypt... ), sett inn navnet eller IP-adressen og porten til serveren din.

Tid til å koble til

Nå kan du starte serveren din og klienten. Dette er en enkel sak hvis alt over gikk som planlagt.

Start serveren med:

 openvpn /etc/openvpn/server/server.conf 

og klienten med:

 openvpn /etc/openvpn/client/client.conf 

Den vellykkede opprettelsen av et VPN vil vise klientens utlæsning "Initialization Sequence Completed" på slutten av utgangen. Du vil også finne en ny type tilkobling i de tilgjengelige nettverksgrensesnittene dine.

Dette skjermbildet viser "tun0" grensesnittet. Det er det som OpenVPN-serveren gjorde. Du kan se adressen sin som 10.8.0.1 og pinge den adressen fra klienten for å bekrefte en vellykket forbindelse.

Ruting Internetttrafikk gjennom serveren

På dette tidspunktet vil du sannsynligvis få tilgang til Internett via serveren din fra den eksterne klienten din. For å gjøre dette må du først endre serverkonfigurasjonsfilen din. Legg linjeskift push 'redirect-gateway def1 til serverkonfigurasjonsfilen din.

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

Du må også fortelle at serveren din på riktig måte ringer kundens internettrafikkforespørsler. Denne kommandoen vil endre Iptables-pakkefiltreringsreglene:

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

Hvis du ikke har endret linjen "server 10.8.0.0 255.255.255.0" i server.conf filen, bør IP-adressen i den kommandoen fungere. Du må endre "eth0" for å matche serverens Ethernet-grensesnitt. Du kan se fra tidligere skjermbilder at min maskin bruker "enp19s0."

Deretter kan du skyve DNS-innstillinger til klienten. Eventuell adresse en klient kan nå kan bli presset. Du kan bruke denne kommandoen som utgangspunkt:

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

Endelig kan du aktivere pakke videresending på serveren som følger:

 ekko 1 | sudo tee / proc / sys / netto / ipv4 / ip_forward 

Du bør nå kunne bruke klienten din til å få tilgang til Internett via VPN.

Konklusjon

Jeg vet at dette har vært en lang vei. Forhåpentligvis har du funnet suksess i å skape en VPN og koble til Internett på en sikker måte.

Hvis ikke noe annet, har dette vært en god lærerfaring for det som trengs for å skape en sikker digital tunnel. Takk for at du ble med meg til slutten.