Hur man ställer in en OpenVPN-server på Ubuntu 20.04

Ultimat guide för att ställa in en säker OpenVPN-server på Ubuntu 20.04

Med ett virtuellt privat nätverk (VPN) kan du säkert och privat ansluta till ett privat fjärrnätverk, till exempel ditt kontorsnätverk eller Internet på ett sådant sätt som om du är direkt ansluten till ett privat nätverk.

VPN fungerar i en server-klient-arkitektur. En VPN-server distribueras på en maskin och är allmänt tillgänglig över Internet. VPN-servern kan konfigureras för att tillåta anslutning till ett privat LAN, till exempel ett kontorsnätverk, eller tillåta anslutningar till Internet. Användaren ansluter till VPN-servern med hjälp av en VPN-klient på sin lokala dator. Kommunikation mellan VPN-server och klient sker med hjälp av ett säkert tunnelprotokoll. För Internet verkar det som om destinationen för trafiken är VPN-servern; trafiken går dock vidare till klienten via servern.

VPN har många användningsområden i det dagliga livet, som att säkert ansluta till ett offentligt wifi-nätverk, som ofta äventyras eller kringgå geografiska begränsningar på vissa webbplatser genom att ansluta till ett VPN baserat i ett land som är tillåtet av webbplatsen.

OpenVPN är en allmänt använd VPN-implementering som tillåter ett brett utbud av konfigurationer och alternativ. Den använder Secure Sockets Layer (SSL)-protokoll för kryptering av data och fördelade nycklar, användarnamn/lösenord eller certifikat för autentisering av VPN-klienten. I den här artikeln kommer vi att se hur du ställer in en VPN-server och VPN-klient på Ubuntu 20.04.

Installation

OpenVPN är tillgängligt i de officiella Ubuntu-förråden i paketet openvpn. Detta paket installerar både OpenVPN-servern och klienten.

sudo apt installera openvpn

Som tidigare nämnts använder OpenVPN SSL-certifikat för att kryptera data mellan servern och klienten. Vi måste ställa in vår egen certifikatutfärdare (CA) för att utfärda certifikat för VPN. Observera att detta bör ställas in på en annan dator än den där OpenVPN är inställd; Anledningen är att om den finns på samma server och om den äventyras kan en angripare komma åt den privata nyckeln och därmed attackera VPN-anslutningen.

Vi kommer att använda ett verktyg som heter "Easy-RSA" för att ställa in certifikatutfärdaren. För att installera det, kör följande på CA-maskinen, OpenVPN-servermaskinen och klientdatorn, eftersom konfigurationen krävs på alla tre av dessa för att ställa in CA:n.

sudo apt installera easy-rsa

Vi kommer nu först att konfigurera certifikatutfärdaren på CA-maskinen och utföra några nödvändiga konfigurationssteg för densamma på Open VPN-serverdatorn.

Inställning av certifikatutfärdare

Initial installation på CA-maskin

Nu installerar detta paket ett kommando som heter make-cadir som används för att skapa en mapp för konfiguration av certifikatutfärdare. Låt oss skapa en mapp med detta och gå in i mappen.

make-cadir cert_authority && cd cert_authority

Öppna filen som heter vars skapas i den här katalogen. Den här filen innehåller några konfigurationsvariabler som vi behöver ändra. Värdena som behöver ändras finns på raderna 91-96, efter kommentaren om Organisatoriska fält som beskriver dessa fält. Avkommentera raderna och fyll i lämpliga värden istället för provvärdena.

Spara och avsluta filen. Om du använder vim editor, tryck Esc, typ :wq och tryck Stiga på för att spara och avsluta.

Därefter kör vi easyrsa program i katalogen för att ställa in den offentliga nyckelinfrastrukturen (PKI), som kommer att användas för att generera offentlig nyckel och certifikat.

./easyrsa init-pki

Nästa steg kommer att generera CA-nyckeln och certifikatet. När kommandot uppmanar dig att ange ett lösenord anger du ett lösenord för CA-nyckeln. Ange också ett vanligt namn när du uppmanas. Om du lämnar detta tomt kommer standardnamnet Easy-RSA CA-namn att användas.

./easyrsa build-ca

Som vi kan se från utdata har certifikatet och nyckeln genererats. Den här nyckeln kommer att användas för att signera klient- och servercertifikaten, därför bör den aldrig röras/ändras.

Nu har vi PKI-inställningen. Nästa steg är att skapa en servernyckel och certifikat på maskinen som vi kommer att använda som en OpenVPN-server. Detta certifikat kommer senare att signeras av CA-maskinen.

Genererar servernyckel och certifikat på servermaskinen

Vi har redan installerat Easy RSA på servermaskinen. Utför nu de tre stegen på servermaskinen, som vi tidigare utförde på CA-maskinen, dvs. skapa en CA-katalog med hjälp av make-cadir och gå in i det, modifiera variablerna i vars fil och generera PKI med hjälp av ./easyrsa init-pki kommando.

Därefter måste vi köra kommandot för att generera en servercertifikatbegäran och nyckel.

./easyrsa gen-req server nopass

Observera att vi klarade alternativet nopass så att kommandot inte kommer att uppmana oss att ange ett lösenord för servernyckeln. Det kommer fortfarande att fråga efter ett vanligt namn för servern, som du kan ange vad som helst, eller lämna det tomt för standardnamnet (server) att användas.

Flytta den genererade nyckelfilen inuti /etc/openvpn katalog.

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

Skicka certifikatbegäran till CA-maskinen. Vi kommer att använda kommando scp för detta ändamål.

scp pki/reqs/server.req användare@CA_MACHINE_VÄRDNAMN:/katalog

I skärmdumpen ovan är värden 45.79.125.41 CA-maskinen. Vi har kopierat certifikatet till /rootkatalogen.

Nu har certifikatet för servern kopierats till CA-maskinen. Nästa steg är att gå tillbaka till CA-maskinen och signera detta certifikat.

Signering av servercertifikatet i CA

Låt oss först verifiera om certifikatbegäransfilen från servern har kopierats till CA-maskinen. Gå till katalogen där vi kopierade filen (/root i mitt exempel) och kör ls.

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

Som vi kan se, filen server.req är närvarande. Gå sedan till CA-katalogen och importera denna begäran.

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

För att signera denna begäran, kör följande kommando.

./easyrsa sign-req server server

Här är det första argumentet typen av begäran, dvs. server, och det andra argumentet är det vanliga namnet på servermaskinen, för vilken vi tidigare använde standardvärdet, dvs. server.

Skriv in frasen ja, och lösenordet för CA-nyckeln när du uppmanas att göra det.

Nu kan vi ta bort certifikatbegäransfilen och kopiera det genererade certifikatet för servern, samt CA:s offentliga certifikat tillbaka till servermaskinen.

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

Därefter måste vi utföra några fler steg för att säkerställa säker anslutning av VPN.

Generering av DH-parametrar

DH (Diffie-Hellman) nyckelutbyte är en algoritm för att säkerställa ett säkert utbyte av kryptonycklar över en osäker kanal. Låt oss först flytta det mottagna certifikatet och det offentliga CA-certifikatet till /etc/openvpn.

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

Gå till CA-mappen på servermaskinen och kör följande kommando för att generera DH-parametrarna. Det kan ta lång tid att generera.

./easyrsa gen-dh

Flytta nu den genererade filen till /etc/openvpn.

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

Genererar TA-nycklar

OpenVPN använder en annan ytterligare säkerhetsåtgärd med TLS-auth-nyckel. För att generera TLS-auth-nyckeln, kör:

openvpn --genkey --hemlig tls_auth.key

Och flytta nyckeln till /etc/openvpn.

mv tls_auth.key /etc/openvpn

Konfigurationen av servernyckeln och konfigurationen av certifikatutfärdaren är nu klar. Låt oss gå till den faktiska konfigurationen av VPN-servern nu.

OpenVPN-serverkonfiguration

Konfigurationsfilen för OpenVPN-servern skapas inte automatiskt, men vi kan använda en mallkonfigurationsfil från openvpn paket.

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

Öppna filen med vim eller valfri redigerare.

cd /etc/openvpn vim server.conf

Vi måste ange de vanliga namnen på nycklar och certifikat som vi genererade tidigare. Gå till rad nr. 78. Eftersom vi använde alla standardnamn behåller vi dem oförändrade. Kontrollera sedan namnet för DH-parameterfilen på rad 85. Vi har använt namnet dh.pem, så låt oss ändra det.

Låt oss sedan ändra privilegierna för OpenVPN-servern. Gå till rad 274 och 275 och ta bort den inledande ; att avkommentera det.

Gå på samma sätt till rad 192 och ta bort semikolonet. Detta direktiv gör det möjligt för trafik för alla klienter att passera genom VPN.

Spara och avsluta filen.

Ändra ägandet av mappen /etc/openvpn till root.

sudo chown -R root:root /etc/openvpn

Installation av nätverk och brandvägg

Vi måste tillåta IP-vidarebefordran på servern för att tillåta att paket vidarebefordras från och till VPN-klienten. Avkommentera rad 28 på /etc/sysctl.conf:

Spara och avsluta filen.

Omstart systemctl för att dessa förändringar ska kunna ske.

sudo sysctl -s

Vi måste ställa in Network Address Translation (NAT) på servern med en UFW-brandvägg för att tillåta VPN-klienten åtkomst till Internet med VPN-serverns IP-adress. Låt oss först aktivera vidarebefordran av paket i brandväggskonfigurationen. Öppen /etc/default/ufw och ändra variabeln på rad 19 till ACCEPT.

Spara och avsluta filen.

Lägg nu till följande regler i filen /etc/ufw/before.rules Innan filtrera rad i filen.

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

Ange ditt nätverksgränssnitt i stället för . Du kan se ditt nätverksgränssnitt med kommandot ifconfig.

Tillåt trafik för OpenVPN-tjänsten på brandväggen och tillåt port 1194.

sudo ufw tillåter openvpn && sudo ufw tillåter 1194

Ladda om brandväggstjänsten.

sudo ufw ladda om

Vi kan nu starta om Open VPN-serverdemonen genom att köra:

sudo tjänst openvpn omstart

Aktivera den att starta vid uppstart genom att köra:

sudo systemctl aktivera openvpn

OpenVPN-servern har nu konfigurerats och har startat. Låt oss nu gå vidare till klientcertifikatbegäran och nyckelgenerering och annan konfiguration.

OpenVPN-klientkonfiguration

Vi måste generera en nyckel och en certifikatbegäran för klienten. Proceduren för att göra detta är densamma som för servern.

Även om en klientnyckel och certifikatbegäran kan skapas på klientdatorn och sedan överföras till CA-maskinen, rekommenderas att den skapas på serverdatorn. Fördelen med att göra detta på servern är att du kan skapa ett skript för att utföra alla nödvändiga steg på servern vilket gör det lättare för en ny klient att ansluta till VPN.

Gå till CA-mappen på servern och kör följande:

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

På liknande sätt som tidigare anger du ett vanligt namn när du uppmanas, eller lämnar det tomt för att använda standardnamnet, dvs. klient.

Låt oss nu kopiera den genererade klientcertifikatbegäran till CA-maskinen.

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

Låt oss importera denna begäran i CA-maskinen:

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

Och låt oss nu skriva under:

./easyrsa sign-req klientklient

Stiga påja när du uppmanas att fortsätta. Ange lösenordet för CA-nyckeln när du tillfrågas.

Vi kan nu ta bort den begärda filen för klienten och kopiera begäran tillbaka till VPN-servermaskinen.

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

Låt oss skapa en mapp som heter klient för att behålla alla filer relaterade till klienten på VPN-servern. Vi kommer att flytta klientnyckeln och certifikatet till den här mappen.

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

Låt oss nu skapa en konfigurationsfil från en tillgänglig mall, liknande hur vi skapade serverkonfigurationsfilen.

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

Öppna filen client.conf. På rad 42 anger du din servermaskins värdnamn eller IP-adress istället för min-server-1.

Avkommentera raderna 61 och 62 genom att ta bort det inledande semikolonet för att nedgradera privilegier för filen.

Kommentera sedan raderna 88-90 och rad 108. Anledningen är att vi vill lägga till innehållet i de nämnda filerna manuellt istället för att använda filplatserna. Syftet med att göra detta är att klientens konfigurationsfil senare kommer att överföras till klienten, där vi faktiskt inte kommer att ha klientnyckeln och certifikatfilerna; därför kopierar vi innehållet av dem i själva konfigurationsfilen.

Lägg till följande till klientens konfigurationsfil. Ange filinnehållet för respektive filer i de givna taggarna.

 # Klistra in innehållet i filen ca.crt här # Klistra in innehållet i filen client.crt här # Klistra in innehållet i filen client.key här nyckelriktning 1 # Klistra in innehållet i filen tls_auth.key här 

Spara och avsluta filen. Byt namn på den här filen från client.conf till client.ovpn, eftersom den senare är tillägget som krävs för konfigurationsfiler som kan importeras som nätverkskonfigurationer.

Överför nu filen client.ovpn till klienten, dvs den lokala maskinen.

Springa scp på din klientdator för att överföra filen från serverdatorn till din lokala dator.

scp användare@server_ip:/sökväg_till_fil lokal_destinationssökväg

Slutligen måste vi använda den här konfigurationsfilen för att ansluta till VPN-servern. Detta kan göras både via kommandoraden och GUI.

För att starta VPN-klienten från kommandoraden, kör:

sudo openvpn --config client.ovpn

Och det är det enda kommandot du behöver köra för att starta VPN-klienten.

För att starta VPN-klienten via GUI, utför följande steg.

Gå till Inställningar » Nätverk på din klientdator.

Klicka på + knappen i VPN-sektionen och välj "Importera från fil..." från alternativen.

Klicka på "Lägg till" för att börja använda VPN.

Observera att under "Gateway" är det serverns IP-adress.

Slutligen, växla "klient VPN"-knappen för att aktivera VPN på maskinen.

Det kan ta några sekunder att upprätta en VPN-anslutning. En ny förloppslogotyp för VPN kommer att visas i det övre vänstra hörnet av din skärm medan den ställs in, och den kommer att ändras till en VPN-logotyp när den väl har konfigurerats.

För att verifiera om VPN fungerar korrekt, kör följande:

curl //ipinfo.io/ip

Den bör returnera IP-adressen för din servermaskin. Eller så kan du också kontrollera din IP-adress genom att helt enkelt söka "Min IP" på Google. Den bör visa din VPN-servers IP-adress om vår VPN-inställning fungerar korrekt.

Slutsats

I den här artikeln såg vi hur man konfigurerar en OpenVPN-server, en certifikatutfärdare och en OpenVPN-klient. För att lägga till fler klienter till VPN, måste vi nu följa proceduren för att generera och signera ett certifikat för klienten och använda samma konfigurationsfil som skapats här, med endast klientnyckeln och certifikatvärdena ändrade.

I fallet med långsammare internetanslutningar är det möjligt att om UDP används för kommunikation, finns det betydande paketförluster. Användaren kan byta till TCP genom att avkommentera raden proto tcp och kommentera raden proto udp i serverns konfigurationsfil.

Dessutom, om det finns andra fel, kan du ställa in loggningsnivån med verb direktiv i både server- och klientkonfigurationsfiler. Du kan ange värden mellan 0 och 9. Högre värde för detta direktiv, mer utförlig blir loggen.