OpenVPN Server en Client installeren met Easy-RSA 3 op CentOS 8

OpenVPN is een open-source toepassing waarmee je een veilig privénetwerk over het openbare internet kunt opzetten. OpenVPN implementeert een virtueel privé netwerk (VPN) om een veilige verbinding tot stand te brengen. OpenVPN gebruikt de OpenSSL bibliotheek voor de versleuteling en het biedt verschillende authenticatiemechanismen, zoals op certificaten gebaseerde, vooraf gedeelde sleutels, en gebruikersnaam/wachtwoord authenticatie.

In deze handleiding laten we je zien hoe je OpenVPN stap voor stap installeert en configureert op de CentOS 8 Server. En we zullen de certificaat-gebaseerde OpenVPN authenticatie implementeren.

Vereisten

  • CentOS 8 Server
  • Root rechten

Wat zullen we doen?

  • OpenVPN en Easy-RSA installeren
  • Configureer Easy-RSA 3 Vars
  • Bouw OpenVPN sleutels
  • Configureer OpenVPN Server
  • Firewalld instellen en poort doorsturen inschakelen
  • Opzetten van de cliënt
  • Testen van

Stap 1 – Installeer OpenVPN en Easy-RSA

Eerst gaan we de EPEL (Extra Package for Enterprise Linux) repository toevoegen en het nieuwste OpenVPN pakket installeren en het easy-rsa script downloaden naar het CentOS 8 systeem.

Installeer de EPEL repository met het onderstaande dnf commando.

dnf install epel-release

Installeer daarna het nieuwste OpenVPN pakket 2.4.7.

dnf install openvpn

Als de installatie voltooid is, ga je naar het ‘/etc/openvpn’ en download je het easy-rsa script met het onderstaande wget commando.

cd /etc/openvpn/
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz

Pak nu het ‘EasyRSA-unix-v3.0.6.tgz’ bestand uit en hernoem de directory naar ‘easy-rsa’.

tar -xf EasyRSA-unix-v3.0.6.tgz
mv EasyRSA-v3.0.6/ easy-rsa/; rm -f EasyRSA-unix-v3.0.6.tgz

Het OpenVPN pakket en het easy-rsa script zijn nu op het CentOS 8 systeem geïnstalleerd.

Installeer openvpn op CentOS 8

Stap 2 – Configureer Easy-RSA 3

In deze stap configureren we easy-rsa 3 door een nieuw ‘vars’ bestand aan te maken. Het ‘vars’ bestand bevat de instellingen voor Easy-RSA 3.

Ga naar de ‘/etc/openvpn/easy-rsa/’ directory en maak een nieuw vars script met behulp van vim editor.

cd /etc/openvpn/easy-rsa/
vim vars

Plak de vars easy-rsa 3 configuraties hieronder.

set_var EASYRSA                 "$PWD"
set_var EASYRSA_PKI             "$EASYRSA/pki"
set_var EASYRSA_DN              "cn_only"
set_var EASYRSA_REQ_COUNTRY     "ID"
set_var EASYRSA_REQ_PROVINCE    "Jakarta"
set_var EASYRSA_REQ_CITY        "Jakarta"
set_var EASYRSA_REQ_ORG         "hakase-labs CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL       "[email protected]"
set_var EASYRSA_REQ_OU          "HAKASE-LABS EASY CA"
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_ALGO            rsa
set_var EASYRSA_CA_EXPIRE       7500
set_var EASYRSA_CERT_EXPIRE     365
set_var EASYRSA_NS_SUPPORT      "no"
set_var EASYRSA_NS_COMMENT      "HAKASE-LABS CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR         "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF        "$EASYRSA/openssl-easyrsa.cnf"
set_var EASYRSA_DIGEST          "sha256"

Bewaar en sluit af.

Opmerking:

  • Verander de waarden van de variabelen naar behoefte.
  • Verhoog de ‘EASYRSA_KEY_SIZE’ voor betere beveiliging.
  • Verander ‘EASYRSA_CA_EXPIRE’ en ‘EASYRSA_CERT_EXPIRE’.

Maak nu het ‘vars’ bestand uitvoerbaar door de toestemming van het bestand te veranderen.

chmod +x vars

De configuratie van easy-rsa 3 is voltooid.

Configureer Easy-RSA 3

Stap 3 – Bouw OpenVPN sleutels

In deze stap bouwen we de OpenVPN sleutels op basis van het easy-rsa 3 ‘vars’ bestand dat we gemaakt hebben. We bouwen de CA sleutel, Server en Client sleutels, DH en CRL PEM bestand.

We zullen al die sleutels bouwen met de ‘easyrsa’ commandoregel. Ga naar de ‘/etc/openvpn/easy-rsa/’ directory.

cd /etc/openvpn/easy-rsa/3/

– Initialisatie en bouw CA

Voordat we de server en client sleutel bouwen, moeten we de PKI (Public Key Infrastructure) directory initialiseren en de CA sleutel bouwen.

Initieer de PKI directory en bouw de CA sleutel met het onderstaande commando.

./easyrsa init-pki
./easyrsa build-ca

Typ nu het wachtwoord voor je CA sleutel en je krijgt je ‘ca.crt’ en ‘ca.key’ bestanden onder de ‘pki’ directory.

Bouw OpenVPN sleutels

– Bouw de serversleutel

Nu willen we de server sleutel bouwen, en we zullen de server sleutel met de naam ‘hakase-server’ bouwen.

Bouw de serversleutel ‘hakase-server’ met het onderstaande commando.

./easyrsa gen-req hakase-server nopass

Bouw Server Sleutel

Opmerking:

  • nopass = optie voor het uitschakelen van het wachtwoord voor de ‘hakase-server’ sleutel.

En onderteken de ‘hakase-server’ sleutel met ons CA certificaat.

./easyrsa sign-req server hakase-server

Je wordt nu om het ‘CA’ wachtwoord gevraagd, typ het wachtwoord en druk op Enter. En je krijgt het ‘hakase-server.crt’ certificaat bestand onder de ‘pki/issued/’ directory.

easyrsa sign-req

Verifieer het certificaatbestand met het OpenSSL commando en controleer of er geen fout optreedt.

openssl verify -CAfile pki/ca.crt pki/issued/hakase-server.crt

Alle sleutels van het servercertificaat zijn aangemaakt. De privésleutel van de server staat op de ‘pki/private/hakase-server.key’, en het servercertificaat op de ‘pki/issued/hakase-server.crt’.

Particuliere sleutel

– Bouw de cliëntsleutel

Nu moeten we sleutels bouwen voor de cliënt. We zullen een nieuwe cliëntsleutel aanmaken met de naam ‘client01’.

Genereer de ‘client01’ sleutel met het onderstaande commando.

./easyrsa gen-req client01 nopass

Bouw Cliëntsleutel

Onderteken nu de ‘client01’ sleutel met ons CA certificaat zoals hieronder.

./easyrsa sign-req client client01

Typ ‘yes’ om de aanvraag voor het cliëntcertificaat te bevestigen, en typ dan het CA wachtwoord.

easyrsa sign-req client client01

Het cliëntcertificaat met de naam ‘client01’ is nu gegenereerd, controleer het cliëntcertificaat met het commando openssl.

openssl verify -CAfile pki/ca.crt pki/issued/client01.crt

Zorg ervoor dat er geen fout optreedt.

verifieer ca bestand

– Bouw de Diffie-Hellman sleutel

De Diffie-Hellman sleutel is nodig voor betere beveiliging. En we gaan de ‘2048’ DH sleutel genereren op basis van het ‘vars’ configuratiebestand dat bovenaan is aangemaakt.

Genereer de Diffie-Hellman sleutel met het onderstaande commando.

./easyrsa gen-dh

En de DH sleutel is gegenereerd, te vinden in de ‘pki’ directory.

Bouw Diffie-Hellman sleutel

– Optioneel: Genereer de CRL sleutel

De CRL (Certificate Revoking List) sleutel zal gebruikt worden om de cliënt sleutel te herroepen. Als je meerdere certificaten van cliënten op je VPN server hebt, en je wilt iemands sleutel verwijderen, dan hoef je alleen maar in te trekken met het easy-rsa commando.

Als je een sleutel wilt intrekken, voer dan het onderstaande commando uit.

./easyrsa revoke someone

En genereer dan de CRL sleutel.

./easyrsa gen-crl

Het CRL PEM bestand is gegenereerd onder de ‘pki’ directory – het volgende is een voorbeeld op mijn server.

Genereer de CRL sleutel

– Certificaat-bestanden kopiëren

Alle certificaten zijn gegenereerd, kopieer nu de certificaat bestanden en de PEM bestanden.

Kopieer server sleutel en certificaat.

cp pki/ca.crt /etc/openvpn/server/
cp pki/issued/hakase-server.crt /etc/openvpn/server/
cp pki/private/hakase-server.key /etc/openvpn/server/

Kopieer client01 Sleutel en Certificaat.

cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client01.crt /etc/openvpn/client/
cp pki/private/client01.key /etc/openvpn/client/

Kopieer DH en CRL Sleutel.

cp pki/dh.pem /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/

Alle certificaten voor server en client zijn naar elke map gekopieerd.

Certificaatbestanden kopiëren

Stap 4 – Configureer OpenVPN

In deze stap maken we een nieuwe configuratie ‘server.conf’ voor de OpenVPN server.

Ga naar de ‘/etc/openvpn/server/’ directory en maak met vim een nieuw configuratiebestand ‘server.conf’.

cd /etc/openvpn/server/
vim server.conf

Plak er de volgende OpenVPN server configuratie in.

# OpenVPN Port, Protocol, and the Tun
port 1194
proto udp
dev tun

# OpenVPN Server Certificate - CA, server key and certificate
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/hakase-server.crt
key /etc/openvpn/server/hakase-server.key

#DH and CRL key
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem

# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.5.0.0 255.255.255.0
push "redirect-gateway def1"

# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"

#Enable multiple clients to connect with the same certificate key
duplicate-cn

# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache

# Other Configuration
keepalive 20 60
persist-key
persist-tun
compress lz4
daemon
user nobody
group nobody

# OpenVPN Log
log-append /var/log/openvpn.log
verb 3

Sla op en sluit af.

En de OpenVPN server configuratie is gemaakt.

Stap 5 – Schakel Port-Forwarding in en configureer Routing in Firewalld

In deze stap schakelen we de Port-forwarding kernel module in en configureren we routing ‘Firewalld’ voor OpenVPN.

Schakel de port-forwarding kernel module in door de volgende commando’s uit te voeren.

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

Configureer vervolgens routing met de Firewalld voor OpenVPN.

Schakel Port-Forwarding in en Configureer Routing in Firewalld

Voeg de OpenVPN dienst toe aan de ‘public’ en ’trusted’ firewall zone.

firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-service=openvpn

Voeg daarna de ’tun0′ toe aan de ’trusted’ zone.

firewall-cmd --permanent --zone=trusted --add-interface=tun0

Schakel nu ‘MASQUERADE’ in op de standaard ‘public’ zone firewalld.

firewall-cmd --permanent --add-masquerade

Schakel NAT in voor OpenVPN intern IP adres ‘10.5.0.0/24’ naar het externe IP adres ‘SERVERIP’.

SERVERIP=$(ip route get 1.1.1.1 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s  10.5.0.0/24 -o $SERVERIP -j MASQUERADE

En herlaad firewalld.

firewall-cmd --reload

Herlaad firewalld

Als de instelling van Port-forwarding en de routering van Firewalld voltooid is, start je de OpenVPN dienst en zet je hem aan om automatisch te starten telkens bij het opstarten van het systeem.

systemctl start [email protected]
systemctl enable [email protected]

Start openvpn

Controleer daarna de OpenVPN dienst met onderstaande commando’s.

netstat -plntu
systemctl status [email protected]

En je krijgt het resultaat als hieronder.

OpenVPN met succes gestart

Het resultaat is dat de OpenVPN dienst up and running is op het UDP protocol met standaard poort ‘1194’.

Stap 6 – OpenVPN cliënt instellen

Ga naar de ‘/etc/openvpn/client’ directory en maak met vim een nieuw openvpn client configuratiebestand ‘client01.ovpn’.

cd /etc/openvpn/client
vim client01.ovpn

Plak er de volgende OpenVPN client configuratie in.

client
dev tun
proto udp

remote xxx.xxx.xxx.xxx 1194

ca ca.crt
cert client01.crt
key client01.key

cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

resolv-retry infinite
compress lz4
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3

Bewaar en sluit af.

Comprimeer nu de ‘/etc/openvpn/client’ directory tot een ‘zip’ of ’tar.gz’ bestand en download het gecomprimeerde bestand met SCP van je lokale computer.

Comprimeer de ‘/etc/openvpn/client’ directory tot het ‘client01.tar.gz’ bestand.

cd /etc/openvpn/
tar -czvf client01.tar.gz client/*

OpenVPN cliënt instellen

Nu kun je het gecomprimeerde OpenVPN bestand downloaden met de FTP server of het scp commando zoals hieronder.

scp [email protected]:/etc/openvpn/client01.tar.gz .

Stap 7 – Verbind met de OpenVPN

Testen op de clients.

– Op Linux

Installeer het OpenVPN pakket en als je een GUI configuratie wilt, installeer dan OpenVPN netwerk-manager.

sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome -y

Als je met een terminal shell wilt verbinden, voer dan het onderstaande OpenVPN commando uit.

openvpn --config client01.ovpn

Als je verbonden bent met OpenVPN, open dan een nieuw terminal tabblad en controleer de verbinding met het commando curl.

curl ifconfig.io

Je krijgt dan het OpenVPN server IP adres.

– Op Mac OS

DownloadTunnelblick en installeer het.

Pak het ‘client01.tar.gz’ bestand uit en hernoem de ‘client’ directory in ‘client01.tblk’.

tar -xzvf client01.tar.gz
mv client client01.tblk

Dubbelklik op de ‘client01.tblk’ en de Tunnelblick zal automatisch OpenVPN configuratie detecteren en dan importeren.

Maak nu verbinding via de Tunnelblick op de Bovenbalk.

– Op Windows

Download deopenvpn client voor windows en importeer de configuratie.

Referentie