Een OpenVPN-server instellen op Ubuntu 20.04

Ultieme gids voor het opzetten van een veilige OpenVPN-server op Ubuntu 20.04

Met een Virtual Private Network (VPN) kunt u veilig en privé verbinding maken met een extern particulier netwerk, bijvoorbeeld uw kantoornetwerk of internet, op een manier alsof u rechtstreeks bent verbonden met een particulier netwerk.

VPN werkt in een server-client-architectuur. Een VPN-server wordt ingezet op een machine en is publiekelijk toegankelijk via internet. De VPN-server kan worden geconfigureerd om verbinding te maken met een privé-LAN, zoals een kantoornetwerk, of om verbindingen met internet toe te staan. De gebruiker maakt verbinding met de VPN-server via een VPN-client op zijn lokale computer. De communicatie tussen VPN-server en client vindt plaats via een beveiligd tunnelingprotocol. Voor internet lijkt het alsof de bestemming van het verkeer de VPN-server is; het verkeer gaat echter via de server naar de client.

VPN heeft veel toepassingen in het dagelijks leven, zoals veilig verbinding maken met een openbaar wifi-netwerk, dat vaak wordt gecompromitteerd of geografische beperkingen op bepaalde websites omzeilen door verbinding te maken met een VPN in een land dat door de website is toegestaan.

OpenVPN is een veelgebruikte VPN-implementatie die een breed scala aan configuraties en opties mogelijk maakt. Het maakt gebruik van het Secure Sockets Layer (SSL)-protocol voor de codering van de gegevens en vooraf gedeelde sleutels, gebruikersnaam/wachtwoord of certificaten voor authenticatie van de VPN-client. In dit artikel zullen we zien hoe u een VPN-server en VPN-client instelt op Ubuntu 20.04.

Installatie

OpenVPN is beschikbaar in de officiële Ubuntu-repository's in het pakket openvpn. Dit pakket installeert zowel de OpenVPN-server als de client.

sudo apt installeer openvpn

Zoals eerder vermeld, gebruikt OpenVPN SSL-certificaten om gegevens tussen de server en de client te versleutelen. We moeten onze eigen certificeringsinstantie (CA) opzetten om certificaten voor de VPN uit te geven. Merk op dat dit op een andere machine moet worden ingesteld dan die waarop OpenVPN is ingesteld; de reden is dat als het op dezelfde server staat en als het wordt gecompromitteerd, een aanvaller toegang kan krijgen tot de privésleutel en zo de VPN-verbinding kan aanvallen.

We zullen een tool genaamd 'Easy-RSA' gebruiken om de certificeringsinstantie in te stellen. Om het te installeren, voert u het volgende uit op de CA-machine, de OpenVPN-servermachine en de clientcomputer, aangezien de configuratie op alle drie deze vereist is om de CA in te stellen.

sudo apt install easy-rsa

We zullen nu eerst de certificeringsinstantie op de CA-machine configureren en enkele vereiste configuratiestappen hiervoor uitvoeren op de Open VPN-servermachine.

Certificaatautoriteit instellen

Initiële installatie op CA-machine

Nu installeert dit pakket een commando genaamd make-cadir die wordt gebruikt om een ​​map te maken voor de configuratie van de certificeringsinstantie. Laten we hiermee een map maken en de map invoeren.

make-cadir cert_authority && cd cert_authority

Open het bestand genaamd vars gemaakt in deze map. Dit bestand bevat enkele configuratievariabelen die we moeten wijzigen. De waarden die gewijzigd moeten worden staan ​​op regel 91-96, na de opmerking over Organisatorische velden die deze velden beschrijft. Maak de regels los en vul de juiste waarden in in plaats van de voorbeeldwaarden.

Sla het bestand op en sluit het af. Als u vim-editor gebruikt, drukt u op Esc, typ :wq en druk op Binnenkomen om op te slaan en af ​​te sluiten.

Vervolgens voeren we de easyrsa programma in de directory om de openbare sleutelinfrastructuur (PKI) in te stellen, die zal worden gebruikt om openbare sleutels en certificaten te genereren.

./easyrsa init-pki

De volgende stap genereert de CA-sleutel en het certificaat. Wanneer de opdracht om een ​​wachtwoord vraagt, voert u een wachtwoord in voor de CA-sleutel. Voer ook een algemene naam in wanneer daarom wordt gevraagd. Als u dit blanco laat, wordt de standaardnaam Easy-RSA CA-naam gebruikt.

./easyrsa build-ca

Zoals we aan de output kunnen zien, zijn het certificaat en de sleutel gegenereerd. Deze sleutel wordt gebruikt om de client- en servercertificaten te ondertekenen en mag daarom nooit worden aangeraakt/aangepast.

Nu hebben we de PKI-configuratie. De volgende stap is het maken van een serversleutel en certificaat op de machine die we als OpenVPN-server zullen gebruiken. Dit certificaat wordt later ondertekend door de CA-machine.

Serversleutel en certificaat genereren op de servermachine

We hebben Easy RSA al op de servermachine geïnstalleerd. Voer nu de drie stappen uit op de servermachine, die we eerder op de CA-machine hebben uitgevoerd, namelijk. een CA-map maken met make-cadir en erin gaan, de variabelen in de wijzigen vars bestand en het genereren van PKI met behulp van ./easyrsa init-pki opdracht.

Vervolgens moeten we de opdracht uitvoeren om een ​​servercertificaatverzoek en -sleutel te genereren.

./easyrsa gen-req server nopass

Merk op dat we de optie hebben doorgegeven nopass zodat de opdracht ons niet zal vragen om een ​​wachtwoord voor de serversleutel in te voeren. Er wordt nog steeds gevraagd om een ​​algemene naam voor de server, die u van alles kunt invoeren of leeg laten voor de standaardnaam (server) om gebruikt te worden.

Verplaats het gegenereerde sleutelbestand naar de /etc/openvpn map.

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

Stuur de certificaataanvraag naar de CA-machine. We zullen commando gebruiken scp Voor dit doeleinde.

scp pki/reqs/server.req gebruiker@CA_MACHINE_HOSTNAME:/directory

In de bovenstaande schermafbeelding is de host 45.79.125.41 de CA-machine. We hebben het certificaat gekopieerd in de /root directory.

Nu is het certificaat van de server gekopieerd naar de CA-machine. De volgende stap is om terug te gaan naar de CA-machine en dit certificaat te ondertekenen.

Het servercertificaat ondertekenen in de CA

Laten we eerst controleren of het certificaataanvraagbestand van de server naar de CA-machine is gekopieerd. Ga naar de map waar we het bestand hebben gekopieerd (/root in mijn voorbeeld) en voer . uit ls.

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

Zoals we kunnen zien, is het bestand server.req is aanwezig. Ga vervolgens naar de CA-directory en importeer dit verzoek.

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

Voer de volgende opdracht uit om dit verzoek te ondertekenen.

./easyrsa sign-req server server

Hier is het eerste argument het type verzoek, d.w.z. server, en het tweede argument is de algemene naam van de servermachine, waarvoor we eerder de standaardwaarde gebruikten, d.w.z. server.

Voer de zin in Ja, en het wachtwoord voor de CA-sleutel wanneer daarom wordt gevraagd.

Nu kunnen we het certificaataanvraagbestand verwijderen en het gegenereerde certificaat voor de server kopiëren, evenals het openbare CA-certificaat terug naar de servermachine.

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

Vervolgens moeten we nog een paar stappen uitvoeren om een ​​veilige verbinding met de VPN te garanderen.

Generatie DH-parameters

DH (Diffie-Hellman) sleuteluitwisseling is een algoritme dat zorgt voor een veilige uitwisseling van cryptosleutels via een onveilig kanaal. Laten we eerst het ontvangen certificaat en het openbare CA-certificaat verplaatsen naar: /etc/openvpn.

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

Ga naar de CA-map op de servermachine en voer de volgende opdracht uit om de DH-parameters te genereren. Het genereren kan lang duren.

./easyrsa gen-dh

Verplaats nu het gegenereerde bestand naar /etc/openvpn.

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

TA-sleutels genereren

OpenVPN gebruikt nog een extra beveiligingsmaatregel met behulp van de TLS-verificatiesleutel. Voer het volgende uit om de TLS-verificatiesleutel te genereren:

openvpn --genkey --geheim tls_auth.key

En verplaats de sleutel naar /etc/openvpn.

mv tls_auth.key /etc/openvpn

De configuratie van de serversleutel en het instellen van de certificeringsinstantie is nu voltooid. Laten we nu naar de daadwerkelijke configuratie van de VPN-server gaan.

OpenVPN-serverconfiguratie

Configuratiebestand voor OpenVPN-server wordt niet automatisch gemaakt, maar we kunnen een sjabloonconfiguratiebestand gebruiken van de openvpn pakket.

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

Open het bestand met vim of een andere editor naar keuze.

cd /etc/openvpn vim server.conf

We moeten de algemene namen invoeren van sleutels en certificaten die we eerder hebben gegenereerd. Ga naar regel nr. 78. Omdat we alle standaardnamen hebben gebruikt, laten we ze ongewijzigd. Controleer vervolgens de naam van het DH-parameterbestand op regel 85. We hebben de naam dh.pem gebruikt, dus laten we deze veranderen.

Laten we vervolgens de privileges voor de OpenVPN-server wijzigen. Ga naar regel 274 en 275 en verwijder de regel ; om het commentaar te geven.

Ga op dezelfde manier naar regel 192 en verwijder de puntkomma. Deze richtlijn stelt het verkeer van alle clients in staat om via de VPN te gaan.

Sla het bestand op en sluit het af.

Verander het eigendom van de map /etc/openvpn naar root.

sudo chown -R root:root /etc/openvpn

Netwerken en firewall instellen

We moeten IP-forwarding op de server toestaan ​​zodat pakketten van en naar de VPN-client kunnen worden doorgestuurd. Uncomment lijn 28 aan /etc/sysctl.conf:

Sla het bestand op en sluit het af.

Herstarten systeemctl om deze veranderingen te laten plaatsvinden.

sudo sysctl -p

We moeten Network Address Translation (NAT) op de server instellen met behulp van een UFW-firewall, zodat de VPN-client toegang heeft tot internet met behulp van het IP-adres van de VPN-server. Laten we eerst het doorsturen van pakketten inschakelen in de firewallconfiguratie. Open /etc/default/ufw en verander de variabele op regel 19 in ACCEPT.

Sla het bestand op en sluit het af.

Voeg nu de volgende regels toe aan het bestand: /etc/ufw/before.rules voor de filter regel in het bestand.

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

Voer uw netwerkinterface in in plaats van . U kunt uw netwerkinterface zien met het commando ifconfig.

Sta verkeer voor OpenVPN-service toe op de firewall en sta poort 1194 toe.

sudo ufw sta openvpn toe && sudo ufw sta 1194 toe

Laad de firewall-service opnieuw.

sudo ufw herladen

We kunnen de Open VPN-serverdaemon nu opnieuw starten door het volgende uit te voeren:

sudo-service openvpn opnieuw opstarten

Schakel het in om tijdens het opstarten te starten door het volgende uit te voeren:

sudo systemctl openvpn inschakelen

De OpenVPN-server is nu geconfigureerd en gestart. Laten we nu verder gaan met het aanvragen van clientcertificaten en het genereren van sleutels en andere configuraties.

OpenVPN-clientconfiguratie

We moeten een sleutel en een certificaatverzoek voor de client genereren. De procedure hiervoor is dezelfde als die voor de server.

Hoewel een clientsleutel en certificaatverzoek op de clientcomputer kunnen worden gemaakt en vervolgens naar de CA-machine kunnen worden overgebracht, wordt aanbevolen om deze op de servermachine te maken. Het voordeel van dit op de server te doen, is dat u een script kunt maken voor het uitvoeren van alle vereiste stappen op de server, waardoor het voor een nieuwe client gemakkelijker wordt om zich bij de VPN aan te sluiten.

Ga naar de CA-map op de server en voer het volgende uit:

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

Voer op dezelfde manier als eerder gedaan een algemene naam in wanneer daarom wordt gevraagd, of laat deze leeg om de standaard algemene naam te gebruiken, d.w.z. cliënt.

Laten we nu de gegenereerde clientcertificaataanvraag naar de CA-machine kopiëren.

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

Laten we dit verzoek importeren in de CA-machine:

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

En laten we het nu ondertekenen:

./easyrsa sign-req client client

BinnenkomenJa wanneer u wordt gevraagd om door te gaan. Voer het wachtwoord voor de CA-sleutel in wanneer daarom wordt gevraagd.

We kunnen nu het gevraagde bestand voor de klant verwijderen en het verzoek terug kopiëren naar de VPN-servermachine.

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

Laten we een map maken met de naam cliënt om alle bestanden met betrekking tot de client op de VPN-server te bewaren. We zullen de clientsleutel en het certificaat naar deze map verplaatsen.

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

Laten we nu een configuratiebestand maken van een beschikbare sjabloon, vergelijkbaar met hoe we het serverconfiguratiebestand hebben gemaakt.

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

Open het bestand klant.conf. Voer op regel 42 de hostnaam of het IP-adres van uw servermachine in in plaats van mijn-server-1.

Verwijder de commentaarregels 61 en 62 door de voorlooppuntkomma te verwijderen om de bevoegdheden voor het bestand te verlagen.

Voeg vervolgens regels 88-90 en regel 108 toe. De reden is dat we de inhoud van de genoemde bestanden handmatig willen toevoegen in plaats van de bestandslocaties te gebruiken. Het doel hiervan is dat het clientconfiguratiebestand later naar de client wordt overgebracht, waar we de clientsleutel- en certificaatbestanden niet hebben; daarom kopiëren we de inhoud ervan in het configuratiebestand zelf.

Voeg het volgende toe aan het clientconfiguratiebestand. Voer de bestandsinhoud van de respectieve bestanden in binnen de gegeven tags.

 # Plak de inhoud van het ca.crt-bestand hier # Plak de inhoud van het client.crt-bestand hier # Plak de inhoud van het client.key-bestand hier key-direction 1 # Plak de inhoud van het tls_auth.key-bestand hier 

Sla het bestand op en sluit het af. Hernoem dit bestand van klant.conf naar client.ovpn, aangezien de laatste de extensie is die nodig is voor configuratiebestanden die als netwerkconfiguraties kunnen worden geïmporteerd.

Breng nu het bestand over client.ovpn naar de client, d.w.z. de lokale machine.

Loop scp op uw clientcomputer om het bestand van de servermachine naar uw lokale computer over te brengen.

scp gebruiker@server_ip:/pad_naar_bestand lokaal_bestemmingspad

Ten slotte moeten we dit configuratiebestand gebruiken om verbinding te maken met de VPN-server. Dit kan zowel via de opdrachtregel als via de GUI.

Om de VPN-client vanaf de opdrachtregel te starten, voert u het volgende uit:

sudo openvpn --config client.ovpn

En dat is de enige opdracht die u hoeft uit te voeren om de VPN-client te starten.

Voer de volgende stappen uit om de VPN-client via GUI te starten.

Ga naar Instellingen » Netwerk op uw clientcomputer.

Klik op de + knop in het VPN-gedeelte en kies 'Importeren uit bestand...' uit de opties.

Klik op ‘Toevoegen’ om de VPN te gaan gebruiken.

Merk op dat onder ‘Gateway’ dit het IP-adres van de server is.

Schakel ten slotte de knop 'client VPN' in om VPN op de machine in te schakelen.

Het kan enkele seconden duren om een ​​VPN-verbinding tot stand te brengen. Een nieuw voortgangslogo voor VPN verschijnt in de linkerbovenhoek van uw scherm terwijl het wordt ingesteld, en het zal veranderen in een VPN-logo zodra het is ingesteld.

Voer het volgende uit om te controleren of de VPN correct werkt:

curl //ipinfo.io/ip

Het zou het IP-adres van uw servermachine moeten retourneren. Of u kunt uw IP-adres ook controleren door simpelweg te zoeken op 'Mijn IP' op Google. Het zou het IP-adres van uw VPN-server moeten tonen als onze VPN-configuratie correct werkt.

Gevolgtrekking

In dit artikel hebben we gezien hoe je een OpenVPN-server, een certificeringsinstantie en een OpenVPN-client configureert. Om meer clients aan de VPN toe te voegen, moeten we nu de procedure volgen om een ​​certificaat voor de client te genereren en te ondertekenen en hetzelfde configuratiebestand gebruiken dat hier is gemaakt, waarbij alleen de clientsleutel en certificaatwaarden zijn gewijzigd.

Bij tragere internetverbindingen kan het zijn dat als UDP wordt gebruikt voor communicatie, er aanzienlijk pakketverlies optreedt. De gebruiker kan overschakelen naar TCP door de regel te verwijderen proto tcp en commentaar geven op de regel proto udp in het serverconfiguratiebestand.

Als er andere fouten zijn, kunt u ook het logniveau instellen met de werkwoord richtlijn in zowel server- als clientconfiguratiebestanden. U kunt waarden tussen 0 en 9 invoeren. Hoe hoger de waarde van deze richtlijn, hoe uitgebreider het log.