Hvordan sette opp en OpenVPN-server på Ubuntu 20.04

Ultimate guide for å sette opp en sikker OpenVPN-server på Ubuntu 20.04

Et virtuelt privat nettverk (VPN) lar deg trygt og privat koble til et eksternt privat nettverk, for eksempel kontornettverket eller Internett på en slik måte som om du er direkte koblet til et privat nettverk.

VPN fungerer i en server-klient-arkitektur. En VPN-server er distribuert på en maskin og er offentlig tilgjengelig over Internett. VPN-serveren kan konfigureres til å tillate tilkobling til et privat LAN, for eksempel et kontornettverk, eller tillate tilkoblinger til Internett. Brukeren kobler til VPN-serveren ved hjelp av en VPN-klient på sin lokale maskin. Kommunikasjon mellom VPN-server og klient foregår ved hjelp av en sikker tunneleringsprotokoll. For Internett virker det som om destinasjonen for trafikken er VPN-serveren; trafikken går imidlertid til klienten via serveren.

VPN har mange bruksområder i det daglige livet, som sikker tilkobling til et offentlig Wifi-nettverk, som ofte er kompromittert eller omgå geo-restriksjoner på visse nettsteder ved å koble til en VPN basert i et land som er tillatt av nettstedet.

OpenVPN er en mye brukt VPN-implementering som tillater et bredt spekter av konfigurasjoner og alternativer. Den bruker Secure Sockets Layer (SSL)-protokoll for kryptering av data og forhåndsdelte nøkler, brukernavn/passord eller sertifikater for autentisering av VPN-klienten. I denne artikkelen vil vi se hvordan du setter opp en VPN-server og VPN-klient på Ubuntu 20.04.

Installasjon

OpenVPN er tilgjengelig i de offisielle Ubuntu-repositoriene i pakken openvpn. Denne pakken installerer både OpenVPN-serveren og klienten.

sudo apt installer openvpn

Som nevnt tidligere bruker OpenVPN SSL-sertifikater for å kryptere data mellom serveren og klienten. Vi må sette opp vår egen sertifiseringsinstans (CA) for å utstede sertifikater for VPN. Merk at dette bør settes opp på en annen maskin enn den der OpenVPN er satt opp; årsaken er at hvis den er på samme server og hvis den blir kompromittert, kan en angriper få tilgang til den private nøkkelen og dermed angripe VPN-tilkoblingen.

Vi vil bruke et verktøy kalt "Easy-RSA" for å sette opp sertifiseringsmyndigheten. For å installere den, kjør følgende på CA-maskinen, OpenVPN-servermaskinen og klientmaskinen, da konfigurasjonen kreves på alle tre av disse for å sette opp CA.

sudo apt install easy-rsa

Vi vil nå først konfigurere sertifiseringsmyndigheten på CA-maskinen og utføre noen nødvendige konfigurasjonstrinn for den samme på Open VPN-servermaskinen.

Oppsett av sertifiseringsinstans

Innledende oppsett på CA-maskin

Nå installerer denne pakken en kommando kalt make-cadir som brukes til å opprette en mappe for konfigurasjon av sertifiseringsinstans. La oss lage en mappe ved å bruke denne og gå inn i mappen.

make-cadir cert_authority && cd cert_authority

Åpne filen som heter vars opprettet i denne katalogen. Denne filen inneholder noen konfigurasjonsvariabler som vi må endre. Verdiene som må endres står på linje 91-96, etter kommentaren om Organisasjonsfelt som beskriver disse feltene. Fjern kommentarene til linjene og fyll de riktige verdiene i stedet for prøveverdiene.

Lagre og avslutt filen. Hvis du bruker vim editor, trykk Esc, type :wq og trykk Tast inn for å lagre og avslutte.

Deretter kjører vi easyrsa program i katalogen for å sette opp den offentlige nøkkelinfrastrukturen (PKI), som vil bli brukt til å generere offentlig nøkkel og sertifikater.

./easyrsa init-pki

Det neste trinnet vil generere CA-nøkkelen og sertifikatet. Når kommandoen ber om et passord, skriv inn et passord for CA-nøkkelen. Skriv også inn et vanlig navn når du blir bedt om det. Hvis du lar dette stå tomt, vil standardnavnet Easy-RSA CA-navn brukes.

./easyrsa bygge-ca

Som vi kan se fra utdataene er sertifikatet og nøkkelen generert. Denne nøkkelen vil bli brukt til å signere klient- og serversertifikatene, og bør derfor aldri berøres/modifiseres.

Nå har vi PKI-oppsettet. Neste trinn er å lage en servernøkkel og sertifikat på maskinen som vi skal bruke som en OpenVPN-server. Dette sertifikatet vil senere bli signert av CA-maskinen.

Genererer servernøkkel og sertifikat på servermaskinen

Vi har allerede installert Easy RSA på servermaskinen. Utfør nå de tre trinnene på servermaskinen, som vi tidligere utførte på CA-maskinen, nemlig. opprette en CA-katalog ved hjelp av make-cadir og gå inn i den, endre variablene i vars fil og generere PKI ved hjelp av ./easyrsa init-pki kommando.

Deretter må vi kjøre kommandoen for å generere en serversertifikatforespørsel og nøkkel.

./easyrsa gen-req server nopass

Merk at vi passerte alternativet nopass slik at kommandoen ikke vil be oss om å angi et passord for servernøkkelen. Den vil fortsatt be om et felles navn for serveren, som du kan skrive inn hva som helst, eller la det stå tomt for standardnavnet (server) å bli brukt.

Flytt den genererte nøkkelfilen inne i /etc/openvpn katalog.

sudo mv pki/private/server.key /etc/openvpn

Send sertifikatforespørselen til CA-maskinen. Vi vil bruke kommando scp for dette formålet.

scp pki/reqs/server.req bruker@CA_MACHINE_HOSTNAME:/katalog

I skjermbildet ovenfor er verten 45.79.125.41 CA-maskinen. Vi har kopiert sertifikatet til /root-katalogen.

Nå har sertifikatet til serveren blitt kopiert til CA-maskinen. Neste trinn er å gå tilbake til CA-maskinen og signere dette sertifikatet.

Signering av serversertifikatet i CA

Først, la oss verifisere om sertifikatforespørselsfilen fra serveren har blitt kopiert til CA-maskinen. Gå til katalogen der vi kopierte filen (/root i mitt eksempel) og kjør ls.

:~# cd /root && ls cert_authority server.req

Som vi kan se, filen server.req er tilstede. Gå deretter til CA-katalogen og importer denne forespørselen.

cd cert_authority ./easyrsa import-req /root/server.req server

For å signere denne forespørselen, kjør følgende kommando.

./easyrsa sign-req server server

Her er det første argumentet typen forespørsel, dvs. server, og det andre argumentet er det vanlige navnet på servermaskinen, som vi tidligere brukte standardverdien for, dvs. server.

Skriv inn uttrykket ja, og passordet for CA-nøkkelen når du blir bedt om det.

Nå kan vi fjerne sertifikatforespørselsfilen og kopiere det genererte sertifikatet for serveren, samt CA offentlig sertifikat tilbake til servermaskinen.

rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root

Deretter må vi utføre noen flere trinn for å sikre sikker tilkobling av VPN.

Generering av DH-parametere

DH (Diffie-Hellman) nøkkelutveksling er en algoritme for å sikre en sikker utveksling av kryptonøkler over en usikker kanal. Først, la oss flytte det mottatte sertifikatet og det offentlige CA-sertifikatet til /etc/openvpn.

mv /root/ca.crt /root/server.crt /etc/openvpn

Gå til CA-mappen på servermaskinen og kjør følgende kommando for å generere DH-parametrene. Det kan ta lang tid å generere.

./easyrsa gen-dh

Flytt nå den genererte filen til /etc/openvpn.

mv /root/cert_authority/pki/dh.pem /etc/openvpn

Generering av TA-nøkler

OpenVPN bruker et annet ekstra sikkerhetstiltak ved å bruke TLS auth-nøkkel. For å generere TLS-autenteringsnøkkelen, kjør:

openvpn --genkey --secret tls_auth.key

Og flytt nøkkelen til /etc/openvpn.

mv tls_auth.key /etc/openvpn

Konfigurasjonen av servernøkkelen og oppsett av sertifiseringsinstans er nå ferdig. La oss gå til den faktiske konfigurasjonen av VPN-serveren nå.

OpenVPN-serverkonfigurasjon

Konfigurasjonsfilen for OpenVPN-serveren opprettes ikke automatisk, men vi kan bruke en malkonfigurasjonsfil fra openvpn pakke.

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz

Åpne filen ved å bruke vim eller et hvilket som helst redigeringsprogram du ønsker.

cd /etc/openvpn vim server.conf

Vi må skrive inn de vanlige navnene på nøkler og sertifikater som vi genererte tidligere. Gå til linjenr. 78. Siden vi brukte alle standardnavnene, beholder vi dem uendret. Sjekk deretter navnet på DH-parameterfilen på linje 85. Vi har brukt navnet dh.pem, så la oss endre det.

La oss deretter endre privilegiene for OpenVPN-serveren. Gå til linje 274 og 275 og fjern innledningen ; å avkommentere det.

Gå på samme måte til linje 192 og fjern semikolonet. Dette direktivet gjør at trafikken til alle klientene kan passere gjennom VPN.

Lagre og avslutt filen.

Endre eierskapet til mappen /etc/openvpn til root.

sudo chown -R root:root /etc/openvpn

Oppsett av nettverk og brannmur

Vi må tillate IP-videresending på serveren for å tillate videresending av pakker fra og til VPN-klienten. Avkommenter linje 28 på /etc/sysctl.conf:

Lagre og avslutt filen.

Omstart systemctl for at disse endringene skal finne sted.

sudo sysctl -p

Vi må sette opp Network Address Translation (NAT) på serveren ved å bruke en UFW-brannmur slik at VPN-klienten får tilgang til Internett ved å bruke VPN-serverens IP-adresse. Først, la oss aktivere pakkevideresending i brannmurkonfigurasjonen. Åpen /etc/default/ufw og endre variabelen på linje 19 til ACCEPT.

Lagre og avslutt filen.

Legg nå til følgende regler i filen /etc/ufw/before.rules før filter linje i filen.

*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/8 -o -j MASQUERADE COMMIT

Angi nettverksgrensesnittet i stedet for . Du kan se nettverksgrensesnittet med kommandoen ifconfig.

Tillat trafikk for OpenVPN-tjenesten på brannmuren og tillat port 1194.

sudo ufw tillat openvpn && sudo ufw tillat 1194

Last inn brannmurtjenesten på nytt.

sudo ufw last inn på nytt

Vi kan nå starte Open VPN-serverdemonen på nytt ved å kjøre:

sudo tjeneste openvpn omstart

Aktiver den til å starte ved oppstartstid ved å kjøre:

sudo systemctl aktiver openvpn

OpenVPN-serveren er nå konfigurert og har startet. La oss nå gå videre til klientsertifikatforespørsel og nøkkelgenerering og annen konfigurasjon.

OpenVPN-klientkonfigurasjon

Vi må generere en nøkkel og en sertifikatforespørsel for klienten. Prosedyren for å gjøre dette er den samme som for serveren.

Selv om en klientnøkkel og sertifikatforespørsel kan opprettes på klientmaskinen og deretter overføres til CA-maskinen, anbefales det å opprette den på servermaskinen. Fordelen med å gjøre dette på serveren er at du kan lage et skript for å utføre alle nødvendige trinn på serveren som gjør det lettere for en ny klient å bli med i VPN.

Gå til CA-mappen på serveren og kjør følgende:

cd ~/cert_authority ./easyrsa gen-req klient nopass

På lignende måte som tidligere, skriv inn et vanlig navn når du blir bedt om det, eller la det stå tomt for å bruke standard fellesnavn, dvs. klient.

La oss nå kopiere den genererte klientsertifikatforespørselen til CA-maskinen.

scp pki/reqs/client.req [email protected]:/root

La oss importere denne forespørselen til CA-maskinen:

./easyrsa import-req /root/client.req-klient

Og la oss nå signere det:

./easyrsa sign-req klientklient

Tast innja når du blir bedt om å fortsette. Skriv inn passordet for CA-nøkkelen når du blir bedt om det.

Vi kan nå fjerne den forespurte filen for klienten og kopiere forespørselen tilbake til VPN-servermaskinen.

rm /root/client.req scp pki/issued/client.crt [email protected]:/root

La oss lage en mappe som heter klient for å beholde alle filer relatert til klienten på VPN-serveren. Vi flytter klientnøkkelen og sertifikatet til denne mappen.

mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client

La oss nå lage en konfigurasjonsfil fra en tilgjengelig mal, som ligner på hvordan vi opprettet serverkonfigurasjonsfilen.

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client

Åpne filen client.conf. På linje 42, skriv inn vertsnavn eller IP-adresse til servermaskinen i stedet for min-server-1.

Fjern kommentarene til linjene 61 og 62 ved å fjerne det innledende semikolonet for å nedgradere rettighetene for filen.

Deretter kommenterer du linje 88-90 og linje 108. Grunnen er at vi ønsker å legge til innholdet i de nevnte filene manuelt i stedet for å bruke filplasseringene. Hensikten med å gjøre dette er at klientens konfigurasjonsfil senere vil bli overført til klienten, hvor vi faktisk ikke vil ha klientnøkkelen og sertifikatfilene; derfor kopierer vi innholdet i selve konfigurasjonsfilen.

Legg til følgende til klientens konfigurasjonsfil. Skriv inn filinnholdet til de respektive filene i de gitte kodene.

 # Lim inn innholdet i ca.crt-filen her # Lim inn innholdet i client.crt-filen her # Lim inn innholdet i client.key-filen her key-direction 1 # Lim inn innholdet i tls_auth.key-filen her 

Lagre og avslutt filen. Gi nytt navn til denne filen fra client.conf til klient.ovpn, siden sistnevnte er utvidelsen som kreves for konfigurasjonsfiler som kan importeres som nettverkskonfigurasjoner.

Overfør nå filen klient.ovpn til klienten, dvs. lokal maskin.

Løpe scp på klientmaskinen din for å overføre filen fra servermaskinen til din lokale maskin.

scp bruker@server_ip:/bane_til_fil lokal_destinasjonsbane

Til slutt må vi bruke denne konfigurasjonsfilen for å koble til VPN-serveren. Dette kan gjøres både via kommandolinje så vel som GUI.

For å starte VPN-klienten fra kommandolinjen, kjør:

sudo openvpn --config client.ovpn

Og det er den eneste kommandoen du trenger å kjøre for å starte VPN-klienten.

For å starte VPN-klienten via GUI, utfør følgende trinn.

Gå til Innstillinger » Nettverk på klientmaskinen.

Klikk på + knappen i VPN-delen og velg "Importer fra fil ..." fra alternativene.

Klikk på "Legg til" for å begynne å bruke VPN.

Merk at under 'Gateway' er det IP-adressen til serveren.

Til slutt, veksle mellom 'klient VPN'-knappen for å aktivere VPN på maskinen.

Det kan ta noen sekunder å opprette en VPN-tilkobling. En ny fremdriftslogo for VPN vil vises øverst til venstre på skjermen mens den konfigureres, og den vil endres til en VPN-logo når den er konfigurert.

For å bekrefte om VPN-en fungerer som den skal, kjør følgende:

curl //ipinfo.io/ip

Den skal returnere IP-adressen til servermaskinen din. Ellers kan du også sjekke IP-adressen din ved å søke «Min IP» på Google. Den skal vise VPN-serverens IP-adresse hvis VPN-oppsettet vårt fungerer som det skal.

Konklusjon

I denne artikkelen så vi hvordan du konfigurerer en OpenVPN-server, en sertifiseringsinstans og en OpenVPN-klient. For å legge til flere klienter til VPN, må vi nå følge prosedyren for å generere og signere et sertifikat for klienten og bruke den samme konfigurasjonsfilen som er opprettet her, med bare klientnøkkelen og sertifikatverdiene endret.

Ved tregere internettforbindelser er det mulig at hvis UDP brukes til kommunikasjon, er det betydelig pakketap. Brukeren kan bytte til TCP ved å oppheve kommentering av linjen proto tcp og kommenterer linjen proto udp i serverkonfigurasjonsfilen.

Også, i tilfelle det er andre feil, kan du angi loggingsnivå med verb direktiv i både server- og klientkonfigurasjonsfiler. Du kan angi verdier mellom 0 og 9. Høyere verdien av dette direktivet, mer detaljert vil loggen være.