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.
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.
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 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
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.
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’.
– 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
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.
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.
– 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.
– 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.
– 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.
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.
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
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]
Controleer daarna de OpenVPN dienst met onderstaande commando’s.
netstat -plntu
systemctl status [email protected]
En je krijgt het resultaat als hieronder.
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/*
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.