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.