Sådan opsætter du en OpenVPN-server på Ubuntu 20.04

Ultimativ guide til opsætning af en sikker OpenVPN-server på Ubuntu 20.04

Et virtuelt privat netværk (VPN) giver dig mulighed for sikkert og privat at oprette forbindelse til et eksternt privat netværk, for eksempel dit kontornetværk eller internettet på en sådan måde, som om du er direkte forbundet til et privat netværk.

VPN fungerer i en server-klient-arkitektur. En VPN-server er installeret på en maskine og er offentligt tilgængelig via internettet. VPN-serveren kan konfigureres til at tillade forbindelse til et privat LAN, såsom et kontornetværk, eller tillade forbindelser til internettet. Brugeren opretter forbindelse til VPN-serveren ved hjælp af en VPN-klient på sin lokale maskine. Kommunikation mellem VPN-server og klient foregår ved hjælp af en sikker tunneling-protokol. For internettet ser det ud som om destinationen for trafikken er VPN-serveren; dog overføres trafikken til klienten via serveren.

VPN har mange anvendelser i det daglige liv, såsom sikker forbindelse til et offentligt Wifi-netværk, som ofte kompromitteres eller omgå geo-begrænsninger på visse websteder ved at oprette forbindelse til en VPN baseret i et land, som er tilladt af webstedet.

OpenVPN er en udbredt VPN-implementering, der tillader en bred vifte af konfigurationer og muligheder. Den bruger Secure Sockets Layer (SSL) protokol til kryptering af data og foruddelte nøgler, brugernavn/adgangskode eller certifikater til godkendelse af VPN-klienten. I denne artikel vil vi se, hvordan du opsætter en VPN-server og VPN-klient på Ubuntu 20.04.

Installation

OpenVPN er tilgængelig i de officielle Ubuntu-depoter i pakken åbenvpn. Denne pakke installerer både OpenVPN-serveren og klienten.

sudo apt installer openvpn

Som tidligere nævnt bruger OpenVPN SSL-certifikater til at kryptere data mellem serveren og klienten. Vi skal konfigurere vores egen certifikatmyndighed (CA) til at udstede certifikater til VPN. Bemærk at dette skal sættes op på en anden maskine end den hvor OpenVPN er sat op; årsagen er, at hvis den er på den samme server, og hvis den bliver kompromitteret, kan en angriber få adgang til den private nøgle og dermed angribe VPN-forbindelsen.

Vi vil bruge et værktøj kaldet 'Easy-RSA' til at opsætte certifikatmyndigheden. For at installere det skal du køre følgende på CA-maskinen, OpenVPN-servermaskinen og klientmaskinen, da konfigurationen er påkrævet på alle tre af disse for at opsætte CA'en.

sudo apt installer easy-rsa

Vi vil nu først konfigurere certifikatmyndigheden på CA-maskinen og udføre nogle nødvendige konfigurationstrin for samme på Open VPN-servermaskinen.

Opsætning af certifikatmyndighed

Indledende opsætning på CA-maskine

Nu installerer denne pakke en kommando kaldet make-cadir som bruges til at oprette en mappe til certifikatmyndighedskonfiguration. Lad os oprette en mappe ved hjælp af denne og gå ind i mappen.

make-cadir cert_authority && cd cert_authority

Åbn filen kaldet vars oprettet i denne mappe. Denne fil indeholder nogle konfigurationsvariabler, som vi skal ændre. De værdier, der skal ændres, står på linje 91-96, efter kommentaren vedr Organisatoriske felter som beskriver disse felter. Fjern kommentering af linjerne, og udfyld de relevante værdier i stedet for prøveværdierne.

Gem og afslut filen. Hvis du bruger vim editor, skal du trykke på Esc, type :wq og tryk Gå ind for at gemme og afslutte.

Dernæst kører vi easyrsa program i biblioteket til at opsætte den offentlige nøgleinfrastruktur (PKI), som vil blive brugt til at generere offentlige nøgler og certifikater.

./easyrsa init-pki

Det næste trin vil generere CA-nøglen og certifikatet. Når kommandoen beder om en adgangskode, skal du indtaste en adgangskode til CA-nøglen. Indtast også et almindeligt navn, når du bliver bedt om det. Hvis du lader dette stå tomt, vil standardnavnet Easy-RSA CA-navn blive brugt.

./easyrsa build-ca

Som vi kan se fra outputtet, er certifikatet og nøglen blevet genereret. Denne nøgle vil blive brugt til at signere klient- og servercertifikaterne, og derfor bør den aldrig røres/ændres.

Nu har vi PKI-opsætningen. Næste trin er at oprette en servernøgle og certifikat på maskinen, som vi vil bruge som en OpenVPN-server. Dette certifikat vil senere blive underskrevet af CA-maskinen.

Generering af servernøgle og certifikat på servermaskinen

Vi har allerede installeret Easy RSA på servermaskinen. Udfør nu de tre trin på servermaskinen, som vi tidligere udførte på CA maskinen, dvs. oprettelse af et CA-bibliotek vha make-cadir og gå ind i det, ændre variablerne i vars fil og generere PKI ved hjælp af ./easyrsa init-pki kommando.

Dernæst skal vi køre kommandoen for at generere en servercertifikatanmodning og -nøgle.

./easyrsa gen-req server nopass

Bemærk, at vi bestod muligheden nopass så kommandoen ikke vil bede os om at indtaste en adgangskode til servernøglen. Det vil stadig bede om et fælles navn for serveren, som du kan indtaste hvad som helst, eller lade det være tomt for standardnavnet (server) at blive brugt.

Flyt den genererede nøglefil inde i /etc/openvpn vejviser.

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

Send certifikatanmodningen til CA-maskinen. Vi vil bruge kommando scp til dette formål.

scp pki/reqs/server.req bruger@CA_MACHINE_HOSTNAME:/bibliotek

I skærmbilledet ovenfor er værten 45.79.125.41 CA-maskinen. Vi har kopieret certifikatet i /root-mappen.

Nu er serverens certifikat blevet kopieret til CA-maskinen. Næste trin er at gå tilbage til CA-maskinen og underskrive dette certifikat.

Signering af servercertifikatet i CA

Lad os først kontrollere, om certifikatanmodningsfilen fra serveren er blevet kopieret på CA-maskinen. Gå til den mappe, hvor vi kopierede filen (/root i mit eksempel) og kør ls.

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

Som vi kan se, filen server.req er til stede. Gå derefter til CA-biblioteket og importer denne anmodning.

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

For at underskrive denne anmodning skal du køre følgende kommando.

./easyrsa sign-req server server

Her er det første argument typen af ​​anmodning, dvs. server, og det andet argument er det fælles navn på servermaskinen, som vi tidligere brugte standardværdien for, dvs. server.

Indtast sætningen Ja, og adgangskoden til CA-nøglen, når du bliver bedt om det.

Nu kan vi fjerne certifikatanmodningsfilen og kopiere det genererede certifikat til serveren, samt CA offentligt certifikat tilbage til servermaskinen.

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

Dernæst skal vi udføre nogle flere trin for at sikre sikker forbindelse til VPN.

Generering af DH-parametre

DH (Diffie-Hellman) nøgleudveksling er en algoritme til at sikre en sikker udveksling af kryptonøgler over en usikker kanal. Lad os først flytte det modtagne certifikat og det offentlige CA-certifikat til /etc/openvpn.

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

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

./easyrsa gen-dh

Flyt nu den genererede fil til /etc/openvpn.

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

Generering af TA-nøgler

OpenVPN bruger en anden ekstra sikkerhedsforanstaltning ved hjælp af TLS-godkendelsesnøgle. For at generere TLS-godkendelsesnøglen skal du køre:

openvpn --genkey --hemmelig tls_auth.key

Og flyt nøglen til /etc/openvpn.

mv tls_auth.key /etc/openvpn

Servernøglekonfigurationen og opsætningen af ​​certifikatmyndigheden er nu færdig. Lad os nu gå til den faktiske konfiguration af VPN-serveren.

OpenVPN-serverkonfiguration

Konfigurationsfilen til OpenVPN-serveren oprettes ikke automatisk, men vi kan bruge en skabelonkonfigurationsfil fra åbenvpn pakke.

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

Åbn filen ved hjælp af vim eller en editor efter eget valg.

cd /etc/openvpn vim server.conf

Vi skal indtaste de almindelige navne på nøgler og certifikater, som vi tidligere genererede. Gå til linje nr. 78. Da vi brugte alle standardnavnene, beholder vi dem uændrede. Tjek derefter navnet på DH-parameterfilen på linje 85. Vi har brugt navnet dh.pem, så lad os ændre det.

Lad os derefter ændre privilegierne for OpenVPN-serveren. Gå til linje 274 og 275 og fjern den forreste ; at fjerne kommentaren.

Gå på samme måde til linje 192 og fjern semikolon. Dette direktiv gør det muligt for alle klienters trafik at passere gennem VPN.

Gem og afslut filen.

Skift ejerskabet af mappen /etc/openvpn til root.

sudo chown -R root:root /etc/openvpn

Opsætning af netværk og firewall

Vi skal tillade IP-videresendelse på serveren for at tillade, at pakker kan videresendes fra og til VPN-klienten. Fjern kommentar til linje 28 /etc/sysctl.conf:

Gem og afslut filen.

Genstart systemctl for at disse ændringer kan finde sted.

sudo sysctl -s

Vi er nødt til at konfigurere Network Address Translation (NAT) på serveren ved hjælp af en UFW-firewall for at give VPN-klienten adgang til internettet ved hjælp af VPN-serverens IP-adresse. Lad os først aktivere pakkevideresendelse i firewall-konfigurationen. Åben /etc/default/ufw og ændre variablen på linje 19 til ACCEPT.

Gem og afslut filen.

Tilføj nu følgende regler til 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

Indtast din netværksgrænseflade i stedet for . Du kan se din netværksgrænseflade med kommandoen ifconfig.

Tillad trafik for OpenVPN-tjenesten på firewallen og tillad port 1194.

sudo ufw tillad openvpn && sudo ufw tillad 1194

Genindlæs firewall-tjenesten.

sudo ufw genindlæs

Vi kan nu genstarte Open VPN-serverdæmonen ved at køre:

sudo service openvpn genstart

Aktiver den til at starte ved opstart ved at køre:

sudo systemctl aktiver openvpn

OpenVPN-serveren er nu blevet konfigureret og er startet. Lad os nu gå videre til klientcertifikatanmodning og nøglegenerering og anden konfiguration.

OpenVPN-klientkonfiguration

Vi skal generere en nøgle og en certifikatanmodning til klienten. Proceduren for at gøre dette er den samme som for serveren.

Selvom en klientnøgle og certifikatanmodning kan oprettes på klientmaskinen og derefter overføres til CA-maskinen, anbefales det at oprette den på servermaskinen. Fordelen ved at gøre dette på serveren er, at du kan oprette et script til at udføre alle de nødvendige trin på serveren, hvilket gør det nemmere for en ny klient at tilslutte sig VPN.

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

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

Indtast et almindeligt navn på samme måde som tidligere, når du bliver bedt om det, eller lad det stå tomt for at bruge standardnavnet, dvs. klient.

Lad os nu kopiere den genererede klientcertifikatanmodning til CA-maskinen.

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

Lad os importere denne anmodning i CA-maskinen:

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

Og lad os nu underskrive det:

./easyrsa sign-req klient klient

Gå indJa når du bliver bedt om at fortsætte. Indtast adgangskoden til CA-nøgle, når du bliver bedt om det.

Vi kan nu fjerne den anmodede fil for klienten og kopiere anmodningen tilbage til VPN-servermaskinen.

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

Lad os oprette en mappe kaldet klient at beholde alle filer relateret til klienten på VPN-serveren. Vi flytter klientnøglen og certifikatet til denne mappe.

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

Lad os nu oprette en konfigurationsfil fra en tilgængelig skabelon, svarende til hvordan vi oprettede serverkonfigurationsfilen.

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

Åbn filen client.conf. På linje 42 skal du indtaste værtsnavnet eller IP-adressen på din servermaskine i stedet for min-server-1.

Fjern kommentarer til linje 61 og 62 ved at fjerne det indledende semikolon for at nedgradere rettighederne for filen.

Dernæst kommenterer du linje 88-90 og linje 108. Årsagen er, at vi ønsker at tilføje indholdet af de nævnte filer manuelt i stedet for at bruge filplaceringerne. Formålet med at gøre dette er, at klientens konfigurationsfil senere vil blive overført til klienten, hvor vi faktisk ikke vil have klientnøglen og certifikatfilerne; derfor kopierer vi indholdet af dem i selve konfigurationsfilen.

Føj følgende til klientkonfigurationsfilen. Indtast filindholdet af de respektive filer inden for de givne tags.

 # Indsæt indhold af ca.crt-fil her # Indsæt indhold af client.crt-fil her # Indsæt indhold af client.key-fil her key-direction 1 # Indsæt indhold af tls_auth.key-fil her 

Gem og afslut filen. Omdøb denne fil fra client.conf til client.ovpn, da sidstnævnte er den udvidelse, der kræves til konfigurationsfiler, som kan importeres som netværkskonfigurationer.

Overfør nu filen client.ovpn til klienten, dvs. den lokale maskine.

Løb scp på din klientmaskine for at overføre fil fra servermaskine til din lokale maskine.

scp bruger@server_ip:/sti_til_fil lokal_destinationssti

Til sidst skal vi bruge denne konfigurationsfil til at oprette forbindelse til VPN-serveren. Dette kan gøres både via kommandolinjen såvel som GUI.

For at starte VPN-klienten fra kommandolinjen, kør:

sudo openvpn --config client.ovpn

Og det er den eneste kommando, du skal køre for at starte VPN-klienten.

Udfør følgende trin for at starte VPN-klienten via GUI.

Gå til Indstillinger » Netværk på din klientmaskine.

Klik på + knappen i VPN-sektionen og vælg 'Importer fra fil...' fra mulighederne.

Klik på 'Tilføj' for at begynde at bruge VPN.

Bemærk, at under 'Gateway' er det serverens IP-adresse.

Til sidst skal du skifte 'klient VPN'-knappen for at aktivere VPN på maskinen.

Det kan tage et par sekunder at etablere en VPN-forbindelse. Et nyt fremskridtslogo for VPN vises i øverste venstre hjørne af din skærm, mens det konfigureres, og det ændres til et VPN-logo, når det er konfigureret.

For at kontrollere, om VPN'en fungerer korrekt, skal du køre følgende:

krølle //ipinfo.io/ip

Det skulle returnere IP-adressen på din servermaskine. Eller også kan du også tjekke din IP-adresse ved blot at søge 'Min IP' på Google. Den skal vise din VPN-servers IP-adresse, hvis vores VPN-opsætning fungerer korrekt.

Konklusion

I denne artikel så vi, hvordan man konfigurerer en OpenVPN-server, en certifikatmyndighed og en OpenVPN-klient. For at tilføje flere klienter til VPN'en skal vi nu følge proceduren for at generere og signere et certifikat for klienten og bruge den samme konfigurationsfil, der er oprettet her, med kun klientnøglen og certifikatværdierne ændret.

I tilfælde af langsommere internetforbindelser er det muligt, at hvis UDP bruges til kommunikation, er der et betydeligt pakketab. Brugeren kan skifte til TCP ved at fjerne kommentering af linjen proto tcp og kommenterer linjen proto udp i serverkonfigurationsfilen.

Hvis der er andre fejl, kan du også indstille logningsniveauet med udsagnsord direktiv i både server- og klientkonfigurationsfiler. Du kan indtaste værdier mellem 0 og 9. Højere værdien af ​​dette direktiv, mere detaljeret vil loggen være.