OpenVPN-Server auf Debian 12 Installieren

Ein virtuelles privates Netzwerk (VPN) ermöglicht dir den Zugang zum Internet, indem es deinen Standort verschleiert. Das gibt dir die Freiheit, sicher in nicht vertrauenswürdigen Netzwerken auf das Internet zuzugreifen und geografische Einschränkungen und Zensur zu umgehen. OpenVPN ist eine Open-Source Transport Layer Security (TLS) VPN-Lösung, um dieses Ziel zu erreichen.

In unserem Tutorial werden wir OpenVPN auf einem Debian 12 Server installieren und ihn so konfigurieren, dass er von einem Client-Rechner aus erreichbar ist, und eine VPN-Verbindung zwischen beiden herstellen, um den gesamten Datenverkehr des Clients über den OpenVPN-Server umzuleiten.

Voraussetzungen

  • Ein Server mit Debian 12, der sowohl IPv4- als auch IPv6-Verbindungen unterstützt. Wir bezeichnen diesen Server als OpenVPN-Server. Die Unkomplizierte Firewall (UFW) ist aktiviert und läuft auf dem Server.
  • Ein Server mit Debian 12, der sowohl IPv4- als auch IPv6-Verbindungen unterstützt. Wir werden ihn als private Zertifizierungsstelle (CA) einrichten, die wir als CA-Server bezeichnen werden.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten sowohl auf OpenVPN als auch auf dem CA-Server.
  • Ein Client-Rechner, der sich mit dem OpenVPN-Server verbindet. Du kannst dein lokales Gerät als Client-Rechner verwenden. OpenVPN hat Clients für Windows, Linux, macOS, Android und iOS. Du kannst jeden von ihnen für die Verbindung verwenden. Wir werden einen Debian 12 Client-PC für das Tutorial verwenden.
  • Alles ist auf dem OpenVPN- und dem CA-Server aktualisiert.
    $ sudo apt update && sudo apt upgrade
    

Schritt 1 – Einrichten des CA-Servers

Eine Zertifizierungsstelle (CA) ist eine Einrichtung, die digitale Zertifikate ausstellt, um Identitäten im Internet zu überprüfen. In diesem Lernprogramm verwenden wir einen eigenständigen Server als privaten CA-Server, der die OpenVPN-Server- und Client-Zertifikate validiert. Dein CA-Server sollte außer dem Importieren, Signieren und Validieren von Zertifikaten keine weiteren Dienste ausführen.

Schritt 1.1 – Easy-RSA installieren

Der erste Schritt ist die Installation der Skripte von easy-rsa. easy-rsa ist ein Tool zur Verwaltung von Zertifizierungsstellen, mit dem ein privater Schlüssel und ein öffentliches Stammzertifikat erstellt werden können.

$ sudo apt install easy-rsa

Schritt 1.2 – Erstellen eines Verzeichnisses der Public Key Infrastructure

Der nächste Schritt besteht darin, eine Basis-PKI (Public Key Infrastructure) auf dem CA-Server zu erstellen.

$ mkdir ~/easy-rsa

Erstelle symbolische Links, die auf die installierten easy-rsa Paketdateien verweisen.

$ ln -s /usr/share/easy-rsa/* ~/easy-rsa/

Schränke den Zugriff auf das PKI-Verzeichnis ein.

$ chmod 700 /home/<username>/easy-rsa

Initialisiere die PKI.

$ cd ~/easy-rsa
$ ./easyrsa init-pki

Du wirst die folgende Ausgabe erhalten.

* Notice:

  init-pki complete; you may now create a CA or requests.

  Your newly created PKI dir is:
  * /home/<username>/easy-rsa/pki

* Notice:
  IMPORTANT: Easy-RSA 'vars' file has now been moved to your PKI above.

Schritt 1.3 – Erstellen einer Zertifizierungsstelle

Bevor du den privaten Schlüssel und das Zertifikat deiner Zertifizierungsstelle erstellen kannst, musst du die Organisationsinformationen für sie konfigurieren. Die Konfigurationsdatei vars ist bereits im Verzeichnis pki angelegt. Öffne sie zum Bearbeiten.

$ cd ~/easy-rsa
$ nano pki/vars

Finde die folgenden Variablen und entkommentiere sie, indem du die Raute(#) davor entfernst und wie unten gezeigt bearbeitest.

set_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "NewYork"
set_var EASYRSA_REQ_CITY       "New York City"
set_var EASYRSA_REQ_ORG        "Howtoforge"
set_var EASYRSA_REQ_EMAIL      "admin@example.com"
set_var EASYRSA_REQ_OU         "Community"
set_var EASYRSA_ALGO           "ec"
set_var EASYRSA_DIGEST         "sha512"

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Führe den folgenden Befehl aus, um das Paar aus öffentlichem und privatem Stammschlüssel für deine Zertifizierungsstelle zu erstellen.

$ ./easyrsa build-ca

Du wirst aufgefordert, eine Passphrase für dein Schlüsselpaar einzugeben. Wähle eine sichere Passphrase und notiere sie für später. Als Nächstes wirst du nach einer PEM-Passphrase gefragt. Du wirst auch nach dem Common Name (CN) für deine CA gefragt. Du kannst eine beliebige Zeichenfolge eingeben, aber der Einfachheit halber drückst du ENTER, um den Standardnamen zu akzeptieren.

* Notice:
Using Easy-RSA configuration from: /home/<username>/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 3.0.9 30 May 2023 (Library: OpenSSL 3.0.9 30 May 2023)


Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
Using configuration from /home/<username>/easy-rsa/pki/ab18123c/temp.918764ef
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

* Notice:

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/<username>/easy-rsa/pki/ca.crt

Wenn du nicht jedes Mal nach einem Passwort gefragt werden möchtest, wenn du mit deiner CA interagierst, kannst du stattdessen den folgenden Befehl verwenden.

$ ./easyrsa build-ca nopass

Dadurch werden zwei Dateien erstellt:

  • ~/easy-rsa/pki/ca.crt ist die öffentliche Zertifikatsdatei der CA. Jeder Benutzer und der OpenVPN-Server benötigen eine Kopie dieser Datei.
  • ~/easy-rsa/pki/private/ca.key ist der private Schlüssel, den die CA verwendet, um Zertifikate für den OpenVPN-Server und den Client zu signieren. Wenn ein Angreifer Zugang zu deiner CA und damit auch zu deiner ca.key Datei erhält, musst du deine CA zerstören. Aus diesem Grund sollte sich deine ca.key Datei nur auf deinem CA-Rechner befinden und dein CA-Rechner als zusätzliche Sicherheitsmaßnahme idealerweise offline bleiben, wenn er keine Zertifikatsanfragen signiert.

Schritt 2 – Installation von OpenVPN und Easy-RSA auf dem OpenVPN-Server

Logge dich auf deinem OpenVPN-Server ein und installiere die Pakete OpenVPN und Easy-RSA.

$ sudo apt install openvpn easy-rsa

Erstelle das Verzeichnis ~/easy-rsa.

$ mkdir ~/easy-rsa

Erstelle einen symbolischen Link von dem easy-rsa Skript, das wir genau wie auf dem CA-Server installiert haben.

$ ln -s /usr/share/easy-rsa/* ~/easy-rsa/

Schränke den Zugriff auf das Verzeichnis ein.

$ chmod 700 ~/easy-rsa

Schritt 3 – Erstellen einer PKI für OpenVPN Server

Der nächste Schritt besteht darin, das PKI-Verzeichnis mit der Option init-pki zu erstellen. Obwohl du diesen Befehl bereits auf dem CA-Server als Teil der Voraussetzungen ausgeführt hast, ist es notwendig, ihn hier auszuführen, weil dein OpenVPN-Server und der CA-Server getrennte PKI-Verzeichnisse haben.

$ cd ~/easy-rsa
$ ./easyrsa init-pki

Die PKI auf dem OpenVPN-Server wird als zentraler Ort zum Speichern von Zertifikatsanträgen und öffentlichen Zertifikaten verwendet.

Öffne das Verzeichnis ~/easy-rsa/pki/vars, in dem die erforderlichen Informationen zur Erstellung der PKI gespeichert sind, und öffne es zur Bearbeitung.

$ nano pki/vars

Finde die folgenden Variablen und entkommentiere sie, indem du die Raute (#) vor ihnen entfernst und ihre Werte wie unten angegeben änderst.

set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Da wir diesen Server nicht als CA verwenden, sind dies die einzigen Werte, die wir brauchen. Damit werden deine OpenVPN- und CA-Server so konfiguriert, dass sie ECC verwenden. Das bedeutet, wenn ein Client und ein Server versuchen, einen gemeinsamen symmetrischen Schlüssel zu erstellen, verwenden sie Elliptische Kurven-Algorithmen für den Austausch. Dies ist deutlich schneller als die Verwendung des klassischen RSA-Algorithmus mit Diffie-Hellman, da die Zahlen viel kleiner und die Berechnungen schneller sind.

Schritt 4 – OpenVPN Server Zertifikatsanforderung und privaten Schlüssel erstellen

Wechsle in das Verzeichnis ~/easy-rsa auf dem OpenVPN-Server.

$ cd ~/easy-rsa

Der nächste Schritt besteht darin, einen privaten Schlüssel und eine Zertifikatsanforderung (Certificate Signing Request, CSR) auf deinem OpenVPN-Server zu erstellen. Führe den Befehl easy-rsa mit der Option gen-req gefolgt von einem Common Name (CN) für den Server aus. In unserem Tutorial werden wir server als CN für den OpenVPN-Server verwenden. Außerdem verwenden wir die Option nopass, um Probleme mit den Berechtigungen zu vermeiden.

$ ./easyrsa gen-req server nopass

Du erhältst die folgende Ausgabe.

* Notice:
Using Easy-RSA configuration from: /home/<username>/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 3.0.9 30 May 2023 (Library: OpenSSL 3.0.9 30 May 2023)

-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [server]:
* Notice:

Keypair and certificate request completed. Your files are:
req: /home/<username>/easy-rsa/pki/reqs/server.req
key: /home/<username>/easy-rsa/pki/private/server.key

Dadurch werden ein privater Schlüssel für den Server und eine Zertifikatsanforderungsdatei namens server.req erstellt. Kopiere den Serverschlüssel in das Verzeichnis /etc/openvpn/server.

$ sudo cp /home/<username>/easy-rsa/pki/private/server.key /etc/openvpn/server/

Die Zertifikatsanforderung (Certificate Signing Request, CSR) kann nun von der Zertifizierungsstelle signiert werden.

Schritt 5 – Signieren der CSR des OpenVPN-Servers

Im nächsten Schritt musst du die CSR-Datei zum Signieren auf den CA-Server kopieren. Wenn auf deinen Servern die Passwortauthentifizierung aktiviert ist, kannst du die Datei einfach mit dem folgenden Befehl kopieren.

$ scp /home/username/easy-rsa/pki/reqs/server.req username@your_ca_server_ip:/tmp

Wenn du die Passwortauthentifizierung nicht nutzen willst, musst du für jeden Server ein SSH-Schlüsselpaar erzeugen und dann den öffentlichen SSH-Schlüssel des OpenVPN-Servers in die Datei authorized_keys des CA-Rechners einfügen und umgekehrt.

Wenn du dir das ersparen willst, kannst du die Dateien auch einfach kopieren. Öffne die Datei auf dem OpenVPN-Server, kopiere ihren Inhalt und erstelle dann die Datei auf dem CA-Server und füge den Inhalt ein.

Melde dich wieder auf dem CA-Server an, wechsle in das Verzeichnis ~/easy-rsa und importiere die CSR-Datei.

$ cd ~/easy-rsa
$ ./easyrsa import-req /tmp/server.req server

Du erhältst die folgende Ausgabe.

* Notice:
Using Easy-RSA configuration from: /home/navjot/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 3.0.9 30 May 2023 (Library: OpenSSL 3.0.9 30 May 2023)

* Notice:

The request has been successfully imported with a short name of: server
You may now use this name to perform signing operations on this request.

Signiere die Anfrage mit folgendem Befehl. Da wir die CSR des OpenVPN-Servers signieren, verwenden wir seinen Common Name (CN).

$ ./easyrsa sign-req server server

Du wirst aufgefordert, zu überprüfen, ob die Anfrage aus einer vertrauenswürdigen Quelle stammt. Gib yes ein und drücke zur Bestätigung die Taste ENTER.

* Notice:
Using Easy-RSA configuration from: /home/navjot/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 3.0.9 30 May 2023 (Library: OpenSSL 3.0.9 30 May 2023)


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 825 days:

subject=
    commonName                = server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Als Nächstes wirst du aufgefordert, die Passphrase für den privaten CA-Schlüssel einzugeben, die du zuvor eingerichtet hast.

Using configuration from /home/<username>/easy-rsa/pki/de50cb3f/temp.93caaa8c
Enter pass phrase for /home/<username>/easy-rsa/pki/private/ca.key:
00F7EDB7:error:0700006C:configuration file routines:NCONF_get_string:no value:../crypto/conf/conf_lib.c:315:group=<NULL> name=unique_subject
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until Nov 10 07:48:56 2025 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

* Notice:
Certificate created at: /home/<username>/easy-rsa/pki/issued/server.crt

Das daraus resultierende Zertifikat enthält den öffentlichen Verschlüsselungsschlüssel des OpenVPN-Servers sowie die Signatur des CA-Servers. Kopiere die Zertifikate zurück auf den OpenVPN-Server.

$ scp pki/issued/server.crt username@your_vpn_server_ip:/tmp
$ scp pki/ca.crt username@your_vpn_server_ip:/tmp

Auf deinem OpenVPN-Server kopierst du die Dateien in das Verzeichnis /etc/openvpn/server.

$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server

Schritt 6 – OpenVPN-Kryptomaterial konfigurieren

Wir fügen einen zusätzlichen gemeinsamen geheimen Schlüssel hinzu, den der Server und alle Clients mit der OpenVPN-Direktive tls-crypt verwenden werden. Dies stellt sicher, dass der OpenVPN-Server mit unauthentifiziertem Datenverkehr, Port-Scans und Denial-of-Service-Angriffen fertig werden kann. Außerdem wird es dadurch schwieriger, OpenVPN-Netzwerkverkehr zu identifizieren.

Wechsle in das Verzeichnis ~/easy-rsa.

$ cd ~/easy-rsa

Erstelle mit dem folgenden Befehl einen starken Diffie-Hellman-Schlüssel, der beim Schlüsselaustausch verwendet wird.

$ ./easyrsa gen-dh

Erzeuge den Pre-Shared Key tls-crypt. Dadurch wird eine Datei mit dem Namen ta.key

$ sudo openvpn --genkey secret ta.key

Kopiere die Datei ta.key in das Verzeichnis /etc/openvpn/server.

$ sudo cp ta.key /etc/openvpn/server
$ sudo cp pki/dh.pem /etc/openvpn/server

Schritt 7 – Erzeugen eines Client-Zertifikats und eines Schlüsselpaares

Erstelle auf deinem VPN-Server ein Verzeichnis, in dem du das Client-Zertifikat und die Schlüsseldateien speicherst.

$ mkdir -p ~/client-configs/keys

Schränke die Berechtigungen für das Verzeichnis ein, um es zu schützen.

$ chmod -R 700 ~/client-configs

Wechsle dann in das Verzeichnis ~/easy-rsa.

$ cd ~/easy-rsa

Erstelle einen Client-Schlüssel mit client1 als Common Name für den Client. Du kannst einen beliebigen CN für den Client verwenden.

$ ./easyrsa gen-req client1 nopass

Drücke ENTER, um den Common Name zu bestätigen. Du erhältst die folgende Ausgabe.

* Notice:
Using Easy-RSA configuration from: /home/<username>/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 3.0.9 30 May 2023 (Library: OpenSSL 3.0.9 30 May 2023)

-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [client1]:
* Notice:

Keypair and certificate request completed. Your files are:
req: /home/<username>/easy-rsa/pki/reqs/client1.req
key: /home/<username>/easy-rsa/pki/private/client1.key

Kopiere anschließend die Datei client1.key in das Verzeichnis ~/client-configs/keys.

$ cp pki/private/client1.key ~/client-configs/keys/

Übertrage die Datei client1.req auf den CA-Server.

$ scp pki/reqs/client1.req username@your_ca_server_ip:/tmp

Logge dich wieder auf dem CA-Server ein und importiere die Serveranfrage.

$ cd ~/easy-rsa
$ ./easyrsa import-req /tmp/client1.req client1

Du erhältst die folgende Ausgabe.

* Notice:
Using Easy-RSA configuration from: /home/<username>/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 3.0.9 30 May 2023 (Library: OpenSSL 3.0.9 30 May 2023)

* Notice:

The request has been successfully imported with a short name of: client1
You may now use this name to perform signing operations on this request.

Signiere die Anfrage mit folgendem Befehl. Wir verwenden client als Anfragetyp.

$ ./easyrsa sign-req client client1

Wenn du dazu aufgefordert wirst, gib yes ein, um zu bestätigen, dass du die Anfrage signierst und dass sie aus einer vertrauenswürdigen Quelle stammt.

* Notice:
Using Easy-RSA configuration from: /home/<username>/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 3.0.9 30 May 2023 (Library: OpenSSL 3.0.9 30 May 2023)


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a client certificate for 825 days:

subject=
    commonName                = client1


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Du wirst aufgefordert, die Passphrase der Zertifizierungsstelle einzugeben.

Using configuration from /home/<username>/easy-rsa/pki/7bf6e9b1/temp.c01d673d
Enter pass phrase for /home/<username>/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'client1'
Certificate is to be certified until Nov 10 08:25:10 2025 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

* Notice:
Certificate created at: /home/<username>/easy-rsa/pki/issued/client1.crt

Übertrage das erstellte Zertifikat zurück auf den OpenVPN-Server.

$ scp pki/issued/client1.crt username@your_server_ip:/tmp

Auf dem OpenVPN-Server kopierst du das Client-Zertifikat in das Verzeichnis ~/client-configs/keys.

$ cp /tmp/client1.crt ~/client-configs/keys/

Kopiere die Dateien ca.crt und ta.key in das Verzeichnis ~/client-configs/keys und setze die entsprechenden Berechtigungen für deinen aktuell eingeloggten Server.

$ sudo cp ~/easy-rsa/ta.key ~/client-configs/keys/
$ sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
$ sudo chown username.username ~/client-configs/keys/*

Schritt 8 – OpenVPN konfigurieren

Kopiere die Beispieldatei server.conf als Ausgangspunkt für die Konfiguration von OpenVPN.

$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/

Öffne die Datei zum Bearbeiten.

$ sudo nano /etc/openvpn/server/server.conf

Finde den Abschnitt HMAC in der Datei, indem du nach der Direktive tls-auth suchst. Kommentiere die Zeile aus, indem du ein Semikolon (;) an den Anfang der Zeile setzt. Füge wie gezeigt eine neue Zeile darunter ein.

;tls-auth ta.key 0 # This file is secret
tls-crypt ta.key

Als Nächstes änderst du den Wert der kryptografischen Verschlüsselung, indem du nach der Zeile cipher suchst. Der Standardwert ist auf AES-256-CBC eingestellt. Kommentiere den Standardwert aus und füge eine weitere Zeile mit der Verschlüsselung AES-256-GCM hinzu, die einen besseren Verschlüsselungsgrad und eine bessere Leistung bietet (siehe Abbildung).

;cipher AES-256-CBC
cipher AES-256-GCM

Direkt darunter fügst du die Direktive auth hinzu, um den HMAC Message Digest Algorithmus auszuwählen.

auth SHA256

Da wir die Elliptic Curve Cryptography verwenden, müssen wir die Diffie-Hellman-Verschlüsselung deaktivieren. Kommentiere die Zeile dh dh2048.pem aus und füge dh none darunter ein.

;dh dh2048.pem
dh none

Sobald OpenVPN gestartet ist, sollte es ohne Berechtigungen laufen. Um dies zu aktivieren, entkommentiere die Zeilen ;user openvpn und ;group openvpn und ändere sie wie gezeigt.

user nobody
group nogroup

Den gesamten Datenverkehr durch das VPN umleiten

Die obigen Einstellungen stellen die VPN-Verbindung zwischen dem Client und dem Server her, zwingen aber keine Verbindungen, den Tunnel zu benutzen. Dazu musst du zunächst die Zeile push "redirect-gateway def1 bypass-dhcp" finden. Diese Zeile weist den Client an, seinen gesamten Datenverkehr über den OpenVPN-Server umzuleiten. Dekommentiere die Zeile, um die Funktion zu aktivieren.

push "redirect-gateway def1 bypass-dhcp"

Suche den Abschnitt dhcp-option unterhalb dieser Zeile. Entferne das Semikolon am Anfang der beiden Zeilen. Dadurch wird der Client angewiesen, die OpenDNS-Auflöser zu verwenden.

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Port und Protokoll ändern

OpenVPN verwendet standardmäßig Port 1194 und das UDP-Protokoll, um Client-Verbindungen zu akzeptieren. Du kannst den Port je nach deinen Bedürfnissen ändern. Wenn du keine Webinhalte auf deinem OpenVPN-Server hostest, kannst du Port 443 verwenden.

Finde die Zeile port 1194 und ändere ihren Wert.

# Optional!
port 443

Finde die Zeile proto udp und kommentiere sie aus, indem du ihr ein Semikolon voranstellst. Entferne das Semikolon aus der Zeile proto tcp, wie gezeigt.

proto tcp
;proto udp

Da wir das TCP-Protokoll verwenden, müssen wir den Wert der Direktive explicit-exit-notify von 1 in 0 ändern, da diese Direktive nur von UDP verwendet wird.

explicit-exit-notify 0

Auf nicht standardmäßige Anmeldeinformationen verweisen

Wenn du beim Befehl ./easy-rsa gen-req server einen anderen Namen gewählt hast, musst du die Zeilen cert und key so ändern, dass sie auf die entsprechenden Dateien .crt und .key verweisen. Da wir den Standardnamen server verwenden, ist der Standardwert korrekt.

cert server.crt
key server.key

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Schritt 9 – Anpassen der Netzwerkkonfiguration des OpenVPN-Servers

Der nächste Schritt besteht darin, die Netzwerkkonfiguration des Servers zu konfigurieren, damit OpenVPN den Datenverkehr korrekt weiterleiten kann. Das erste, was wir konfigurieren müssen, ist die Portweiterleitung.

Öffne die Datei /etc/sysctl.conf, um sie zu bearbeiten.

$ sudo nano /etc/sysctl.conf

Füge die folgende Zeile am Ende der Datei ein.

net.ipv4.ip_forward = 1

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Um die Datei zu lesen und die neuen Werte für die aktuelle Sitzung zu laden, verwende den folgenden Befehl.

$ sudo sysctl -p
vm.swappiness = 0
net.ipv4.ip_forward = 1

Mit dieser Konfiguration wird der gesamte Webverkehr von deinem Client über die IP-Adresse deines Servers geleitet, und die öffentliche IP-Adresse deines Clients wird effektiv ausgeblendet.

Schritt 10 – Firewall konfigurieren

Um OpenVPN durch die Firewall zu lassen, musst du Masquerading aktivieren, ein iptables-Konzept, das eine dynamische Netzwerkadressübersetzung (NAT) ermöglicht, um Client-Verbindungen korrekt zu routen.

Bevor du die Firewall-Konfigurationsdatei öffnest, um die Masquerading-Regeln hinzuzufügen, musst du zunächst die öffentliche Netzwerkschnittstelle deines Rechners mit dem folgenden Befehl finden.

$ ip route list default

Du wirst eine ähnliche Ausgabe erhalten.

default via 69.28.90.1 dev ens3 onlink

Daraus geht hervor, dass der Name der Schnittstelle ens3 lautet. Öffne die Datei /etc/ufw/before.rules zum Bearbeiten.

$ sudo nano /etc/ufw/before.rules

Diese Regeln werden gelesen und eingesetzt, bevor die herkömmlichen UFW-Regeln geladen werden. Füge die folgenden Zeilen wie gezeigt am Anfang der Datei ein.

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#
 
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to ens3 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE
COMMIT
# END OPENVPN RULES
 
# Don't delete these required lines, otherwise there will be errors
*filter
. . .

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Als nächstes müssen wir UFW so konfigurieren, dass weitergeleitete Pakete standardmäßig zugelassen werden. Öffne die Datei /etc/default/ufw zum Bearbeiten.

$ sudo nano /etc/default/ufw

Suche die Direktive DEFAULT_FORWARD_POLICY und ändere ihren Wert von DROP in ACCEPT.

DEFAULT_FORWARD_POLICY="ACCEPT"

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Und schließlich öffne den Port 443, den du zuvor für den OpenVPN-Server konfiguriert hast.

$ sudo ufw allow 443/tcp

Deaktiviere und aktiviere die Firewall, um die neue Konfiguration anzuwenden.

$ sudo ufw disable
$ sudo ufw enable

Schritt 11 – OpenVPN starten

Starte den OpenVPN-Dienst.

$ sudo systemctl start openvpn-server@server.service

Überprüfe den Status des Dienstes.

$ sudo systemctl status openvpn-server@server.service

Du wirst eine ähnliche Ausgabe erhalten.

? openvpn-server@server.service - OpenVPN service for server
     Loaded: loaded (/lib/systemd/system/openvpn-server@.service; disabled; preset: enabled)
     Active: active (running) since Tue 2023-08-08 09:22:49 UTC; 7s ago
       Docs: man:openvpn(8)
             https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
             https://community.openvpn.net/openvpn/wiki/HOWTO
   Main PID: 4531 (openvpn)
     Status: "Initialization Sequence Completed"
      Tasks: 1 (limit: 2315)
     Memory: 1.4M
        CPU: 27ms
     CGroup: /system.slice/system-openvpn\x2dserver.slice/openvpn-server@server.service
             ??4531 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf

Aug 08 09:22:49 vpnserver openvpn[4531]: TCPv4_SERVER link local (bound): [AF_INET][undef]:443
Aug 08 09:22:49 vpnserver openvpn[4531]: TCPv4_SERVER link remote: [AF_UNSPEC]
Aug 08 09:22:49 vpnserver openvpn[4531]: UID set to nobody
Aug 08 09:22:49 vpnserver openvpn[4531]: GID set to nogroup
Aug 08 09:22:49 vpnserver openvpn[4531]: Capabilities retained: CAP_NET_ADMIN
Aug 08 09:22:49 vpnserver openvpn[4531]: MULTI: multi_init called, r=256 v=256
Aug 08 09:22:49 vpnserver openvpn[4531]: IFCONFIG POOL IPv4: base=10.8.0.4 size=62
Aug 08 09:22:49 vpnserver openvpn[4531]: IFCONFIG POOL LIST
Aug 08 09:22:49 vpnserver openvpn[4531]: MULTI: TCP INIT maxclients=1024 maxevents=1029
Aug 08 09:22:49 vpnserver openvpn[4531]: Initialization Sequence Completed

Aktiviere den OpenVPN-Dienst, damit er beim Booten startet.

$ sudo systemctl -f enable openvpn-server@server.service

Schritt 12 – Client-Konfiguration erstellen

Bevor wir einen Client testen, müssen wir Konfigurationsdateien für den Client erstellen, den wir verwenden werden. Erstelle ein Verzeichnis zum Speichern der Client-Konfigurationsdateien.

$ mkdir -p ~/client-configs/files

Kopiere die Beispiel-Client-Konfigurationsdatei in dieses Verzeichnis.

$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

Öffne die Konfigurationsdatei, um sie zu bearbeiten.

$ nano ~/client-configs/base.conf

Suche die Direktive remote und setze sie so, dass sie auf die öffentliche IP-Adresse deines OpenVPN-Servers zeigt. Ändere auch den Port so, dass er mit dem zuvor gewählten Port übereinstimmt.

. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip 443
. . .

Setze das Protokoll, das du zuvor gewählt hast, indem du es auskommentierst und die Einstellung proto udp auskommentierst.

proto tcp

Entferne die Kommentare zu den Anweisungen user und group, indem du das Semikolon vor ihnen entfernst. Ändere außerdem die Werte wie folgt.

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

Finde die Direktiven ca, cert und key und kommentiere sie aus, indem du ein Semikolon davor setzt. Das liegt daran, dass wir die Zertifikate und Schlüssel in der Client-Konfigurationsdatei hinzufügen werden.

# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
;ca ca.crt
;cert client.crt
;key client.key

Kommentiere die Direktive tls-auth aus, da wir ta.key direkt in die Client-Konfigurationsdatei einfügen werden.

# If a tls-auth key is used on the server
# then every client must also have the key.
;tls-auth ta.key 1

Übernimm die Einstellung cipher, die du in der Datei `/etc/openvpn/server/server.conf gesetzt hast. Füge außerdem die Einstellung auth am Ende der Datei hinzu.

cipher AES-256-GCM
....
auth SHA256

Füge die Direktive key-direction hinzu und setze sie auf 1, damit das VPN richtig funktioniert.

key-direction 1

Als Nächstes fügst du einige auskommentierte Zeilen hinzu, um die verschiedenen Methoden zu behandeln, die von VPN-Clients für die DNS-Auflösung verwendet werden. Füge die folgenden Zeilen für Clients hinzu, die nicht systemd-resolved verwenden, sondern das Dienstprogramm resolvconf zur Verwaltung von DNS nutzen.

; script-security 2
; up /etc/openvpn/update-resolv-conf
; down /etc/openvpn/update-resolv-conf

Füge die folgenden Zeilen für Clients hinzu, die systemd-resolved für die DNS-Auflösung verwenden.

; script-security 2
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE .

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Erstelle ein Skript, um die Basiskonfiguration mit den relevanten Zertifikats-, Schlüssel- und Verschlüsselungsdateien zu kompilieren, und kopiere dann die erzeugte Konfigurationsdatei in das Verzeichnis ~/client-configs/files.

Erstelle und öffne die Datei make_config.sh im Verzeichnis ~/client-configs.

$ nano ~/client-configs/make_config.sh

Füge den folgenden Code in die Datei ein.

#!/bin/bash
 
# First argument: Client identifier
 
KEY_DIR=/home/<username>/client-configs/keys
OUTPUT_DIR=/home/<username>/client-configs/files
BASE_CONFIG=/home/<username>/client-configs/base.conf
 
cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-crypt>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-crypt>') \
    > ${OUTPUT_DIR}/${1}.ovpn

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Mache die Datei ausführbar und schränke die Berechtigungen ein.

$ chmod 700 ~/client-configs/make_config.sh

Dieses Skript erstellt eine Kopie der Datei base.conf, sammelt alle Zertifikats- und Schlüsseldateien, extrahiert ihren Inhalt, hängt sie an die Basiskonfigurationsdatei an und exportiert alles, um eine neue Client-Konfigurationsdatei zu erstellen. Jedes Mal, wenn du einen neuen Client hinzufügst, musst du neue Schlüssel und Zertifikate für ihn erzeugen und dann dieses Skript ausführen, um eine Client-Konfigurationsdatei zu erstellen.

In Schritt 7 haben wir bereits die Client-Zertifikats- und Schlüsseldateien erstellt. Lass uns nun die Konfigurationsdatei dafür erstellen.

Wechsle in das Verzeichnis ~/client-configs.

$ cd ~/client-configs

Führe das Skript aus, um die Client-Konfigurationsdatei zu erstellen.

$ ./make_config.sh client1

Dadurch wird eine Datei mit dem Namen client1.ovpn erstellt. Ändere den Parameter, wenn du einen anderen Dateinamen möchtest. Überprüfe den Inhalt des Verzeichnisses.

$ ls ~/client-configs/files
client1.ovpn

Dies ist die Konfigurationsdatei, die du auf den Client übertragen musst, der dann zur Verbindung mit dem OpenVPN-Server verwendet wird. Du kannst jedes SFTP-Protokoll/Programm verwenden, um die Datei auf den Client zu übertragen.

Schritt 13 – Client-Verbindung installieren und testen

Für unser Tutorial verwenden wir einen Debian 12 Client-Rechner. Installiere OpenVPN mit dem folgenden Befehl.

$ sudo apt install openvpn

Überprüfe, ob dein System systemd-resolved zur Verwaltung von DNS-Anfragen verwendet, indem du den folgenden Befehl ausführst.

$ cat /etc/resolv.conf

Du wirst eine ähnliche Ausgabe erhalten.

# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4

Wenn das System systemd-resolved verwendet, dann ist die IP-Adresse oben 127.0.0.53. Auch der Kommentar oben in der Datei bestätigt dies. Wenn die IP-Adresse eine andere als 127.0.0.53 ist, verwendet das System nicht systemd-resolved und du musst die später beschriebenen Schritte ausführen.

Aber zuerst lädst du die Datei client1.ovpn mit dem folgenden Befehl vom Server herunter.

$ scp username@your_server_ip:/home/<username>/client-configs/files/client1.ovpn

Für Clients mit systemd-resolved

Installiere das Paket openvpn-systemd-resolved, das Skripte enthält, die systemd-resolved dazu zwingen, den VPN-Server für DNS zu verwenden.

$ sudo apt install openvpn-systemd-resolved

Öffne die Konfigurationsdatei des Clients zur Bearbeitung.

$ nano client1.ovpn

Hebe die Kommentare in den folgenden Zeilen der Datei auf, indem du das Semikolon vor den Zeilen entfernst.

script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Für Clients mit update-resolv-conf

Dies ist der Schritt, den du ausführen musst, wenn du ein Debian-System hast. Vergewissere dich zunächst, dass deine Distribution die Datei update-resolv-conf verwendet.

$ ls /etc/openvpn
client server update-resolv-conf

Wenn dein System die Datei update-resolv-conf enthält, dann öffne die Client-Konfigurationsdatei zum Bearbeiten.

$ nano client1.ovpn

Hebe die Kommentare in den folgenden Zeilen der Datei auf, indem du das Semikolon davor entfernst.

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Wenn du eine CentOS-basierte Distribution verwendest, ändere die Direktive group von nogroup in nobody.

group nobody

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Client verbinden

Führe den folgenden Befehl aus, um den Client mit dem VPN-Server zu verbinden.

$ sudo openvpn --config client1.ovpn

Du solltest eine ähnliche Ausgabe erhalten.

2023-08-08 16:23:29 Note: Kernel support for ovpn-dco missing, disabling data channel offload.
2023-08-08 16:23:29 OpenVPN 2.6.3 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] [DCO]
2023-08-08 16:23:29 library versions: OpenSSL 3.0.9 30 May 2023, LZO 2.10
2023-08-08 16:23:29 DCO version: N/A
2023-08-08 16:23:29 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
2023-08-08 16:23:29 TCP/UDP: Preserving recently used remote address: [AF_INET]69.28.91.204:443
2023-08-08 16:23:29 Socket Buffers: R=[131072->131072] S=[16384->16384]
2023-08-08 16:23:29 Attempting to establish TCP connection with [AF_INET]69.28.91.204:443
2023-08-08 16:23:29 TCP connection established with [AF_INET]69.28.91.204:443
2023-08-08 16:23:29 TCPv4_CLIENT link local: (not bound)
2023-08-08 16:23:29 TCPv4_CLIENT link remote: [AF_INET]69.28.91.204:443
2023-08-08 16:23:29 NOTE: UID/GID downgrade will be delayed because of --client, --pull, or --up-delay
2023-08-08 16:23:29 TLS: Initial packet from [AF_INET]69.28.91.204:443, sid=6bd67e12 50ebf8bc
2023-08-08 16:23:30 VERIFY OK: depth=1, CN=Easy-RSA CA
2023-08-08 16:23:30 VERIFY KU OK
2023-08-08 16:23:30 Validating certificate extended key usage
2023-08-08 16:23:30 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
2023-08-08 16:23:30 VERIFY EKU OK
2023-08-08 16:23:30 VERIFY OK: depth=0, CN=server
2023-08-08 16:23:30 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, peer certificate: 384 bit ECsecp384r1, signature: ecdsa-with-SHA512
2023-08-08 16:23:30 [server] Peer Connection Initiated with [AF_INET]69.28.91.204:443
2023-08-08 16:23:30 TLS: move_session: dest=TM_ACTIVE src=TM_INITIAL reinit_src=1
2023-08-08 16:23:30 TLS: tls_multi_process: initial untrusted session promoted to trusted
2023-08-08 16:23:31 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
2023-08-08 16:23:31 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 208.67.222.222,dhcp-option DNS 208.67.220.220,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5,peer-id 0,cipher AES-256-GCM,protocol-flags cc-exit tls-ekm dyn-tls-crypt,tun-mtu 1500'
2023-08-08 16:23:31 OPTIONS IMPORT: --ifconfig/up options modified
2023-08-08 16:23:31 OPTIONS IMPORT: route options modified
2023-08-08 16:23:31 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
2023-08-08 16:23:31 OPTIONS IMPORT: tun-mtu set to 1500
2023-08-08 16:23:31 net_route_v4_best_gw query: dst 0.0.0.0
2023-08-08 16:23:31 net_route_v4_best_gw result: via 10.0.2.2 dev enp0s3
2023-08-08 16:23:31 ROUTE_GATEWAY 10.0.2.2/255.255.255.0 IFACE=enp0s3 HWADDR=08:00:27:b7:cc:29
2023-08-08 16:23:31 TUN/TAP device tun0 opened
2023-08-08 16:23:31 net_iface_mtu_set: mtu 1500 for tun0
2023-08-08 16:23:31 net_iface_up: set tun0 up
2023-08-08 16:23:31 net_addr_ptp_v4_add: 10.8.0.6 peer 10.8.0.5 dev tun0
2023-08-08 16:23:31 /etc/openvpn/update-resolv-conf tun0 1500 0 10.8.0.6 10.8.0.5 init
2023-08-08 16:23:31 net_route_v4_add: 69.28.91.204/32 via 10.0.2.2 dev [NULL] table 0 metric -1
2023-08-08 16:23:31 net_route_v4_add: 0.0.0.0/1 via 10.8.0.5 dev [NULL] table 0 metric -1
2023-08-08 16:23:31 net_route_v4_add: 128.0.0.0/1 via 10.8.0.5 dev [NULL] table 0 metric -1
2023-08-08 16:23:31 net_route_v4_add: 10.8.0.1/32 via 10.8.0.5 dev [NULL] table 0 metric -1
2023-08-08 16:23:31 UID set to nobody
2023-08-08 16:23:31 GID set to nogroup
2023-08-08 16:23:31 Capabilities retained: CAP_NET_ADMIN
2023-08-08 16:23:31 Initialization Sequence Completed
2023-08-08 16:23:31 Data Channel: cipher 'AES-256-GCM', peer-id: 0
2023-08-08 16:23:31 Timers: ping 10, ping-restart 120
2023-08-08 16:23:31 Protocol options: protocol-flags cc-exit tls-ekm dyn-tls-crypt

Du kannst die Verbindung überprüfen, indem du die URL https://whatismyip.com in deinem Browser aufrufst. Dort siehst du deine IP-Adresse und den Standort des OpenVPN-Servers.

WhatisMyIP Ausgabe

Du kannst die Verbindung auch weiter überprüfen, indem du einen Standardtest auf der Website https://www.dnsleaktest.com/ durchführst.

DNS-Leck-Standardtest

Du kannst die IP-Adressen von Google sehen, da wir die IP-Adressen aus der resolv.conf Datei auf dem Client erhalten haben und ihr Standort in den USA liegt, was mit dem Standort des von uns verwendeten OpenVPN-Servers übereinstimmt.

Der obige Befehl führt OpenVPN im Vordergrund aus, was bedeutet, dass das Terminal blockiert wird. Um die Verbindung zu schließen, musst du Strg + C drücken. Du kannst OpenVPN aber auch im Hintergrund laufen lassen. Verwende dazu den folgenden Befehl.

sudo openvpn --config client1.ovpn --daemon

Um die Verbindung zu beenden, suche die Prozess-ID des Prozesses.

$ ps aux | grep openvpn

Du wirst eine ähnliche Ausgabe erhalten.

nobody      4357  0.3  0.0  13468  8432 ?        Ss   15:35   0:00 openvpn --config client1.ovpn --daemon
username    4406  0.0  0.0  17732  2432 pts/0    S+   15:35   0:00 grep --color=auto openvpn

Wie du sehen kannst, lautet die Prozess-ID des OpenVPN-Prozesses 4357. Beende die VPN-Verbindung mit dem folgenden Befehl, um den Prozess zu beenden.

$ sudo kill -9 4357

OpenVPN bietet GUI-Clients für Windows-, macOS-, Android- und iOS-Plattformen an, in die du die Client-Konfigurationsdatei importieren kannst, um dich zu verbinden.

Schritt 14 – Client-Zertifikate widerrufen

Wenn du das Zertifikat eines Clients widerrufen möchtest, um den Zugriff zu verhindern, kannst du dich beim CA-Server anmelden.

Wechsle in das Verzeichnis ~/easy-rsa.

$ cd ~/easy-rsa

Führe das Skript mit der Option revoke aus, gefolgt von dem Namen des Kunden.

$ ./easyrsa revoke client1

Du wirst gefragt, ob du das Zertifikat widerrufen möchtest.

* Notice:
Using Easy-RSA configuration from: /home/navjot/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 3.0.9 30 May 2023 (Library: OpenSSL 3.0.9 30 May 2023)


  Please confirm you wish to revoke the certificate
  with the following subject:

  subject=
    commonName                = client1

  serial-number: A38D324EC106628F53D1ADFCF8F2D706


Type the word 'yes' to continue, or any other input to abort.
    Continue with revocation: yes

Wenn dein privater CA-Schlüssel mit einer Passphrase geschützt war, gib sie ein, wenn du dazu aufgefordert wirst.

Using configuration from /home/<username>/easy-rsa/pki/a02dc925/temp.0b5d5ab5
Enter pass phrase for /home/<username>/easy-rsa/pki/private/ca.key:
Revoking Certificate A38D324EC106628F53D1ADFCF8F2D706.
Data Base Updated

* Notice:

IMPORTANT!!!

Revocation was successful. You must run gen-crl and upload a CRL to your
infrastructure in order to prevent the revoked cert from being accepted.

Dadurch wird das Zertifikat auf dem CA-Server widerrufen. Der OpenVPN-Server hat jedoch keine Möglichkeit, den Widerrufsstatus zu überprüfen. Deshalb müssen wir eine Certificate Revocation List (CRL) erstellen und sie an den OpenVPN-Server übertragen.

Erstelle die CRL.

$ ./easyrsa gen-crl

Du wirst aufgefordert, deine CA-Passphrase einzugeben. Der obige Befehl erzeugt eine Datei crl.pem.

* Notice:
Using Easy-RSA configuration from: /home/<username>/easy-rsa/pki/vars

* Notice:
Using SSL: openssl OpenSSL 3.0.9 30 May 2023 (Library: OpenSSL 3.0.9 30 May 2023)

Using configuration from /home/<username>/easy-rsa/pki/bce6b789/temp.522aebf7
Enter pass phrase for /home/<username>/easy-rsa/pki/private/ca.key:

* Notice:

An updated CRL has been created.
CRL file: /home/<username>/easy-rsa/pki/crl.pem

Kopiere diese Datei auf den OpenVPN-Server.

$ scp ~/easy-rsa/pki/crl.pem username@your_server_ip:/tmp

Melde dich wieder am OpenVPN-Server an und kopiere die CRL-Datei in das Verzeichnis /etc/openvpn/server.

$ sudo cp /tmp/crl.pem /etc/openvpn/server/

Öffne die OpenVPN-Serverkonfigurationsdatei zur Bearbeitung.

$ sudo nano /etc/openvpn/server/server.conf

Füge die folgende Zeile am Ende der Datei hinzu. Sie weist den OpenVPN-Server an, die Sperrliste auf Clients zu überprüfen, die gesperrt wurden.

crl-verify crl.pem

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den OpenVPN-Server neu, um die Änderungen zu übernehmen.

sudo systemctl restart openvpn-server@server.service

Der Client kann sich nicht mehr mit dem OpenVPN-Server verbinden.

Fazit

Damit ist unsere Anleitung zur Installation und Konfiguration des OpenVPN-Servers auf einem Debian 12-Server abgeschlossen. Wir haben auch den OpenVPN-Linux-Client mit dem Server verbunden. Wenn du Fragen hast, schreibe sie unten in die Kommentare.

Das könnte dich auch interessieren …