OpenVPN ist eine Open-Source-Anwendung, mit der Sie ein sicheres privates Netzwerk über das öffentliche Internet erstellen können. OpenVPN implementiert ein virtuelles privates Netzwerk (VPN), um eine sichere Verbindung herzustellen. OpenVPN verwendet die OpenSSL-Bibliothek zur Bereitstellung der Verschlüsselung und bietet mehrere Authentifizierungsmechanismen, wie z. B. zertifikatbasierte, vorinstallierte Schlüssel und Benutzername/Passwort-Authentifizierung.
In diesem Tutorial zeigen wir Ihnen Schritt für Schritt, wie Sie OpenVPN auf CentOS 8 Server installieren und konfigurieren. Und wir werden die zertifikatsbasierte OpenVPN-Authentifizierung implementieren.
Voraussetzungen
- CentOS 8-Server
- Root-Rechte
Was werden wir tun?
- Installieren Sie OpenVPN und Easy-RSA
- Easy-RSA 3-Variablen konfigurieren
- OpenVPN-Schlüssel erstellen
- OpenVPN-Server konfigurieren
- Firewalld konfigurieren und Portweiterleitung aktivieren
- Client-Setup
- Testen
Schritt 1 – OpenVPN und Easy-RSA installieren
Zuerst fügen wir das EPEL-Repository (Extra Package for Enterprise Linux) hinzu, installieren das neueste OpenVPN-Paket und laden das easy-rsa-Skript auf das CentOS 8-System herunter.
Installieren Sie das EPEL-Repository mit dem folgenden dnf-Befehl.
dnf install epel-release
Installieren Sie danach das neueste OpenVPN-Paket 2.4.7.
dnf install openvpn
Sobald die Installation abgeschlossen ist, gehen Sie zu „/etc/openvpn“ und laden Sie das easy-rsa-Skript mit dem untenstehenden wget-Befehl herunter.
cd /etc/openvpn/
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz
Extrahieren 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 – Easy-RSA 3 konfigurieren
In diesem Schritt konfigurieren wir easy-rsa 3, 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 erstellen Sie mit dem vim-Editor ein neues vars-Skript.
cd /etc/openvpn/easy-rsa/
vim vars
Fügen Sie die vars easy-rsa 3-Konfigurationen unten 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 "[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"
Speichern und beenden.
Hinweis:
- Ä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-Schlüssel erstellen
In diesem Schritt erstellen wir die OpenVPN-Schlüssel basierend auf der von uns erstellten easy-rsa 3 'vars'-Datei. Wir werden den CA-Schlüssel, Server- und Client-Schlüssel, DH- und CRL-PEM-Datei erstellen.
Wir werden all diese Schlüssel mit der Befehlszeile ‚easyrsa‘ erstellen. Gehen Sie in das Verzeichnis ‚/etc/openvpn/easy-rsa/‘.
cd /etc/openvpn/easy-rsa/3/
- Initialisierung und Build-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 erstellen Sie den CA-Schlüssel mit dem folgenden Befehl.
./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 im Verzeichnis 'pki'.
- Serverschlüssel erstellen
Jetzt 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
Hinweis:
- nopass =Option zum Deaktivieren des Passworts für den 'hakase-server'-Schlüssel.
Und signieren Sie den Schlüssel „hakase-server“ 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“ im Verzeichnis „pki/issued/“.
Überprüfen Sie die Zertifikatsdatei mit dem OpenSSL-Befehl und vergewissern Sie sich, dass kein Fehler vorliegt.
openssl verify -CAfile pki/ca.crt pki/issued/hakase-server.crt
Alle Serverzertifikatschlüssel wurden erstellt. Der private Schlüssel des Servers befindet sich unter „pki/private/hakase-server.key“ und das Serverzertifikat unter „pki/issued/hakase-server.crt“.
- Kundenschlüssel erstellen
Jetzt müssen wir Schlüssel für den Client erstellen. Wir werden einen neuen Kundenschlüssel mit dem Namen „client01“ generieren.
Generieren 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 Client-Zertifikatsanforderung 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 erstellen
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 generieren, die oben erstellt wurde.
Generieren Sie den Diffie-Hellman-Schlüssel mit dem folgenden Befehl.
./easyrsa gen-dh
Und der DH-Schlüssel wurde generiert und befindet sich im Verzeichnis „pki“.
- Optional:Generieren Sie den CRL-Schlüssel
Der Schlüssel CRL (Certificate Revoking List) wird zum Widerrufen des Client-Schlüssels verwendet. Wenn Sie mehrere Client-Zertifikate von Clients auf Ihrem VPN-Server haben und einen Schlüssel entfernen möchten, müssen Sie ihn nur mit dem Befehl easy-rsa widerrufen.
Wenn Sie einen Schlüssel widerrufen möchten, führen Sie den folgenden Befehl aus.
./easyrsa revoke someone
Und generieren Sie dann den CRL-Schlüssel.
./easyrsa gen-crl
Die CRL-PEM-Datei wurde im Verzeichnis „pki“ generiert – das Folgende ist 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 client01-Schlüssel und das 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 wurden in jedes Verzeichnis kopiert.
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 mit vim eine neue Konfigurationsdatei „server.conf“.
cd /etc/openvpn/server/
vim server.conf
Fügen Sie dort die folgende OpenVPN-Serverkonfiguration ein.
# OpenVPN Port, Protocol, and the Tunan
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-Serverkonfiguration wurde erstellt.
Schritt 5 – Portweiterleitung aktivieren und Routing in Firewalld konfigurieren
In diesem Schritt aktivieren wir das Kernelmodul für die Portweiterleitung und konfigurieren das Routing „Firewalld“ für OpenVPN.
Aktivieren Sie das Kernelmodul für die Portweiterleitung, 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 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
Fügen Sie danach 'tun0' zur 'vertrauenswürdigen' Zone hinzu.
firewall-cmd --permanent --zone=trusted --add-interface=tun0
Aktivieren Sie nun „MASQUERADE“ auf der standardmäßigen „öffentlichen“ Zone firewalld.
firewall-cmd --permanent --add-masquerade
Aktivieren Sie NAT für die interne OpenVPN-IP-Adresse „10.5.0.0/24“ zur externen 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 Firewall neu laden.
firewall-cmd --reload
Die Konfiguration der Portweiterleitung und des Firewalld-Routings ist abgeschlossen, starten Sie den OpenVPN-Dienst und aktivieren Sie ihn so, dass er bei jedem Systemstart automatisch gestartet wird.
systemctl start ope[email protected]
systemctl enable [email protected]
Überprüfen Sie danach den OpenVPN-Dienst mit den folgenden Befehlen.
netstat -plntu
systemctl status [email protected]
Und Sie erhalten das Ergebnis wie folgt.
Als Ergebnis läuft der OpenVPN-Dienst auf dem UDP-Protokoll mit dem Standardport „1194“.
Schritt 6 – Einrichtung des OpenVPN-Clients
Gehen Sie in das Verzeichnis „/etc/openvpn/client“ und erstellen Sie mit vim eine neue OpenVPN-Client-Konfigurationsdatei „client01.ovpn“.
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 eine „zip“- oder „tar.gz“-Datei und laden Sie die komprimierte Datei mit SCP von Ihrem lokalen Computer 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 Befehl scp wie unten beschrieben herunterladen.
scp [email protected]:/etc/openvpn/client01.tar.gz .
Schritt 7 – Mit OpenVPN verbinden
Testen auf den Clients.
- Unter Linux
Installieren Sie das OpenVPN-Paket und wenn Sie eine GUI-Konfiguration wünschen, installieren Sie OpenVPN network-manager.
sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome -y
Wenn Sie eine Verbindung über eine Terminal-Shell herstellen möchten, führen Sie den folgenden OpenVPN-Befehl aus.
openvpn --config client01.ovpn
Wenn Sie mit OpenVPN verbunden sind, öffnen Sie eine neue Terminal-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.
Extrahieren Sie die Datei „client01.tar.gz“ und benennen Sie das Verzeichnis „client“ in „client01.tblk“ um.
tar -xzvf client01.tar.gz
mv client client01.tblk
Doppelklicken Sie auf „client01.tblk“ und der Tunnelblick erkennt automatisch die OpenVPN-Konfiguration und importiert sie dann.
Verbinden Sie sich nun durch den Tunnelblick in der oberen Leiste.
- Unter Windows
Laden Sie den OpenVPN-Client für Windows herunter und importieren Sie die Konfiguration.