Installation von OpenVPN-Server und -Client mit Easy-RSA 3 auf CentOS 8

OpenVPN ist eine Open-Source-Anwendung, die es Ihnen ermöglicht, ein sicheres privates Netzwerk über das öffentliche Internet zu erstellen. OpenVPN implementiert ein virtuelles privates Netzwerk (VPN), dazu verwendet es die OpenSSL-Bibliothek, um die Verschlüsselung bereitzustellen. Es bietet verschiedene Authentifizierungsmechanismen, wie z.B. zertifikatsbasierte-, Pre-Shared-Key und Benutzername/Passwort-Authentifizierung.

In diesem Tutorial zeigen wir Ihnen Schritt für Schritt, wie Sie OpenVPN auf dem CentOS 8 Server installieren und konfigurieren. Wir werden die zertifikatsbasierte OpenVPN-Authentifizierung verwenden.

Voraussetzungen

  • CentOS 8 Server
  • Root-Privilegien

Was werden wir tun?

  • OpenVPN und Easy-RSA installieren
  • Konfigurieren Sie Easy-RSA 3 Vars
  • OpenVPN-Tasten erstellen
  • OpenVPN-Server konfigurieren
  • Konfigurieren Sie Firewalld und aktivieren Sie die Portweiterleitung
  • Client Einrichtung
  • Prüfung

Schritt 1 – OpenVPN und Easy-RSA installieren

Als erstes werden wir das EPEL (Extra Package for Enterprise Linux) Repository hinzufügen und das neueste OpenVPN-Paket installieren und das easy-rsa-Skript auf das CentOS 8-System herunterladen.

Installieren Sie das EPEL-Repository mit dem folgenden dnf-Befehl.

dnf install epel-release

Installieren Sie danach das aktuelle OpenVPN-Paket 2.4.7.

dnf install openvpn

Sobald die Installation abgeschlossen ist, gehen Sie in die ‚/etc/openvpn‘ und laden Sie das Skript easy-rsa mit dem wget Befehl unten herunter.

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

Entpacken Sie nun die Datei ‚EasyRSA-unix-v3.0.6.tgz‘ und benennen Sie das Verzeichnis in ‚easy-rsa‘ um.

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

Das OpenVPN-Paket und das easy-rsa-Skript wurden auf dem CentOS 8-System installiert.

openvpn auf CentOS 8 installieren

Schritt 2 – Konfigurieren von Easy-RSA 3

In diesem Schritt werden wir easy-rsa 3 konfigurieren, indem wir eine neue ‚vars‘-Datei erstellen. Die ‚vars‘-Datei enthält die Easy-RSA 3-Einstellungen.

Gehen Sie in das Verzeichnis ‚/etc/openvpn/easy-rsa/‘ und erzeugen Sie ein neues vars-Skript mit dem vim-Editor.

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

Fügen Sie unten die Konfigurationen der vars easy-rsa 3 ein.

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       "openvpn@hakase-labs.io"
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"

Speichern und beenden.

Anmerkung:

  • Ändern Sie die Werte der Variablen nach Bedarf.
  • Erhöhen Sie die ‚EASYRSA_KEY_SIZE‘ für mehr Sicherheit.
  • Ändern Sie ‚EASYRSA_CA_EXPIRE‘ und ‚EASYRSA_CERT_EXPIRE‘.

Machen Sie nun die ‚vars‘-Datei ausführbar, indem Sie die Berechtigung der Datei ändern.

chmod +x vars

Die Konfiguration von easy-rsa 3 ist abgeschlossen.

Konfigurieren Sie Easy-RSA 3

Schritt 3 – OpenVPN-Tasten erstellen

In diesem Schritt werden wir die OpenVPN-Schlüssel basierend auf der von uns erstellten easy-rsa 3 ‚vars‘-Datei erstellen. Wir werden den CA-Schlüssel, die Server- und Client-Schlüssel, die DH- und CRL-PEM-Datei erstellen.

Wir werden all diese Schlüssel mit der ‚easyrsa‘-Kommandozeile bauen. Gehen Sie in das Verzeichnis ‚/etc/openvpn/easy-rsa/‘.

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

– Initialisierung und Aufbau der CA

Bevor wir den Server- und Client-Schlüssel erstellen, müssen wir das PKI-Verzeichnis (Public Key Infrastructure) initialisieren und den CA-Schlüssel erstellen.

Initiieren Sie das PKI-Verzeichnis und bauen Sie den CA-Schlüssel mit dem folgenden Befehl auf.

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

Geben Sie nun das Passwort für Ihren CA-Schlüssel ein und Sie erhalten Ihre ‚ca.crt‘ und ‚ca.key‘ Dateien unter dem ‚pki‘ Verzeichnis.

OpenVPN-Tasten erstellen

– Server-Schlüssel erstellen

Nun wollen wir den Serverschlüssel erstellen, und wir werden den Serverschlüssel mit dem Namen ‚hakase-server‘ erstellen.

Erstellen Sie den Serverschlüssel ‚hakase-server‘ mit dem folgenden Befehl.

./easyrsa gen-req hakase-server nopass

Server-Schlüssel erstellen

Anmerkung:

  • nopass = Option zum Deaktivieren des Passworts für den ‚hakase-server‘-Schlüssel.

Und signieren Sie den ‚hakase-server‘-Schlüssel mit unserem CA-Zertifikat.

./easyrsa sign-req server hakase-server

Sie werden nach dem ‚CA‘-Passwort gefragt, geben Sie das Passwort ein und drücken Sie die Eingabetaste. Und Sie erhalten die Zertifikatsdatei ‚hakase-server.crt‘ unter dem Verzeichnis ‚pki/issued/‘.

easyrsa zeichen-anforderung

Überprüfen Sie die Zertifikatsdatei mit dem OpenSSL-Befehl und stellen Sie sicher, dass kein Fehler vorliegt.

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

Alle Server-Zertifikatsschlüssel sind erstellt worden. Der private Schlüssel des Servers befindet sich auf der ‚pki/private/hakase-server.key‘, das Server-Zertifikat auf der ‚pki/issued/hakase-server.crt‘.

Privater Schlüssel

– Client-Schlüssel erstellen

Jetzt müssen wir Schlüssel für den Client bauen. Wir werden einen neuen Client-Schlüssel mit dem Namen ‚client01‘ generieren.

Erzeugen Sie den Schlüssel ‚client01‘ mit dem folgenden Befehl.

./easyrsa gen-req client01 nopass

Client-Schlüssel erstellen

Signieren Sie nun den Schlüssel ‚client01‘ mit unserem CA-Zertifikat wie unten beschrieben.

./easyrsa sign-req client client01

Geben Sie ‚ja‘ ein, um die Anforderung des Client-Zertifikats zu bestätigen, und geben Sie dann das CA-Passwort ein.

easyrsa sign-req client client01

Das Client-Zertifikat mit dem Namen ‚client01‘ wurde generiert, überprüfen Sie das Client-Zertifikat mit dem Befehl openssl.

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

Stellen Sie sicher, dass kein Fehler vorliegt.

verify ca-Datei

– Diffie-Hellman-Schlüssel bauen

Der Diffie-Hellman-Schlüssel wird für eine bessere Sicherheit benötigt. Und wir werden den ‚2048‘-DH-Schlüssel basierend auf der ‚vars‘-Konfigurationsdatei, die oben erstellt wurde, generieren.

Erzeugen Sie den Diffie-Hellman-Schlüssel mit dem folgenden Befehl.

./easyrsa gen-dh

Und der DH-Schlüssel wurde generiert, der sich im ‚pki‘-Verzeichnis befindet.

Diffie-Hellman-Schlüssel bauen

– Optional: CRL-Schlüssel generieren

Der CRL-Schlüssel (Certificate Revoking List) wird für das Sperren des Client-Schlüssels verwendet. Wenn Sie mehrere Client-Zertifikate von Clients auf Ihrem VPN-Server haben, und Sie möchten einen Schlüssel entfernen, müssen Sie ihn nur mit dem Befehl easy-rsa widerrufen.

Wenn Sie eine Taste widerrufen wollen, führen Sie den folgenden Befehl aus.

./easyrsa revoke someone

Und dann den CRL-Schlüssel generieren.

./easyrsa gen-crl

Die CRL-PEM-Datei wurde im Verzeichnis ‚pki‘ generiert – im Folgenden ein Beispiel auf meinem Server.

Generieren Sie den CRL-Schlüssel

– Zertifikatsdateien kopieren

Alle Zertifikate wurden generiert, kopieren Sie nun die Zertifikatsdateien und PEM-Dateien.

Kopieren Sie den Serverschlüssel und das Zertifikat.

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/

Kopieren Sie den Mandanten01 Schlüssel und Zertifikat.

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

Kopieren Sie DH und CRL Schlüssel.

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

Alle Zertifikate für Server und Client sind in jedes Verzeichnis kopiert worden.

Zertifikatsdateien kopieren

Schritt 4 – OpenVPN konfigurieren

In diesem Schritt erstellen wir eine neue Konfiguration ’server.conf‘ für den OpenVPN-Server.

Gehen Sie in das Verzeichnis ‚/etc/openvpn/server/‘ und erstellen Sie eine neue Konfigurationsdatei ’server.conf‘ mit vim.

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

Fügen Sie dort die folgende OpenVPN-Server-Konfiguration ein.

# 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

Speichern und beenden.

Und die OpenVPN-Server-Konfiguration wurde erstellt.

Schritt 5 – Aktivieren Sie die Port-Weiterleitung und konfigurieren Sie das Routing in Firewalld

In diesem Schritt werden wir das Port-Weiterleitungs-Kernel-Modul aktivieren und das Routing ‚Firewalld‘ für OpenVPN konfigurieren.

Aktivieren Sie das Kernelmodul für die Port-Weiterleitung, indem Sie die folgenden Befehle ausführen.

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

Als nächstes konfigurieren Sie das Routing mit der Firewalld für OpenVPN.

Aktivieren Sie Port-Weiterleitung und konfigurieren Sie das Routing in Firewalld

Fügen Sie den OpenVPN-Dienst zur „öffentlichen“ und „vertrauenswürdigen“ Firewall-Zone hinzu.

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

Danach fügen Sie den ‚tun0‘ zur ‚vertrauenswürdigen‘ Zone hinzu.

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

Aktivieren Sie nun ‚MASQUERADE‘ auf der Standard-Firewall der ‚öffentlichen‘ Zone.

firewall-cmd --permanent --add-masquerade

Aktivieren Sie NAT für die interne OpenVPN-IP-Adresse ‚10.5.0.0/24‘ auf die externe IP-Adresse ‚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

Und lade die Feuerwand nach.

firewall-cmd --reload

Firewalld nachladen

Die Port-Weiterleitung und die Firewalld-Routing-Konfiguration ist abgeschlossen, starten Sie den OpenVPN-Dienst und ermöglichen Sie, dass er bei jedem Systemstart automatisch gestartet wird.

systemctl start openvpn-server@server
systemctl enable openvpn-server@server

Start openvpn

Danach überprüfen Sie den OpenVPN-Dienst mit den unten stehenden Befehlen.

netstat -plntu
systemctl status openvpn-server@server

Und Sie erhalten das Ergebnis wie unten dargestellt.

OpenVPN erfolgreich gestartet

Als Ergebnis ist der OpenVPN-Dienst auf dem UDP-Protokoll mit dem Standardport ‚1194‘ in Betrieb.

Schritt 6 – OpenVPN-Client einrichten

Gehen Sie in das Verzeichnis ‚/etc/openvpn/client‘ und erzeugen Sie eine neue openvpn-Client-Konfigurationsdatei ‚client01.ovpn‘ mit vim.

cd /etc/openvpn/client
vim client01.ovpn

Fügen Sie dort die folgende OpenVPN-Client-Konfiguration ein.

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

Speichern und beenden.

Komprimieren Sie nun das Verzeichnis ‚/etc/openvpn/client‘ in die Datei ‚zip‘ oder ‚tar.gz‘ und laden Sie die komprimierte Datei mittels SCP von Ihrem lokalen Rechner herunter.

Komprimieren Sie das Verzeichnis ‚/etc/openvpn/client‘ in die Datei ‚client01.tar.gz‘.

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

OpenVPN-Client Einrichtung

Jetzt können Sie die komprimierte OpenVPN-Datei mit dem FTP-Server oder dem scp-Befehl wie unten beschrieben herunterladen.

scp root@139.xx.xx.xx:/etc/openvpn/client01.tar.gz .

Schritt 7 – Verbindung mit dem OpenVPN

Tests an den Clients.

– Unter Linux

Installieren Sie das OpenVPN-Paket und wenn Sie eine GUI-Konfiguration wünschen, installieren Sie den OpenVPN-Netzwerkmanager.

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

Wenn Sie eine Verbindung über eine Terminal-Shell herstellen wollen, führen Sie den unten stehenden OpenVPN-Befehl aus.

openvpn --config client01.ovpn

Wenn Sie mit OpenVPN verbunden sind, öffnen Sie eine neue Registerkarte und überprüfen Sie die Verbindung mit dem Curl-Befehl.

curl ifconfig.io

Und Sie erhalten die IP-Adresse des OpenVPN-Servers.

– Unter Mac OS

Laden Sie Tunnelblick herunter und installieren Sie es.

Entpacken Sie die Datei ‚client01.tar.gz‘ und benennen Sie das ‚client‘-Verzeichnis in ‚client01.tblk‘ um.

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

Doppelklicken Sie auf die ‚client01.tblk‘ und der Tunnelblick erkennt automatisch die OpenVPN-Konfiguration und importiert diese dann.

Verbinden Sie sich nun durch den Tunnelblick auf der oberen Leiste.

– Unter Windows

Laden Sie den openvpn-Client für Windows herunter und importieren Sie die Konfiguration.

Hinweis

Das könnte dich auch interessieren …