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.
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.
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.
– 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
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/‘.
Ü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‘.
– 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
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.
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.
– 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.
– 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.
– 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.
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.
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
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
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.
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/*
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.