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.