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

OpenVPN is een open bron 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 zelfstudie laten we je zien hoe je OpenVPN stap voor stap installeert en configureert op CentOS 7.6. En we zullen de certificaat-gebaseerde OpenVPN authenticatie implementeren.

Vereisten

  • CentOS 7.6
  • Root voorrechten

Wat zullen we doen?

  1. OpenVPN en Easy-RSA installeren
  2. Configureer Easy-RSA 3 Vars
  3. Bouw OpenVPN sleutels
  4. Configureer OpenVPN Server
  5. Firewalld instellen en poort doorsturen inschakelen
  6. Opzetten van de cliënt
  7. Testen van

Stap 1 – Installeer OpenVPN en Easy-RSA

In deze handleiding gebruiken we de nieuwste versie van centos server (7.5), en we gebruiken de OpenVPN 2.4 met de easy-rsa 3. Voordat je de OpenVPN en easy-rsa pakketten installeert, moet je eerst controleren of de ‘epel’ repository op het systeem geïnstalleerd is. Heb je dat niet, installeer dan de epel repository met het onderstaande yum commando.

yum install epel-release -y

Installeer nu OpenVPN 2.4 met easy-rsa 3 op het systeem.

yum install openvpn easy-rsa -y

Als de installatie voltooid is, controleer dan de openvpn en easy-rsa versie.

openvpn --version
ls -lah /usr/share/easy-rsa/

Installeer OpenVPN

OpenVPN 2.4 met easy-rsa 3 is geïnstalleerd.

Stap 2 – Stel easy-rsa 3 in

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

Ga naar de ‘/etc/openvpn/’ directory en kopieer het ‘easy-rsa’ script.

cd /etc/openvpn/
cp -r /usr/share/easy-rsa /etc/openvpn/

Ga nu naar de ‘easy-rsa/3/’ directory en maak met vim een nieuw vars bestand aan.

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

Plak de vars easy-rsa 3 configuratie eronder.

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-1.0.cnf"
set_var EASYRSA_DIGEST          "sha256"

Sla op 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

Het vars bestand voor de Easy-RSA 3 instelling is gemaakt.

EasyRSA

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/3’ directory.

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

Initialisatie en CA bouwen

Voordat we sleutels bouwen, moeten we de PKI 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.

Initialisatie en CA bouwen

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 uitschakelen 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 tekenverzoek

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

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.

Onderteken cliëntsleutel

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

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

Bouw Diffie-Hellman sleutel

Deze handeling zal veel tijd in beslag nemen, afhankelijk van de sleutellengte die we kozen en de beschikbare entropie op de server. We zullen de lengte sleutel gebruiken die we in het ‘vars’ bestand definiëren.

Genereer de Diffie-Hellman sleutel met onderstaand commando.

./easyrsa gen-dh

De gegenereerde DH sleutel bevindt zich 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 cliëntcertificaten op je vpn server hebt, en je wilt enkele sleutel intrekken, dan hoef je alleen maar met het easy-rsa commando in te trekken.

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

./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

Certificaten 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/

Certificaten bestanden kopiëren

Stap 4 – OpenVPN configureren

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

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

cd /etc/openvpn/
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.10.1.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 client to connect with 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
comp-lzo yes
daemon
user nobody
group nobody

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

Bewaar en sluit af.

De configuratie voor OpenVPN is nu gemaakt.

Stap 5 – Schakel Port-Forwarding in en configureer Routing 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 dienst ‘openvpn’ toe aan de firewalld lijstdienst en voeg de interface ’tun0′ toe aan de firewalld vertrouwde zone.

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

Schakel ‘MASQUERADE’ in op de ‘vertrouwde’ zone firewalld.

firewall-cmd --permanent --zone=trusted --add-masquerade

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

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

En herlaad firewalld.

firewall-cmd --reload

De Port-forwarding en de routering van Firewalld zijn voltooid, start nu de openvpn dienst en schakel die in om telkens automatisch te starten bij het opstarten van het systeem.

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

Schakel Port-Forwarding in en Configureer Routing Firewalld

Controleer het met onderstaande commando’s.

netstat -plntu
systemctl status [email protected]

De OpenVPN server is up and running op udp protocolpoort ‘1194’.

Controleer OpenVPN server status

Stap 6 – OpenVPN client 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 cliënt configuratie in.

client
dev tun
proto udp

remote 139.xx.xx.xx 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 lzo
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’ map tot het ‘client01.tar.gz’ bestand.

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

OpenVPN cliënt instellen

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

Kopieer cliënt

Stap 7 – OpenVPN testen

Testen op de clients.

– Op Linux

Installeer het OpenVPN pakket en als je een GUI configuratie wilt, installeer dan OpenVPN network-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

En je krijgt het OpenVPN server IP adres.

Op Mac OS

Download Tunnelblick 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 de openvpn client voor windows en importeer de configuratie.

Referentie

https://openvpn.net/