One place for hosting & domains

      Konfigurieren

      Einrichten und Konfigurieren einer Zertifizierungsstelle (CA) unter Ubuntu 20.04


      Einführung

      Eine Zertifizierungsstelle (Certificate Authority, CA) ist eine Stelle, die für die Ausstellung digitaler Zertifikate zur Überprüfung von Identitäten im Internet verantwortlich ist. Obwohl öffentliche CAs eine beliebte Wahl für die Überprüfung der Identität von Websites und anderen Diensten sind, die der allgemeinen Öffentlichkeit zur Verfügung gestellt werden, werden private CAs normalerweise für geschlossene Gruppen und private Dienste verwendet.

      Die Erstellung einer privaten Zertifizierungsstelle ermöglicht es Ihnen, Programme zu konfigurieren, zu testen und auszuführen, die verschlüsselte Verbindungen zwischen einem Client und einem Server erfordern. Mit einer privaten CA können Sie Zertifikate für Benutzer, Server oder einzelne Programme und Dienste innerhalb Ihrer Infrastruktur ausstellen.

      Einige Beispiele für Programme unter Linux, die ihre eigene private CA verwenden, sind OpenVPN und Puppet. Sie können Ihren Webserver auch so konfigurieren, dass er Zertifikate verwendet, die von einer privaten CA ausgestellt wurden, um Entwicklungs- und Staging-Umgebungen an Produktionsserver anzupassen, die TLS zur Verschlüsselung von Verbindungen verwenden.

      In diesem Leitfaden lernen wir, wie eine private Zertifizierungsstelle auf einem Ubuntu 20.04-Server eingerichtet und wie mit Ihrer neuen CA ein Testzertifikat erzeugt und signiert wird. Außerdem erfahren Sie, wie Sie das öffentliche Zertifikat des CA-Servers in den Zertifikatsspeicher Ihres Betriebssystems importieren, damit Sie die Vertrauenskette zwischen der CA und entfernten Servern oder Benutzern überprüfen können. Schließlich werden Sie lernen, wie Sie Zertifikate widerrufen und eine Zertifikatswiderrufsliste verteilen, um sicherzustellen, dass nur autorisierte Benutzer und Systeme Dienste nutzen können, die auf Ihrer CA beruhen.

      Voraussetzungen

      Um dieses Tutorial zu absolvieren, benötigen Sie Zugriff auf einen Ubuntu 20.04-Server, der Ihren CA-Server hosten kann. Sie müssen einen non-root user mit sudo-Rechten konfigurieren, bevor Sie diesen Leitfaden starten können. Sie können unseren Leitfaden zur Ersteinrichtung des Servers mit Ubuntu 20.04 befolgen, um einen Benutzer mit entsprechenden Berechtigungen einzurichten. Das verknüpfte Tutorial richtet auch eine Firewall ein, und in diesem Leitfaden wird davon ausgegangen, dass sie vorhanden ist.

      Dieser Server wird in diesem Tutorial als CA-Server bezeichnet.

      Stellen Sie sicher, dass der CA-Server ein eigenständiges System ist. Er wird nur zum Importieren, Signieren und Widerrufen von Zertifikatanforderungen verwendet. Auf ihm sollten keine anderen Dienste ausgeführt werden, und idealerweise ist er offline oder wird vollständig heruntergefahren, wenn Sie nicht aktiv mit Ihrer CA arbeiten.

      Anmerkung: Der letzte Abschnitt dieses Tutorials ist optional, wenn Sie über das Signieren und Widerrufen von Zertifikaten lernen möchten. Wenn Sie sich entscheiden, diese Übungsschritte durchzuführen, benötigen Sie einen zweiten Ubuntu 20.04-Server, oder Sie können Ihren eigenen lokalen Linux-Computer verwenden, auf dem Ubuntu oder Debian oder davon abgeleitete Distributionen ausgeführt werden.

      Schritt 1 — Installieren von Easy-RSA

      Die erste Aufgabe in diesem Tutorial besteht darin, den Skriptsatz easy-rsa auf Ihrem CA-Server zu installieren. easy-rsa ist ein Verwaltungswerkzeug für Zertifizierungsstellen, mit dem Sie einen privaten Schlüssel und ein öffentliches Stammzertifikat erzeugen, die Sie dann zum Signieren von Anfragen von Clients und Servern verwenden, die auf Ihre CA angewiesen sind.

      Melden Sie sich bei Ihrem CA-Server als der non-root sudo user an, den Sie während der anfänglichen Einrichtungsschritte erstellt haben, und führen Sie Folgendes aus:

      • sudo apt update
      • sudo apt install easy-rsa

      Sie werden aufgefordert, das Paket herunterzuladen und zu installieren. Drücken Sie y, um zu bestätigen, dass Sie das Paket installieren möchten.

      An dieser Stelle haben Sie alles Nötige eingerichtet und sind bereit, Easy-RSA zu verwenden. Im nächsten Schritt werden Sie eine Public-Key-Infrastruktur erstellen und dann mit dem Erstellen Ihrer Zertifizierungsstelle beginnen.

      Schritt 2 – Vorbereiten eines Public-Key-Infrastrukturverzeichnisses

      Nachdem Sie nun easy-rsa installiert haben, ist es an der Zeit, eine grundlegende Public-Key-Infrastruktur (PKI) auf dem CA-Server zu erstellen. Stellen Sie sicher, dass Sie immer noch als non-root user angemeldet sind und erstellen Sie ein easy-rsa-Verzeichnis. Stellen Sie sicher, dass Sie sudo nicht verwenden, um einen der folgenden Befehle auszuführen, da Ihr normaler Benutzer die CA ohne erhöhte Berechtigungen verwalten und mit ihr interagieren sollte.

      Dadurch wird ein neues Verzeichnis namens easy-rsa in Ihrem Home-Ordner erstellt. Wir werden dieses Verzeichnis verwenden, um symbolische Links zu erstellen, die auf die easy-rsa-Paketdateien verweisen, die wir im vorigen Schritt installiert haben. Diese Dateien befinden sich im Ordner /usr/share/easy-rsa/ auf dem CA-Server.

      Erstellen Sie die Symlinks mit dem Befehl ln:

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

      Anmerkung: Während andere Leitfäden Sie möglicherweise anweisen, die Dateien des easy-rsa-Pakets in Ihr PKI-Verzeichnis zu kopieren, verfolgt dieses Tutorial einen Symlink-Ansatz. Infolgedessen werden alle Aktualisierungen des easy-rsa-Pakets automatisch in den Skripten Ihrer PKI wiedergegeben.

      Um den Zugriff auf Ihr neues PKI-Verzeichnis einzuschränken, stellen Sie sicher, dass nur der Eigentümer mit dem Befehl chmod darauf zugreifen kann:

      • chmod 700 /home/sammy/easy-rsa

      Anschließend initialisieren Sie die PKI innerhalb des easy-rsa-Verzeichnisses:

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

      Output

      init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/sammy/easy-rsa/pki

      Nachdem Sie diesen Abschnitt abgeschlossen haben, haben Sie ein Verzeichnis, das alle Dateien enthält, die zur Erstellung einer Zertifizierungsstelle benötigt werden. Im nächsten Abschnitt werden Sie den privaten Schlüssel und das öffentliche Zertifikat für Ihre CA erstellen.

      Schritt 3 – Erstellen einer Zertifizierungsstelle

      Bevor Sie den privaten Schlüssel und das Zertifikat Ihrer CA erstellen können, müssen Sie eine Datei namens vars erstellen und mit einigen Standardwerten füllen. Zuerst werden Sie cd in das Verzeichnis easy-rsa, dann werden Sie die Datei vars mit nano oder Ihrem bevorzugten Texteditor erstellen und bearbeiten:

      Sobald die Datei geöffnet ist, fügen Sie die folgenden Zeilen ein und bearbeiten Sie jeden hervorgehobenen Wert so, dass er Ihre eigenen Organisationsinformationen widerspiegelt. Wichtig dabei ist, dass Sie keinen der Werte leer lassen:

      ~/easy-rsa/vars

      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 "DigitalOcean" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "Community" set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"

      Wenn Sie dies abgeschlossen haben, speichern und schließen Sie die Datei. Wenn Sie nano verwenden, können Sie dies durch Drücken von STRG+X, dann Y und ENTER zur Bestätigung tun. Sie sind nun bereit, Ihre CA zu erstellen.

      Um das öffentliche und private Stammschlüsselpaar für Ihre Zertifizierungsstelle zu erstellen, führen Sie den Befehl ./easy-rsa erneut aus, diesmal mit der Option build-ca:

      In der Ausgabe sehen Sie einige Zeilen über die OpenSSL-Version und werden dazu aufgefordert, eine Passphrase für Ihr Schlüsselpaar einzugeben. Achten Sie darauf, eine starke Passphrase zu wählen, und notieren Sie sie an einem sicheren Ort. Sie müssen die Passphrase jedes Mal eingeben, wenn Sie mit Ihrer CA interagieren müssen, zum Beispiel zum Signieren oder Widerrufen eines Zertifikats.

      Sie werden auch gebeten, den Common Name (CN) für Ihre CA zu bestätigen. Der CN ist der Name, der verwendet wird, um im Kontext der Zertifizierungsstelle auf diesen Computer zu verweisen. Sie können eine beliebige Zeichenfolge für den Common Name der CA eingeben, aber drücken Sie der Einfachheit halber ENTER, um den Standardnamen zu akzeptieren.

      Output

      . . . Enter New CA Key Passphrase: Re-Enter New CA Key Passphrase: . . . Common Name (eg: your user, host, or server name) [Easy-RSA CA]: CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /home/sammy/easy-rsa/pki/ca.crt

      Anmerkung: Wenn Sie nicht bei jeder Interaktion mit Ihrer CA zur Eingabe eines Passworts aufgefordert werden möchten, können Sie den Befehl build-ca mit der Option nopass wie folgt ausführen:

      • ./easyrsa build-ca nopass

      Sie haben nun zwei wichtige Dateien – ~/easy-rsa/pki/ca.crt und ~/easy-rsa/pki/private/ca.key – die die öffentlichen und privaten Komponenten einer Zertifizierungsstelle bilden.

      • ca.crt ist die öffentliche Zertifikatsdatei der CA. Benutzer, Server und Clients verwenden dieses Zertifikat, um zu überprüfen, ob sie Teil desselben vertrauenswürdigen Webs sind. Jeder Benutzer und Server, der Ihre CA verwendet, muss eine Kopie dieser Datei haben. Alle Parteien verlassen sich auf das öffentliche Zertifikat, um sicherzustellen, dass sich nicht jemand als System ausgibt und einen Man-in-the-middle-Angriff durchführt.

      • ca.key ist der private Schlüssel, den die CA zum Signieren von Zertifikaten für Server und Clients verwendet. Wenn ein Angreifer Zugriff auf Ihre CA und damit auf Ihre ca.key-Datei erhält, müssen Sie Ihre CA vernichten. Deshalb sollte sich Ihre Datei ca.key nur auf Ihrem CA-Computer befinden und Ihr CA-Computer im Idealfall als zusätzliche Sicherheitsmaßnahme offline bleiben, wenn keine Zertifikatanforderungen signiert werden.

      Damit ist Ihre CA vorhanden und bereit, zum Signieren von Zertifikatanforderungen und zum Widerrufen von Zertifikaten verwendet zu werden.

      Schritt 4 – Verteilen des öffentlichen Zertifikats Ihrer Zertifizierungsstelle

      Nun ist Ihre CA konfiguriert und bereit, als Vertrauensgrundlage für alle Systeme zu fungieren, die Sie für ihre Verwendung konfigurieren möchten. Sie können das Zertifikat der CA zu Ihren OpenVPN-Servern, Webservern, Mail-Servern usw. hinzufügen. Jeder Benutzer oder Server, der die Identität eines anderen Benutzers oder Servers in Ihrem Netzwerk überprüfen muss, sollte eine Kopie der Datei ca.crt haben, die in den Zertifikatsspeicher ihres Betriebssystems importiert ist.

      Um das öffentliche Zertifikat der CA in ein zweites Linux-System wie einen anderen Server oder einen lokalen Computer zu importieren, besorgen Sie sich zunächst eine Kopie der ca.crt-Datei von Ihrem CA-Server. Sie können den Befehl cat verwenden, um sie in einem Terminal auszugeben, und sie dann kopieren und in eine Datei auf dem zweiten Computer, der das Zertifikat importiert, einfügen. Sie können auch Tools wie scp, rsync verwenden, um die Datei zwischen Systemen zu übertragen. Wir werden in diesem Schritt jedoch Kopieren und Einfügen mit nano verwenden, da dies auf allen Systemen funktioniert.

      Führen Sie als non-root user auf dem CA-Server den folgenden Befehl aus:

      • cat ~/easy-rsa/pki/ca.crt

      Es wird eine Ausgabe in Ihrem Terminal geben, die der folgenden ähnelt:

      Output

      -----BEGIN CERTIFICATE----- MIIDSzCCAjOgAwIBAgIUcR9Crsv3FBEujrPZnZnU4nSb5TMwDQYJKoZIhvcNAQEL BQAwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjAwMzE4MDMxNjI2WhcNMzAw . . . . . . -----END CERTIFICATE-----

      Kopieren Sie alles, einschließlich der Zeilen -----BEGIN CERTIFICATE----- und -----END CERTIFICATE----- und der Bindestriche.

      Verwenden Sie auf Ihrem zweiten Linux-System nano oder Ihren bevorzugten Texteditor, um eine Datei namens /tmp/ca.crt zu öffnen:

      Fügen Sie den Inhalt, den Sie gerade vom CA-Server kopiert haben, in den Editor ein. Wenn Sie dies abgeschlossen haben, speichern und schließen Sie die Datei. Wenn Sie nano verwenden, können Sie dies durch Drücken von STRG+X, dann Y und ENTER zur Bestätigung tun.

      Nachdem Sie nun eine Kopie der Datei ca.crt auf Ihrem zweiten Linux-System haben, ist es an der Zeit, das Zertifikat in den Zertifikatsspeicher des Betriebssystems zu importieren.

      Führen Sie auf Ubuntu- und Debian-basierten Systemen die folgenden Befehle als Ihr non-root user aus, um das Zertifikat zu importieren:

      Ubuntu and Debian derived distributions

      • sudo cp /tmp/ca.crt /usr/local/share/ca-certificates/
      • sudo update-ca-certificates

      Um das Zertifikat des CA-Servers auf einem CentOS-, Fedora- oder RedHat-basierten System zu importieren, kopieren Sie den Inhalt der Datei und fügen Sie ihn wie im vorherigen Beispiel in das System in eine Datei namens /tmp/ca.crt ein. Kopieren Sie als Nächstes das Zertifikat nach /etc/pki/ca-trust/source/anchors/ und führen Sie dann den Befehl update-ca-trust aus.

      CentOS, Fedora, RedHat distributions

      • sudo cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/
      • sudo update-ca-trust

      Nun wird Ihr zweites Linux-System auf jedes Zertifikat vertrauen, das vom CA-Server signiert wurde.

      Anmerkung: Wenn Sie Ihre CA mit Web-Servern verwenden und Firefox als Browser verwenden, müssen Sie das öffentliche Zertifikat ca.crt direkt in Firefox importieren. Firefox verwendet nicht den Zertifikatsspeicher des lokalen Betriebssystems. Einzelheiten dazu, wie Sie das Zertifikat Ihrer CA in Firefox hinzufügen können, finden Sie in diesem Support-Artikel von Mozilla über das Einrichten von Zertifizierungsstellen (CAs) in Firefox.

      Wenn Sie Ihre CA zur Integration in eine Windows-Umgebung oder in Desktop-Computer verwenden, lesen Sie bitte die Dokumentation über die Verwendung von certutil.exe zur Installation eines CA-Zertifikats.

      Wenn Sie dieses Tutorial als Voraussetzung für ein anderes Tutorial verwenden oder mit dem Signieren und Widerrufen von Zertifikaten vertraut sind, können Sie hier aufhören. Wenn Sie mehr zum Thema Signieren und Widerrufen von Zertifikaten erfahren möchten, dann wird im folgenden optionalen Abschnitt jeder Vorgang im Detail erklärt.

      (Optional) – Erstellen von Zertifikatsignieranforderungen und Widerrufen von Zertifikaten

      Die folgenden Abschnitte des Tutorials sind optional. Wenn Sie alle vorherigen Schritte abgeschlossen haben, verfügen Sie über eine vollständig konfigurierte und funktionierende Zertifizierungsstelle, die Sie als Voraussetzung für andere Tutorials verwenden können. Sie können die Datei ca.crt Ihrer CA importieren und Zertifikate in Ihrem Netzwerk überprüfen, die von Ihrer CA signiert wurden.

      Wenn Sie üben und mehr über das Signieren von Zertifikatanforderungen und das Widerrufen von Zertifikaten erfahren möchten, dann werden diese optionalen Abschnitte erklären, wie beide Prozesse funktionieren.

      (Optional) – Erstellen und Signieren einer Übungs-Zertifikatanforderung

      Nachdem Sie nun eine einsatzbereite CA haben, können Sie das Erzeugen eines privaten Schlüssels und einer Zertifikatanforderung üben, um sich mit dem Signier- und Verteilungsprozess vertraut zu machen.

      Eine Zertifikatsignieranforderung (Certificate Signing Request, CSR) besteht aus drei Teilen: einem öffentlichen Schlüssel, dem Identifizieren von Informationen über das anfordernde System und einer Signatur der Anforderung selbst, die mit dem privaten Schlüssel der anfragenden Partei erstellt Request, Der private Schlüssel wird geheim gehalten und wird zum Verschlüsseln von Informationen verwendet, die jeder mit dem signierten öffentlichen Zertifikat dann entschlüsseln kann.

      Die folgenden Schritte werden auf Ihrem zweiten Ubuntu- oder Debian-System oder einer Distribution, die von einem dieser Systeme abgeleitet ist, ausgeführt. Es kann sich um einen anderen Remote-Server oder einen lokalen Linux-Rechner wie einen Laptop oder einen Desktop-Rechner handeln. Da easy-rsa nicht standardmäßig auf allen Systemen verfügbar ist, verwenden wir das Tool openssl zum Erstellen eines privaten Übungsschlüssels und -zertifikats.

      openssl ist normalerweise standardmäßig auf den meisten Linux-Distributionen installiert, aber um sicherzugehen, führen Sie die folgenden Schritte auf Ihrem System aus:

      • sudo apt update
      • sudo apt install openssl

      Wenn Sie zur Installation von openssl aufgefordert werden, geben Sie y ein, um mit den Installationsschritten fortzufahren. Nun sind Sie bereit, eine Übungs-CSR mit openssl zu erstellen.

      Der erste Schritt, den Sie zum Erstellen einer CSR ausführen müssen, ist die Erzeugung eines privaten Schlüssels. Um einen privaten Schlüssel mit openssl zu erstellen, erstellen Sie ein Verzeichnis practice-csr und erzeugen Sie darin einen Schlüssel. Wir werden diese Anfrage für einen fiktiven Server namens sammy-server stellen, im Gegensatz zur Erstellung eines Zertifikats, das zur Identifizierung eines Benutzers oder einer anderen CA verwendet wird.

      • mkdir ~/practice-csr
      • cd ~/practice-csr
      • openssl genrsa -out sammy-server.key

      Output

      Generating RSA private key, 2048 bit long modulus (2 primes) . . . . . . e is 65537 (0x010001)

      Da Sie nun über einen privaten Schlüssel verfügen, können Sie eine entsprechende CSR erstellen, wiederum mit dem Dienstprogramm openssl. Sie werden aufgefordert, eine Reihe von Feldern wie Land, Bundesland und Stadt auszufüllen. Wenn Sie ein Feld leer lassen möchten, können Sie einen . eingeben. Beachten Sie jedoch, dass es am besten ist, die richtigen Werte für Ihren Standort und Ihre Organisation zu verwenden, wenn es sich um eine reale CSR handelt:

      • openssl req -new -key sammy-server.key -out sammy-server.req

      Output

      . . . ----- Country Name (2 letter code) [XX]:US State or Province Name (full name) []:New York Locality Name (eg, city) [Default City]:New York City Organization Name (eg, company) [Default Company Ltd]:DigitalOcean Organizational Unit Name (eg, section) []:Community Common Name (eg, your name or your server's hostname) []:sammy-server Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:

      Wenn Sie diese Werte automatisch als Teil des openssl-Aufrufs statt über die interaktive Eingabeaufforderung hinzufügen möchten, können Sie das Argument -subj an OpenSSL übergeben. Achten Sie darauf, die hervorgehobenen Werte so zu bearbeiten, dass sie mit dem Standort, der Organisation und dem Servernamen für die Übung übereinstimmen:

      • openssl req -new -key sammy-server.key -out server.req -subj
      • /C=US/ST=New York/L=New York City/O=DigitalOcean/OU=Community/CN=sammy-server

      Zur Überprüfung des Inhalts einer CSR können Sie eine Anforderungsdatei mit openssl einlesen und die darin enthaltenen Felder untersuchen:

      • openssl req -in sammy-server.req -noout -subject

      Output

      subject=C = US, ST = New York, L = New York City, O = DigitalOcean, OU = Community, CN = sammy-server

      Wenn Sie mit dem Thema Ihrer Übungs-Zertifikatsanfrage zufrieden sind, kopieren Sie die Datei sammy-server.req mit scp auf Ihren CA-Server:

      • scp sammy-server.req sammy@your_ca_server_ip:/tmp/sammy-server.req

      In diesem Schritt haben Sie eine Zertifikatsignieranforderung für einen fiktiven Server namens sammy-server erzeugt. In einem realen Szenario könnte die Anfrage z. B. von einem Staging- oder Entwicklungs-Webserver kommen, der ein TLS-Zertifikat zum Testen benötigt; oder sie könnte von einem OpenVPN-Server kommen, der ein Zertifikat anfordert, damit sich Benutzer mit einem VPN verbinden können. Im nächsten Schritt fahren wir mit dem Signieren der Zertifikatsignieranforderung unter Verwendung des privaten Schlüssels des CA-Servers fort.

      (Optional) – Signieren einer CSR

      Im vorherigen Schritt haben Sie eine Übungs-Zertifikatanforderung und einen Übungsschlüssel für einen fiktiven Server erstellt. Sie kopierten sie in das Verzeichnis /tmp auf Ihrem CA-Server und emulierten damit das Verfahren, das Sie verwenden würden, wenn Sie echte Clients oder Server hätten, die Ihnen CSR-Anfragen senden würden, die signiert werden müssen.

      Um mit dem fiktiven Szenario fortzufahren, muss der CA-Server nun das Übungszertifikat importieren und signieren. Sobald eine Zertifikatanforderung von der CA validiert und an einen Server zurückgesendet wird, können Clients, die der Zertifizierungsstelle vertrauen, auch dem neu ausgestellten Zertifikat vertrauen.

      Da wir innerhalb der PKI der CA arbeiten werden, in der das Dienstprogramm easy-rsa verfügbar ist, werden die Signierungsschritte das Dienstprogramm easy-rsa verwenden. Dies vereinfacht die Dinge im Gegensatz zur direkten Verwendung von openssl, wie wir es im vorherigen Beispiel getan haben.

      Der erste Schritt zum Signieren der fiktiven CSR besteht darin, die Zertifikatanforderung mithilfe des Skripts easy-rsa zu importieren:

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

      Output

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

      Jetzt können Sie die Anfrage signieren, indem Sie das Skript easyrsa mit der Option sign-req ausführen, gefolgt vom Anfragetyp und dem Common Name, der in der CSR enthalten ist. Der Anfragetyp kann entweder Client, Server oder ca sein. Da wir mit einem Zertifikat für einen fiktiven Server üben, stellen Sie sicher, dass Sie den Anfragetyp Server verwenden:

      • ./easyrsa sign-req server sammy-server

      In der Ausgabe werden Sie zur Überprüfung aufgefordert, ob die Anfrage von einer vertrauenswürdigen Quelle stammt. Geben Sie yes ein, und drücken Sie dann zur Bestätigung ENTER:

      Output

      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 3650 days: subject= commonName = sammy-server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/sammy-server.crt

      Wenn Sie Ihren CA-Schlüssel verschlüsselt haben, werden Sie an dieser Stelle zur Eingabe Ihres Passworts aufgefordert.

      Nach Abschluss dieser Schritte haben Sie die CSR sammy-server.req mit dem privaten Schlüssel des CA-Servers in /home/sammy/easy-rsa/pki/private/ca.key signiert. Die resultierende Datei sammy-server.crt enthält den öffentlichen Verschlüsselungsschlüssel des Übungsservers sowie eine neue Signatur des CA-Servers. Der Sinn der Signatur besteht darin, jedem, der der CA vertraut, mitzuteilen, dass auch dem sammy-server-Zertifikat vertraut werden kann.

      Wenn es sich bei dieser Anfrage um einen echten Server wie einen Web- oder VPN-Server handelt, würde der letzte Schritt auf dem CA-Server darin bestehen, die neuen Dateien sammy-server.crt und ca.crt vom CA-Server an den Remote-Server zu verteilen, der die CSR-Anfrage gestellt hat:

      • scp pki/issued/sammy-server.crt sammy@your_server_ip:/tmp
      • scp pki/ca.crt sammy@your_server_ip:/tmp

      Zu diesem Zeitpunkt könnten Sie das ausgestellte Zertifikat mit beispielsweise einem Webserver, einem VPN, einem Konfigurationsmanagement-Tool, einem Datenbanksystem oder für die Client-Authentifizierung verwenden.

      (Optional) – Widerrufen eines Zertifikats

      Gelegentlich kann es erforderlich sein, ein Zertifikat zu widerrufen, um zu verhindern, dass ein Benutzer oder Server es verwendet. Vielleicht wurde ein Laptop gestohlen, ein Webserver kompromittiert, oder ein Mitarbeiter oder ein Auftragnehmer hat Ihr Unternehmen verlassen.

      Zum Widerrufen eines Zertifikats folgt der allgemeine Vorgang diesen Schritten:

      1. Widerrufen Sie das Zertifikat mit dem Befehl ./easyrsa revoke client_name.
      2. Erzeugen Sie eine neue CRL mit dem Befehl ./easyrsa gen-crl.
      3. Übertragen Sie die aktualisierte Datei crl.pem auf den oder die Server, die sich auf Ihre CA verlassen, und kopieren Sie sie auf diesen Systemen in das oder die erforderlichen Verzeichnisse für Programme, die auf sie verweisen.
      4. Starten Sie alle Dienste, die Ihre CA und die CRL-Datei verwenden, neu.

      Mit diesem Vorgang können Sie alle Zertifikate, die Sie zuvor ausgestellt haben, jederzeit widerrufen. In den folgenden Abschnitten gehen wir jeden Schritt im Detail durch, beginnend mit dem Befehl revoke.

      Widerrufen eines Zertifikats

      Um ein Zertifikat zu widerrufen, navigieren Sie zum Verzeichnis easy-rsa auf Ihrem CA-Server:

      Führen Sie als Nächstes das Skript easyrsa mit der Option revoke aus, gefolgt von dem Client-Namen, den Sie widerrufen möchten. Dem obigen Übungsbeispiel folgend lautet der Common Name des Zertifikats sammy-server:

      • ./easyrsa revoke sammy-server

      Sie werden dazu aufgefordert, das Sperren durch Eingabe von yes zu bestätigen:

      Output

      Please confirm you wish to revoke the certificate with the following subject: subject= commonName = sammy-server Type the word 'yes' to continue, or any other input to abort. Continue with revocation: yes . . . Revoking Certificate 8348B3F146A765581946040D5C4D590A . . .

      Beachten Sie den hervorgehobenen Wert in der Zeile Revoking Certificate. Dieser Wert ist die eindeutige Seriennummer des Zertifikats, das widerrufen wird. Sie benötigen diesen Wert, wenn Sie die Widerrufsliste im letzten Schritt dieses Abschnitts prüfen möchten, um zu verifizieren, dass das Zertifikat darin enthalten ist.

      Nach der Bestätigung der Aktion wird die CA das Zertifikat widerrufen. Entfernte Systeme, die sich auf die CA verlassen, haben jedoch keine Möglichkeit zur Überprüfung, ob Zertifikate widerrufen wurden. Benutzer und Server können das Zertifikat weiterhin verwenden, bis die Zertifikatswiderrufsliste (Certificate Revocation List, CRL) der CA an alle Systeme verteilt wird, die sich auf die CA verlassen.

      Im nächsten Schritt erzeugen Sie eine CRL oder aktualisieren eine bestehende crl.pem-Datei.

      Erzeugen einer Zertifikatswiderrufsliste

      Nachdem Sie ein Zertifikat widerrufen haben, ist es jetzt wichtig, die Liste der widerrufenen Zertifikate auf Ihrem CA-Server zu aktualisieren. Sobald Sie über eine aktualisierte Widerrufsliste verfügen, können Sie feststellen, welche Benutzer und Systeme in Ihrer CA über gültige Zertifikate verfügen. Sobald Sie über eine aktualisierte Widerrufsliste verfügen, können Sie sagen, welche Benutzer und Systeme in Ihrer CA über gültige Zertifikate verfügen.

      Um eine CRL zu erzeugen, führen Sie den Befehl easy-rsa mit der Option gen-crl aus, während Sie sich noch im Verzeichnis ~/easy-rsa befinden:

      Wenn Sie bei der Erstellung Ihrer Datei ca.key eine Passphrase verwendet haben, werden Sie aufgefordert, diese einzugeben. Der Befehl gen-crl erzeugt eine Datei namens crl.pem, die die aktualisierte Liste der widerrufenen Zertifikate für diese CA enthält.

      Als Nächstes müssen Sie jedes Mal, wenn Sie den Befehl gen-crl ausführen, die aktualisierte Datei crl.pem an alle Server und Clients übertragen, die auf diese CA angewiesen sind. Andernfalls können die Clients und Systeme weiterhin auf Dienste und Systeme zugreifen, die Ihre CA verwenden, da diese Dienste über den widerrufenen Status des Zertifikats informiert sein müssen.

      Übertragen einer Zertifikatswiderrufsliste

      Nachdem Sie nun eine CRL auf Ihrem CA-Server erzeugt haben, müssen Sie sie an Remote-Systeme übertragen, die sich auf Ihre CA verlassen. Um diese Datei auf Ihre Server zu übertragen, können Sie den Befehl scp verwenden.

      Anmerkung: In diesem Tutorial wird erklärt, wie eine CRL manuell erzeugt und verteilt wird. Es gibt zwar robustere und automatisierte Methoden zur Verteilung und Überprüfung von Widerrufslisten wie OCSP-Stapling, aber die Konfiguration dieser Methoden sprengt den Rahmen dieses Artikels.

      Stellen Sie sicher, dass Sie bei Ihrem CA-Server als non-root user angemeldet sind, und führen Sie die folgenden Schritte aus, wobei Sie an Stelle von your_server_ip Ihre eigene Server-IP oder Ihren eigenen DNS-Namen eingeben:

      • scp ~/easy-rsa/pki/crl.pem sammy@your_server_ip:/tmp

      Da sich die Datei nun auf dem Remote-System befindet, besteht der letzte Schritt darin, alle Dienste mit der neuen Kopie der Widerrufsliste zu aktualisieren.

      Aktualisierung von Diensten, die eine CRL unterstützen

      Die Liste der Schritte, die Sie zur Aktualisierung von Diensten verwenden müssen, die die Datei crl.pem verwenden, geht über den Umfang dieses Tutorials hinaus. Im Allgemeinen müssen Sie die Datei crl.pem an den Speicherort kopieren, den der Dienst erwartet, und sie dann mit systemctl neu starten.

      Sobald Sie Ihre Dienste mit der neuen crl.pem-Datei aktualisiert haben, sind Ihre Dienste in der Lage, Verbindungen von Clients oder Servern abzulehnen, die ein widerrufenes Zertifikat verwenden.

      Überprüfen und Verifizieren der Inhalte einer CRL

      Wenn Sie eine CRL-Datei überprüfen möchten, z. B. um eine Liste widerrufener Zertifikate zu bestätigen, verwenden Sie den folgenden openssl-Befehl aus Ihrem easy-rsa-Verzeichnis auf Ihrem CA-Server:

      • cd ~/easy-rsa
      • openssl crl -in pki/crl.pem -noout -text

      Sie können diesen Befehl auch auf jedem Server oder System ausführen, auf dem das openssl-Tool mit einer Kopie der Datei crl.pem installiert ist. Wenn Sie beispielsweise die Datei crl.pem auf Ihr zweites System übertragen haben und überprüfen möchten, ob das Zertifikat sammy-server widerrufen wurde, können Sie einen openssl-Befehl wie den folgenden verwenden, wobei Sie die Seriennummer, die Sie zuvor beim Widerruf des Zertifikats notiert haben, an Stelle der hier markierten verwenden:

      • openssl crl -in /tmp/crl.pem -noout -text |grep -A 1 8348B3F146A765581946040D5C4D590A

      Output

      Serial Number: 8348B3F146A765581946040D5C4D590A Revocation Date: Apr 1 20:48:02 2020 GMT

      Beachten Sie, wie der Befehl grep verwendet wird, um die eindeutige Seriennummer zu überprüfen, die Sie im Widerrufsschritt notiert haben. Jetzt können Sie den Inhalt Ihrer Zertifikatswiderrufsliste auf jedem System überprüfen, das darauf angewiesen ist, den Zugriff auf Benutzer und Dienste einzuschränken.

      Zusammenfassung

      In diesem Tutorial haben Sie eine private Zertifizierungsstelle mit dem Easy-RSA-Paket auf einem eigenständigen Ubuntu 20.04-Server erstellt. Sie haben gelernt, wie das Vertrauensmodell zwischen Parteien funktioniert, die sich auf die CA verlassen. Sie haben auch eine Zertifikatsignieranforderung (Certificate Signing Request, CSR) für einen Übungsserver erstellt und signiert und dann gelernt, wie man ein Zertifikat widerruft. Abschließend haben Sie erfahren, wie Sie eine Zertifikatwiderrufsliste (Certificate Revocation List, CRL) für jedes System erstellen und verteilen, das auf Ihre CA angewiesen ist, um sicherzustellen, dass Benutzer oder Server, die nicht auf Dienste zugreifen sollen, daran gehindert werden.

      Jetzt können Sie Zertifikate für Benutzer ausgeben und sie mit Diensten wie OpenVPN verwenden. Sie können Ihre CA auch verwenden, um Entwicklungs- und Staging-Webserver mit Zertifikaten zu konfigurieren, um Ihre Nicht-Produktionsumgebungen zu sichern. Die Verwendung einer CA mit TLS-Zertifikaten während der Entwicklung kann dazu beitragen, sicherzustellen, dass Ihr Code und Ihre Umgebungen so gut wie möglich zu Ihrer Produktionsumgebung passen.

      Wenn Sie mehr über die Verwendung von OpenSSL erfahren möchten, bietet unser Tutorial OpenSSL-Grundlagen: Arbeiten mit SSL-Zertifikaten, privaten Schlüsseln und CSRs viele zusätzliche Informationen, die Ihnen helfen, sich mit den OpenSSL-Grundlagen vertraut zu machen.



      Source link

      Einrichten und Konfigurieren eines OpenVPN-Servers unter CentOS 8


      Einführung

      Mit einem Virtual Private Network (VPN) können Sie nicht vertrauenswürdige Netzwerke wie in einem privaten Netzwerk durchlaufen. Es bietet Ihnen die Möglichkeit, mit Ihrem Smartphone oder Laptop sicher auf das Internet zuzugreifen, wenn Sie mit einem nicht vertrauenswürdigen Netzwerk, wie dem WLAN in einem Hotel oder Café, verbunden sind.

      In Kombination mit HTTPS-Verbindungen können Sie mit diesem Setup Ihre WLAN-Logins und Transaktionen sichern. Sie können geografische Beschränkungen und Zensuren umgehen und Ihren Ort und jeglichen unverschlüsselten HTTP-Verkehr vom nicht vertrauenswürdigen Netzwerken abschirmen.

      OpenVPN ist eine umfassende Open-Source-VPN-Lösung für Transport Layer Security (TLS), die eine Vielzahl von Konfigurationen bietet. In diesem Tutorial richten Sie OpenVPN auf einem CentOS 8-Server ein und konfigurieren es anschließend so, dass von einem Client-Computer aus darauf zugegriffen werden kann.

      Anmerkung: Wenn Sie planen, einen OpenVPN-Server auf einem DigitalOcean-Droplet einzurichten, sollten Sie sich bewusst sein, dass wir, wie viele Hosting-Anbieter, Zusatzgebühren für das Überschreiten des Bandbreitenlimits verlangen können. Bedenken Sie aus diesem Grund, wie viel Datenverkehr Ihr Server verarbeiten kann.

      Siehe diese Seite für weitere Informationen.

      Voraussetzungen

      Um dieser Anleitung zu folgen, benötigen Sie:

      Anmerkung: Obwohl es technisch möglich ist, Ihren OpenVPN-Server oder Ihren lokalen Computer als Ihre CA zu verwenden, wird dies nicht empfohlen, da es Ihr VPN für einige Sicherheitslücken empfänglich macht. Gemäß der offiziellen OpenVPN-Dokumentation sollten Sie Ihre CA auf einem eigenständigen Computer ablegen, der für das Importieren und Signieren von Zertifikatsanforderungen bestimmt ist. Aus diesem Grund wird in diesem Leitfaden davon ausgegangen, dass sich Ihre CA auf einem separaten CentOS 8-Server befindet, der auch einen non-root user mit sudo-Berechtigungen und eine einfache Firewall aufweist.

      Zusätzlich benötigen Sie einen Client-Computer, den Sie für die Verbindung mit Ihrem OpenVPN-Server verwenden. In diesem Leitfaden nennen wir ihn OpenVPN-Client. Für die Zwecke dieses Tutorials wird empfohlen, dass Sie Ihren lokalen Computer als OpenVPN-Client verwenden.

      Wenn diese Voraussetzungen erfüllt sind, können Sie mit der Einrichtung und Konfiguration eines OpenVPN-Servers unter CentOS 8 beginnen.

      Anmerkung: Bitte beachten Sie, dass Sie später in diesem Leitfaden beim Übertragen von Dateien zwischen den Servern Schwierigkeiten haben könnten, wenn Sie beim Konfigurieren der Server die Passwort-Authentifizierung deaktivieren. Um dieses Problem zu lösen, könnten Sie auf jedem Server die Passwort-Authentifizierung neu aktivieren. Alternativ könnten Sie für jeden Server ein SSH-Schlüsselpaar erstellen, dann den öffentlichen SSH-Schlüssel des OpenVPN-Servers zur Datei authorized_keys des CA-Computers hinzufügen und umgekehrt. Anweisungen zur Ausführung dieser Lösungen finden Sie unter Einrichten von SSH-Schlüsseln unter CentOS 8.

      Schritt 1 — Installieren von OpenVPN und Easy-RSA

      Der erste Schritt in diesem Tutorial ist das Installieren von OpenVPN und Easy-RSA. Easy-RSA ist ein Verwaltungs-Tool mit öffentlicher Schlüsselinfrastruktur (PKI), das Sie auf dem OpenVPN-Server zum Erzeugen einer Zertifikatsanforderung verwenden, die Sie dann auf dem CA-Server verifizieren und signieren.

      Jedoch sind OpenVPN und Easy-RSA in CentOS 8 nicht standardmäßig verfügbar, daher müssen Sie das Repository „Extra Packages for Enterprise Linux“ (EPEL) aktivieren. EPEL wird vom Fedora-Projekt verwaltet und enthält nicht-standardmäßige, aber beliebte Pakete für Fedora, CentOS und andere Linux-Distributionen, die das RPM-Paketformat verwenden. Melden Sie sich bei Ihrem OpenVPN-Server als der non-root sudo user an, den Sie während der anfänglichen Einrichtungsschritte erstellt haben, und führen Sie Folgendes aus:

      • sudo dnf install epel-release
      • sudo dnf install openvpn easy-rsa

      Als Nächstes müssen Sie ein neues Verzeichnis auf dem OpenVPN-Server als non-root user namens ~/easy-rsa erstellen:

      Jetzt müssen Sie einen Symlink aus dem easyrsa-Skript erstellen, den das Paket in das gerade von Ihnen erstellte Verzeichnis ~/easy-rsa installiert hat:

      • ln -s /usr/share/easy-rsa/3/* ~/easy-rsa/

      Anmerkung: Während andere Leitfäden Sie möglicherweise anweisen, die Dateien des easy-rsa-Pakets in Ihr PKI-Verzeichnis zu kopieren, verfolgt dieses Tutorial einen Symlink-Ansatz. Infolgedessen werden alle Aktualisierungen des easy-rsa-Pakets automatisch in den Skripten Ihrer PKI wiedergegeben.

      Stellen Sie abschließend sicher, dass der Eigentümer des Verzeichnisses Ihr non-root sudo user ist und schränken Sie mit chmod den Zugriff für diesen Benutzer ein:

      • sudo chown sammy ~/easy-rsa
      • chmod 700 ~/easy-rsa

      Sobald diese Programme installiert sind und an die richtigen Orte auf Ihrem System verschoben wurden, besteht der nächste Schritt darin, eine öffentliche Schlüsselinfrastruktur (PKI) auf dem OpenVPN-Server zu erstellen, damit Sie TLS-Zertifikate für Clients und andere Server, die sich mit Ihrem VPN verbinden werden, anfordern und verwalten können.

      Schritt 2 — Erstellen einer PKI für OpenVPN

      Bevor Sie den privaten Schlüssel und das Zertifikat Ihres OpenVPN-Servers erstellen können, müssen Sie ein lokales Verzeichnis der öffentlichen Schlüsselinfrastruktur auf Ihrem OpenVPN-Server erstellen. Sie verwenden dieses Verzeichnis, um die Zertifikatsanforderungen des Servers und der Clients zu verwalten, anstatt sie direkt auf Ihrem CA-Server zu erstellen.

      Um ein PKI-Verzeichnis auf Ihrem OpenVPN-Server zu erstellen, müssen Sie eine Datei namens vars mit einigen Standardwerten füllen. Zuerst wechseln Sie mit cd in das Verzeichnis easy-rsa, dann erstellen und bearbeiten Sie die Datei vars mit nano oder Ihrem bevorzugten Texteditor.

      Der in CentOS 8 integrierte Standard-Texteditor vi.vi ist ein extrem leistungsfähiger Texteditor, kann jedoch für Nutzer, die wenig Erfahrung mit ihm haben, etwas komplex sein. Sie können bei Bedarf einen benutzerfreundlicheren Editor wie nano installieren, um die Bearbeitung von Konfigurationsdateien auf Ihrem CentOS 8 Server zu erleichtern:

      Wenn Sie zur Installation von nano aufgefordert werden, geben Sie y ein, um mit den Installationsschritten fortzufahren. Nun sind Sie bereit, die Datei vars zu bearbeiten:

      Sobald die Datei geöffnet ist, fügen Sie die folgenden beiden Zeilen ein:

      ~/easy-rsa/vars

      set_var EASYRSA_ALGO "ec"
      set_var EASYRSA_DIGEST "sha512"
      

      Diese Zeilen stellen sicher, dass Ihre privaten Schlüssel und Zertifikatsanforderungen so konfiguriert sind, dass sie moderne Elliptische-Kurven-Kryptografie (ECC) nutzen, um Schlüssel und sichere Signaturen für Ihre Clients und OpenVPN-Server zu erzeugen.

      Wenn Sie Ihre OpenVPN- und CA-Server für die Verwendung der ECC konfigurieren, können Client und Server beim Versuch, einen gemeinsamen symmetrischen Schlüssel zu erstellen, Algorithmen für elliptische Kurven für den Austausch verwenden. Die Verwendung von ECC für einen Schlüsselaustausch ist wesentlich schneller als die Verwendung von einfachem Diffie-Hellman mit dem klassischen RSA-Algorithmus, da die Zahlen viel kleiner und die Berechnungen schneller sind.

      Hintergrund: Wenn Clients sich mit OpenVPN verbinden, verwenden sie asymmetrische Verschlüsselung (auch bekannt als öffentlicher/privater Schlüssel), um einen TLS-Handshake auszuführen. Wenn der Server und Clients jedoch verschlüsselten VPN-Verkehr übertragen, verwenden sie symmetrische Verschlüsselung, die auch als Shared-Key-Verschlüsselung bekannt ist.

      Im Vergleich zu asymmetrischer Verschlüsselung ist der Rechenaufwand bei symmetrischer Verschlüsselung viel geringer: Die verwendeten Zahlen sind wesentlich kleiner und moderne CPUs integrieren Anweisungen für die Ausführung optimierter symmetrischer Verschlüsselungsoperationen. Für den Wechsel von asymmetrischer zu symmetrischer Verschlüsselung verwenden der OpenVPN-Server und der Client den Algorithmus Elliptic Curve Diffie-Hellman (ECDH), um so schnell wie möglich einen geteilten geheimen Schlüssel zu akzeptieren.

      Sobald Sie die vars-Datei gefüllt haben, können Sie mit der Erstellung des PKI-Verzeichnisses fortfahren. Führen Sie dazu das Skript easyrsa mit der Option init-pki aus. Obwohl Sie diesen Befehl als Teil der Voraussetzungen bereits auf dem CA-Server ausgeführt haben, ist es notwendig, diesen auch hier auszuführen, da Ihr OpenVPN-Server und der CA-Server separate PKI-Verzeichnisse haben:

      Beachten Sie, dass auf Ihrem OpenVPN-Server keine Zertifizierungsstelle erstellt werden muss. Ausschließlich Ihr CA-Server ist für die Validierung und Signierung von Zertifikaten zuständig. Die PKI auf Ihrem VPN-Server dient nur als praktischer und zentralisierter Ort zum Speichern von Zertifikatsanforderungen und öffentlichen Zertifikaten.

      Nachdem Sie Ihre PKI auf dem OpenVPN-Server initialisiert haben, können Sie zum nächsten Schritt, dem Erstellen einer OpenVPN-Server-Zertifikatsanforderung und eines privaten Schlüssels, übergehen.

      Schritt 3 — Erstellen einer OpenVPN-Server-Zertifikatsanforderung und eines privaten Schlüssels

      Nachdem Ihr OpenVPN-Server nun alle Voraussetzungsmerkmale installiert hat, besteht der nächste Schritt darin, auf Ihrem OpenVPN-Server einen privaten Schlüssel und eine Zertifikatsignierungsanforderung (CSR) zu erstellen. Danach übertragen Sie die Anforderung zum Signieren an Ihre CA, sodass das erforderliche Zertifikat erstellt wird. Sobald Sie ein signiertes Zertifikat haben, übertragen Sie es zurück zum OpenVPN-Server und installieren es für die Nutzung durch den Server.

      Navigieren Sie zunächst als Ihr non-root user zum ~/easy-rsa-Verzeichnis auf Ihrem OpenVPN-Server:

      Nun rufen Sie das easyrsa mit der Option gen-req auf, gefolgt von einem geläufigen Namen, dem Common Name (CN,) für den Computer. Sie können den CN frei auswählen, aber es kann hilfreich sein, eine aussagekräftige Bezeichnung zu wählen. In diesem Tutorial ist der CN des OpenVPN-Servers server. Achten Sie darauf, auch die Option nopass einzubeziehen. Wenn das nicht geschieht, wird die Anforderungsdatei passwortgeschützt, was später zu Berechtigungsproblemen führen könnte.

      Anmerkung: Wenn Sie hier einen anderen Namen als server wählen, müssen Sie einige der nachstehenden Anweisungen anpassen. Wenn Sie beispielsweise die erzeugten Dateien in das Verzeichnis /etc/openvpn kopieren, müssen Sie die richtigen Namen einfügen. Sie müssen auch später die Datei /etc/openvpn/server.conf ändern, um auf die richtigen .crt– und .key-Dateien zu verweisen.

      • ./easyrsa gen-req server nopass

      Output

      Common Name (eg: your user, host, or server name) [server]: Keypair and certificate request completed. Your files are: req: /home/sammy/easy-rsa/pki/reqs/server.req key: /home/sammy/easy-rsa/pki/private/server.key

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

      • sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/

      Nach dem Ausführen dieser Schritte haben Sie erfolgreich einen privaten Schlüssel für Ihren OpenVPN-Server erstellt. Sie haben auch eine Zertifikatsignierungsanforderung für den OpenVPN-Server generiert. Die CSR ist nun zur Signierung durch Ihre CA bereit. Im nächsten Abschnitt dieses Tutorials lernen Sie, wie eine CSR mit dem privaten Schlüssel Ihres CA-Servers signiert wird.

      Schritt 4 — Signieren der Zertifikatsanforderung des OpenVPN-Servers

      Im vorherigen Schritt haben Sie eine Zertifikatsignierungsanforderung (CSR) und einen privaten Schlüssel für den OpenVPN-Server erstellt. Nun muss der CA-Server von dem server-Zertifikat erfahren und es validieren. Sobald die CA das Zertifikat validiert und an den OpenVPN-Server zurückleitet, können Clients, die Ihrer CA vertrauen, auch dem OpenVPN-Server vertrauen.

      Verwenden Sie als non-root user SCP oder eine andere Übertragungsmethode auf dem OpenVPN-Server, um die Zertifikatsanforderung server.req zur Signierung an den CA-Server zu kopieren:

      • scp /home/sammy/easy-rsa/pki/reqs/server.req sammy@your_ca_server_ip:/tmp

      Melden Sie sich jetzt beim CA-Server als non-root user an, dem das easy-rsa-Verzeichnis gehört, in dem Sie Ihre PKI erstellt haben. Importieren Sie die Zertifikatsanforderung mit dem easyrsa-Skript:

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

      Output

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

      Signieren Sie die Anforderung, indem Sie das easyrsa-Skript mit der Option sign-req ausführen, gefolgt vom Anforderungstyp und dem geläufigen Namen. Der Anforderungstyp kann entweder client oder server sein. Da wir mit der Zertifikatsanforderung des OpenVPN-Servers arbeiten, muss der Anforderungstyp server verwendet werden:

      • ./easyrsa sign-req server server

      In der Ausgabe werden Sie zur Überprüfung aufgefordert, ob die Anfrage von einer vertrauenswürdigen Quelle stammt. Geben Sie yes ein und drücken Sie ENTER zur Bestätigung:

      Output

      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 3650 days: subject= commonName = server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt

      Beachten Sie, dass Sie an dieser Stelle zur Eingabe Ihres Passworts aufgefordert werden, falls Sie Ihren privaten CA-Schlüssel verschlüsselt haben.

      Nach Abschluss dieser Schritte haben Sie die Zertifikatsanforderung des OpenVPN-Servers mit dem privaten Schlüssel des CA-Servers signiert. Die resultierende Datei server.crt enthält den öffentlichen Verschlüsselungs-Schlüssel des OpenVPN-Servers sowie eine Signatur des CA-Servers. Der Sinn der Signatur besteht darin, jedem, der dem CA-Server vertraut, mitzuteilen, dass er auch dem OpenVPN-Server vertrauen kann, wenn er sich mit ihm verbindet.

      Um die Konfiguration der Zertifikate abzuschließen, kopieren Sie die Dateien server.crt und ca.crt vom CA-Server auf den OpenVPN-Server:

      • scp pki/issued/server.crt sammy@your_vpn_server_ip:/tmp
      • scp pki/ca.crt sammy@your_vpn_server_ip:/tmp

      Zurück auf Ihrem OpenVPN-Server kopieren Sie die Dateien nun von /tmp nach /etc/openvpn/server:

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

      Nun ist Ihr OpenVPN-Server fast bereit, Verbindungen zu akzeptieren. Als Nächstes führen Sie einige zusätzliche Schritte aus, um die Sicherheit des Servers zu erhöhen.

      Schritt 5 — Konfigurieren von kryptografischem OpenVPN-Material

      Für eine Extraportion Sicherheit fügen wir einen zusätzlichen gemeinsamen geheimen Schlüssel hinzu, den der Server und alle Clients mit der Anweisung tls-crypt des OpenVPN verwenden. Diese Option wird genutzt, um das TLS-Zertifikat zu verdecken, das bei der Erstverbindung eines Servers und Clients verwendet wird. Sie wird auch vom OpenVPN-Server dazu genutzt, schnelle Kontrollen bei eingehenden Paketen durchzuführen: Wenn ein Paket mit dem gemeinsamen Schlüssel signiert ist, wird es vom Server verarbeitet. Wenn es nicht signiert ist, weiß der Server, dass es aus einer nicht vertrauenswürdigen Quelle stammt und kann es verwerfen, ohne es zusätzlich entschlüsseln zu müssen.

      Diese Option hilft sicherzustellen, dass Ihr OpenVPN-Server in der Lage ist, mit nicht authentifiziertem Datenverkehr, Port-Scans und Denial-of-Service-Angriffen umzugehen, die Serverressourcen binden können. Auch die Identifizierung des Netzwerkverkehrs mit OpenVPN wird hierdurch erschwert.

      Um den gemeinsamen tls-crypt-Schlüssel zu generieren, führen Sie Folgendes auf dem OpenVPN-Server im Verzeichnis ~/easy-rsa aus:

      • cd ~/easy-rsa
      • openvpn --genkey --secret ta.key

      Das Ergebnis ist eine Datei namens ta.key. Kopieren Sie diese in das Verzeichnis /etc/openvpn/server/:

      • sudo cp ta.key /etc/openvpn/server

      Nachdem diese Dateien auf dem OpenVPN-Server vorhanden sind, können Sie Client-Zertifikate und Schlüsseldateien für Ihre Benutzer erstellen, die Sie für die Verbindung mit dem VPN verwenden.

      Schritt 6 — Generieren eines Client-Zertifikats und eines Schlüsselpaars

      Sie können zwar einen privaten Schlüssel und eine Zertifikatsanforderung auf Ihrem Client-Computer erstellen und dann zwecks Signierung zur CA senden, aber dieser Leitfaden beschreibt einen Prozess zum Generieren der Zertifikatsanforderung auf dem Server. Der Vorteil besteht darin, dass wir ein Skript erstellen können, das automatisch Client-Konfigurationsdateien generiert, die alle benötigten Schlüssel und Zertifikate enthalten. Damit können Sie vermeiden, dass Schlüssel, Zertifikate und Konfigurationsdateien an Clients übertragen werden müssen, und der Prozess des Verbindungsaufbaus zum VPN wird gestrafft.

      In diesem Leitfaden generieren wir einen einzelnen Client-Schlüssel und ein Zertifikatpaar. Wenn Sie mehr als einen Client haben, können Sie diesen Prozess für jeden Client wiederholen. Bitte beachten Sie allerdings, dass Sie für jeden Client einen eindeutigen Namenswert an das Skript übergeben müssen. In diesem Tutorial wird das erste Zertifikat/Schlüsselpaar als client1 bezeichnet.

      Beginnen Sie, indem Sie eine Verzeichnisstruktur in Ihrem Stammverzeichnis erstellen, um das Client-Zertifikat und die Schlüsseldateien zu speichern:

      • mkdir -p ~/client-configs/keys

      Da Sie das Zertifikat/die Schlüsselpaare Ihrer Clients und die Konfigurationsdateien in diesem Verzeichnis speichern, sollten Sie als Sicherheitsmaßnahme die Berechtigungen jetzt sperren:

      • chmod -R 700 ~/client-configs

      Navigieren Sie als Nächstes zurück zum EasyRSA-Verzeichnis und führen das easyrsa-Skript mit den Optionen gen-req und nopass zusammen mit dem geläufigen Namen für den Client aus:

      • cd ~/easy-rsa
      • ./easyrsa gen-req client1 nopass

      Drücken Sie die ENTER, um den geläufigen Namen zu bestätigen. Kopieren Sie dann die Datei client1.key in das zuvor erstellte Verzeichnis ~/client-configs/keys/:

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

      Als Nächstes übertragen Sie die Datei client1.req mit einer sicheren Methode auf Ihren CA-Server:

      • scp pki/reqs/client1.req sammy@your_ca_server_ip:/tmp

      Melden Sie sich nun bei Ihrem CA-Server an. Navigieren Sie dann zum EasyRSA-Verzeichnis und importieren Sie die Zertifikatsanforderung:

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

      Signieren Sie dann die Anforderung, wie Sie dies im vorherigen Schritt für den Server getan haben. Dieses Mal muss jedoch der Anforderungstyp client angegeben werden:

      • ./easyrsa sign-req client client1

      Geben Sie bei der Eingabeaufforderung yes ein, um zu bestätigen, dass Sie beabsichtigen, die Zertifikatsanforderung zu signieren, und dass sie aus einer vertrauenswürdigen Quelle stammt:

      Output

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

      Wenn Sie Ihren CA-Schlüssel verschlüsselt haben, werden Sie erneut zur Eingabe Ihres Passworts aufgefordert.

      Damit wird ein Client-Zertifikat namens client1.crt erstellt. Übertragen Sie diese Datei wieder auf den Server:

      • scp pki/issued/client1.crt sammy@your_server_ip:/tmp

      Zurück auf Ihrem OpenVPN-Server kopieren Sie das Client-Zertifikat in das Verzeichnis ~/client-configs/keys/:

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

      Kopieren Sie dann auch die Dateien ca.crt und ta.key in das Verzeichnis ~/client-configs/keys/ und legen Sie die entsprechenden Berechtigungen für Ihren sudo-Benutzer fest:

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

      Damit wurden alle Zertifikate des Servers und Clients sowie alle Schlüssel generiert und in den entsprechenden Verzeichnissen auf Ihrem OpenVPN-Server gespeichert. Es gibt noch einige Aktionen, die mit diesen Dateien ausgeführt werden müssen, aber diese werden in einem späteren Schritt beschrieben. Vorerst können Sie mit der Konfiguration des OpenVPN fortfahren.

      Schritt 7 — Konfigurieren von OpenVPN

      Wie viele andere weit verbreitete Open-Source-Tools bietet auch OpenVPN eine Vielzahl von Konfigurationsoptionen an, mit denen Sie Ihren Server Ihren spezifischen Bedürfnissen anpassen können. In diesem Abschnitt erhalten Sie Anweisungen zum Einrichten eines OpenVPN auf der Grundlage einer der Beispielkonfigurationsdateien, die in der Dokumentation dieser Software enthalten sind.

      Kopieren Sie zunächst die Beispieldatei server.conf als Ausgangspunkt für Ihre eigene Konfigurationsdatei:

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

      Öffnen Sie die neue Datei zum Bearbeiten mit dem Texteditor Ihrer Wahl. Wir verwenden in unserem Beispiel nano:

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

      Wir müssen einige Zeilen in dieser Datei ändern. Finden Sie zunächst den HMAC-Abschnitt der Konfiguration, indem Sie nach der Anweisung tls-auth suchen. Diese Zeile sollte unkommentiert sein. Kommentieren Sie sie aus, indem Sie am Anfang der Zeile ein ; einfügen. Fügen Sie dann hinter diese eine neue Zeile hinzu, die nur den Wert tls-crypt ta.key enthält:

      /etc/openvpn/server.conf

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

      Als Nächstes lokalisieren Sie den Abschnitt über kryptografische Chiffren, indem Sie nach den cipher-Zeilen suchen. Der Standardwert ist auf AES-256-CBC eingestellt. Die Chiffrierung mit AES-256-GCM bietet jedoch ein höheres Niveau an Verschlüsselung und Leistung und wird von modernen OpenVPN-Clients gut unterstützt. Wir kommentieren den Standardwert aus, indem wir am Anfang dieser Zeile ein ;-Zeichen einfügen. Nach dieser fügen wir eine weitere Zeile hinzu, die den aktualisierten Wert von AES-256-GCM enthält:

      /etc/openvpn/server.conf

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

      Fügen Sie direkt hinter dieser Zeile eine auth-Anweisung hinzu, um den Digestalgorithmus der HMAC-Nachricht auszuwählen. Dafür ist SHA256 eine gute Wahl:

      /etc/openvpn/server.conf

      auth SHA256
      

      Suchen Sie als Nächstes nach der Zeile mit der Anweisung dh, die Diffie-Hellman-Parameter definiert. Da wir alle Zertifikate so konfiguriert haben, dass sie die Elliptische-Kurven-Kryptografie verwenden, ist eine Diffie-Hellman-Seed-Datei nicht erforderlich. Kommentieren Sie die bestehende Zeile aus, die wie dh dh2048.pem oder dh dh.pem aussieht. Der Dateiname für den Diffie-Hellman-Schlüssel kann anders sein als der in der Beispielkonfigurationsdatei des Servers aufgeführte. Fügen Sie dann nach dieser eine Zeile mit dem Inhalt dh none hinzu:

      /etc/openvpn/server.conf

      ;dh dh2048.pem
      dh none
      

      Als Nächstes möchten wir, dass OpenVPN nach seinem Start ohne Berechtigungen läuft. Daher müssen wir ihm sagen, dass es mit einem Benutzer und einer Gruppe von nobody läuft. Um dies zu aktivieren, finden Sie die Zeilen mit user nobody und group nobody und kommentieren Sie sie aus, indem Sie das ;-Zeichen am Anfang jeder Zeile entfernen:

      /etc/openvpn/server.conf

      user nobody
      group nobody
      

      (Optional) DNS-Änderungen mithilfe von Push übertragen, um den gesamten Verkehrs durch das VPN umzuleiten

      Mit den obigen Einstellungen wird die VPN-Verbindung zwischen Ihrem Client und Server erstellt, die Verbindungen werden allerdings nicht zur Nutzung des Tunnels gezwungen. Wenn Sie das VPN verwenden möchten, um Ihren gesamten Client-Verkehr über das VPN zu leiten, sollten Sie wahrscheinlich einige zusätzlichen Einstellungen mithilfe von Push an die Client-Computer übertragen.

      Finden Sie hierzu die Zeile mit push "redirect-gateway def1 bypass-dhcp" und kommentieren Sie sie aus. Dadurch wird Ihr Client angewiesen, seinen gesamten Verkehr über Ihren OpenVPN-Server umzuleiten. Beachten Sie, dass die Aktivierung dieser Funktionalität Verbindungsprobleme mit anderen Netzwerkdiensten wie SSH verursachen kann:

      /etc/openvpn/server.conf

      push "redirect-gateway def1 bypass-dhcp"
      

      Direkt unter dieser Zeile finden Sie den Abschnitt dhcp-option. Entfernen Sie erneut das „;“ zu Beginn der beiden Zeilen, um sie auszukommentieren:

      /etc/openvpn/server.conf

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

      Diese Zeilen weisen Ihren Client am, die kostenlosen OpenDNS-Resolver unter den aufgelisteten IP-Adressen zu verwenden. Wenn Sie andere DNS-Resolver bevorzugen, können Sie diese an Stelle der hervorgehobenen IPs einsetzen.

      Dadurch werden die Clients bei der Neukonfigurierung ihrer DNS-Einstellungen unterstützt, damit der VPN-Tunnel als Standard-Gateway verwendet werden kann.

      (Optional) Anpassung des Ports und Protokolls

      Standardmäßig verwendet der OpenVPN-Server Port 1194 und das UDP-Protokoll, um Client-Verbindungen zu akzeptieren. Wenn Sie aufgrund von restriktiven Netzwerkumgebungen, in denen sich Ihre Clients eventuell befinden, einen anderen Port verwenden müssen, können Sie die Option port ändern. Wenn Sie auf Ihrem OpenVPN-Server keine Web-Inhalte hosten, ist Port 443 eine gängige Wahl, da er üblicherweise von den Firewall-Regeln zugelassen wird.

      Um OpenVPN so zu ändern, dass es auf Port 443 lauscht, öffnen Sie die Datei server.conf und suchen Sie die Zeile, die wie folgt aussieht:

      /etc/openvpn/server.conf

      port 1194
      

      Bearbeiten Sie sie entsprechend, damit der Port 443 ist:

      /etc/openvpn/server.conf

      # Optional!
      port 443
      

      Häufig ist das Protokoll auch auf diesen Port beschränkt. Finden Sie in diesem Fall die proto-Zeile unterhalb der port-Zeile und ändern Sie das Protokoll von udp zu tcp:

      /etc/openvpn/server.conf

      # Optional!
      proto tcp
      

      Wenn Sie das Protokoll tatsächlich in TCP ändern, müssen Sie den Wert der Anweisung explicit-exit-notify von 1 auf 0 ändern, da diese Anweisung nur von UDP verwendet wird. Wenn dies während der Verwendung von TCP nicht befolgt wird, treten beim Starten des OpenVPN-Dienstes Fehler auf.

      Finden Sie die Zeile explicit-exit-notify am Ende der Datei und ändern Sie den Wert auf 0:

      /etc/openvpn/server.conf

      # Optional!
      explicit-exit-notify 0
      

      Wenn Sie keinen anderen Port und kein anderes Protokoll verwenden müssen, ist es am besten, diese Einstellungen in ihren Standardeinstellungen zu belassen.

      (Optional) Auf nicht standardmäßige Anmeldedaten verweisen

      Wenn Sie zuvor beim Befehl ./easyrsa gen-req server einen anderen Namen gewählt haben, ändern Sie die Zeilen cert und key in der Konfigurationsdatei server.conf, damit sie auf die entsprechenden Dateien .crt und .key verweisen. Wenn Sie den Standardnamen, server, verwendet haben, ist dies bereits korrekt festgelegt:

      /etc/openvpn/server.conf

      cert server.crt
      key server.key
      

      Wenn Sie dies abgeschlossen haben, speichern und schließen Sie die Datei.

      Sie haben nun die Konfiguration der allgemeinen Einstellungen Ihres OpenVPN abgeschlossen. Im nächsten Schritt passen wir die Netzwerkoptionen des Servers an.

      Schritt 8 — Anpassen der Netzwerkkonfiguration des Open VPN-Servers

      Es gibt einige Aspekte der Netzwerkkonfiguration des Servers, die optimiert werden müssen, damit OpenVPN den Verkehr korrekt durch das VPN leiten kann. Als Erstes muss die IP-Weiterleitung angepasst werden, eine Methode zur Bestimmung, wohin der IP-Verkehr geleitet werden sollte. Diese Änderung ist für die von Ihrem Server bereitgestellte VPN-Funktionalität von entscheidender Bedeutung.

      Um die standardmäßige IP-Weiterleitungseinstellung Ihres OpenVPN-Servers anzupassen, öffnen Sie die Datei /etc/sysctl.conf mit nano oder Ihrem bevorzugten Editor:

      • sudo nano /etc/sysctl.conf

      Fügen Sie dann am Anfang der Datei die folgende Zeile hinzu:

      /etc/sysctl.conf

      net.ipv4.ip_forward = 1
      

      Wenn Sie fertig sind, speichern und schließen Sie die Datei.

      Um die Datei zu lesen und die Werte für die aktuelle Sitzung zu laden, geben Sie Folgendes ein:

      Output

      net.ipv4.ip_forward = 1

      Jetzt kann Ihr OpenVPN-Server eingehenden Datenverkehr von einem Ethernet-Gerät auf ein anderes weiterleiten. Diese Einstellung stellt sicher, dass der Server den Datenverkehr von Clients, die sich über die virtuelle VPN-Schnittstelle verbinden, über seine anderen physischen Ethernet-Geräte hinausleiten kann. Diese Konfiguration leitet den gesamten Webverkehr von Ihrem Client über die IP-Adresse Ihres Servers und die öffentliche IP-Adresse Ihres Clients wird effektiv verborgen.

      Im nächsten Schritt müssen Sie einige Firewall-Regeln konfigurieren, um sicherzustellen, dass der Verkehr zu und von Ihrem OpenVPN-Server korrekt fließt.

      Schritt 9 — Konfigurieren der Firewall

      Bis hierher haben Sie OpenVPN auf Ihrem Server installiert, konfiguriert und die Schlüssel und Zertifikate generiert, die für Ihren Client für den Zugriff auf das VPN benötigt werden. Sie haben OpenVPN jedoch noch keine Anweisungen gegeben, wohin eingehender Webverkehr von Clients gesendet werden soll. Sie können festlegen, wie der Server mit dem Client-Verkehr umgehen soll, indem Sie einige Firewall-Regeln und Leitungskonfigurationen festlegen.

      Wenn Sie den Voraussetzungen am Anfang dieses Tutorials gefolgt sind, sollte firewalld bereits installiert sein und auf Ihrem Server laufen. Um OpenVPN durch die Firewall zu lassen, müssen Sie wissen, welche Ihre aktive firewalld-Zone ist. Finden Sie das mit dem folgenden Befehl:

      • sudo firewall-cmd --get-active-zones

      Output

      public Interfaces: eth0

      Wenn Sie keine trusted-Zone sehen, die die Schnittstelle tun0 listet, führen Sie die folgenden Befehle aus, um das VPN-Gerät zu dieser Zone hinzuzufügen:

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

      Fügen Sie anschließend den Dienst openvpn in die Liste von Diensten ein, die von firewalld in Ihrer aktiven Zone zugelassen werden. Legen Sie diese Einstellung dauerhaft fest, indem Sie den Befehl erneut ausführen, diesmal jedoch mit der hinzugefügten Option --permanent:

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

      Um die Änderungen an der Firewall anzuwenden, führen Sie Folgendes aus:

      • sudo firewall-cmd --reload

      Sie können nun mit dem folgenden Befehl überprüfen, ob der Dienst korrekt hinzugefügt wurde:

      • sudo firewall-cmd --list-services --zone=trusted

      Output

      openvpn

      Als Nächstes fügen wir der Firewall eine Masquerade-Regel hinzu. Masquerading ermöglicht Ihrem OpenVPN-Server, die Adressen Ihrer OpenVPN-Clients in die eigene öffentliche Adresse des Servers zu übersetzen und dann das Gegenteil mit dem Verkehr zu tun, der an die Clients zurückgeschickt wird. Dieser Vorgang ist auch als Netzwerkadressübersetzung (NAT), bekannt.

      Fügen Sie Masquerade-Regeln mit den folgenden Befehlen hinzu:

      • sudo firewall-cmd --add-masquerade
      • sudo firewall-cmd --add-masquerade --permanent

      Mit diesem Befehl können Sie überprüfen, ob die Masquerade korrekt hinzugefügt wurde:

      • sudo firewall-cmd --query-masquerade

      Output

      yes

      Als Nächstes müssen Sie die spezifische Masquerade-Regel nur für Ihr OpenVPN-Subnetz erstellen. Sie können dies tun, indem Sie zunächst eine Shell-Variable (in unserem Beispiel DEVICE) erstellen, die die primäre Netzwerkschnittstelle repräsentiert, die von Ihrem Server verwendet wird, und dann diese Variable verwenden, um die Leitungsregel dauerhaft hinzuzufügen:

      • DEVICE=$(ip route | awk '/^default via/ {print $5}')
      • sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $DEVICE -j MASQUERADE

      Achten Sie darauf, firewalld neu zu laden, damit alle Ihre Änderungen wirksam werden:

      • sudo firewall-cmd --reload

      Die Befehle mit dem Flag --permanent stellen sicher, dass die Regeln über Reboots hinweg bestehen bleiben. Der Befehl firewall-cmd --reload stellt sicher, dass alle ausstehenden Änderungen an der Firewall angewendet werden. Wenn die Firewall-Regeln eingerichtet sind, können wir den OpenVPN-Dienst auf dem Server starten.

      Schritt 10 — Starten des OpenVPN

      OpenVPN läuft als Systemd-Dienst, sodass wir systemctl verwenden können, um es zu verwalten. Wir konfigurieren OpenVPN, um beim Booten zu starten, sodass Sie sich jederzeit mit Ihrem VPN verbinden können, solange Ihr Server läuft. Aktivieren Sie dazu den OpenVPN-Dienst, indem Sie ihn zu systemctl hinzufügen:

      Starten Sie dann den OpenVPN-Dienst:

      Überprüfen Sie nochmals mit dem folgenden Befehl, ob der OpenVPN-Dienst aktiv ist. Sie sollten in der Ausgabe active (running) sehen:

      Output

      [email protected] - OpenVPN service for server Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; vendor preset: disabled) Active: active (running) since Tue 2020-04-07 02:32:07 UTC; 1min 52s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 15868 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 5059) Memory: 1.2M CGroup: /system.slice/system-openvpnx2dserver.slice/[email protected] └─15868 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --cipher AES-256-GCM --ncp-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-128-CBC:BF-CBC --config server.conf . . .

      Wir haben nun die serverseitige Konfiguration für OpenVPN abgeschlossen. Als Nächstes konfigurieren Sie Ihren Client-Computer und verbinden sich mit dem OpenVPN-Server.

      Schritt 11 — Erstellen der Client-Konfigurationsinfrastruktur

      Das Erstellen von Konfigurationsdateien für OpenVPN-Clients kann etwas komplex sein, da jeder Client seine eigene Konfiguration haben muss, die sich mit den in der Konfigurationsdatei des Servers aufgeführten Einstellungen decken muss. Anstatt eine einzige Konfigurationsdatei zu erstellen, die nur auf einem Client verwendet werden kann, wird in diesem Schritt ein Prozess zur Erstellung einer Client-Konfigurationsinfrastruktur beschrieben, mit der Sie dynamisch Konfigurationsdateien generieren können. Sie erstellen zunächst eine „Basis“-Konfigurationsdatei und dann ein Skript, mit dem Sie je nach Bedarf eindeutige Client-Konfigurationsdateien, Zertifikate und Schlüssel generieren können.

      Beginnen Sie, indem Sie ein neues Verzeichnis anlegen, in dem Sie Client-Konfigurationsdateien in dem zuvor erstellten Verzeichnis client-configs speichern:

      • mkdir -p ~/client-configs/files

      Kopieren Sie dann ein Client-Konfigurationsbeispiel als Basiskonfiguration in das Verzeichnis client-configs:

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

      Öffnen Sie diese neue Datei mit nano oder Ihrem bevorzugten Texteditor:

      • nano ~/client-configs/base.conf

      Lokalisieren Sie die Anweisung remote. Damit wird der Client auf Ihre OpenVPN-Serveradresse verwiesen – die öffentliche IP-Adresse Ihres OpenVPN-Servers. Wenn Sie beschlossen haben, den Port zu ändern, auf dem der OpenVPN-Server lauscht, müssen Sie außerdem 1194 auf den von Ihnen ausgewählten Port ändern:

      ~/client-configs/base.conf

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

      Vergewissern Sie sich, dass das Protokoll mit dem Wert übereinstimmt, den Sie in der Serverkonfiguration verwenden:

      ~/client-configs/base.conf

      proto udp
      

      Als Nächstes kommentieren Sie die Anweisungen user und group aus, indem Sie das ;-Zeichen am Anfang jeder Zeile entfernen:

      ~/client-configs/base.conf

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

      Lokalisieren Sie die Anweisungen, die ca, cert und key festlegen. Kommentieren Sie diese Anweisungen aus, da Sie die Zertifikate und Schlüssel in der Datei selbst hinzufügen werden:

      ~/client-configs/base.conf

      # 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
      

      Kommentieren Sie in ähnlicher Weise die Anweisung tls-auth aus, da Sie ta.key direkt in die Client-Konfigurationsdatei einfügen werden (und der Server zur Nutzung von tls-crypt eingerichtet ist):

      ~/client-configs/base.conf

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

      Verwenden Sie dieselben Einstellungen für cipher und auth, die Sie in der Datei /etc/openvpn/server/server.conf festgelegt haben:

      ~/client-configs/base.conf

      cipher AES-256-GCM
      auth SHA256
      

      Fügen Sie dann die Anweisung key-direction an einer beliebigen Stelle in der Datei hinzu. Sie müssen diesen Wert auf „1“ festlegen, damit das VPN auf dem Client-Computer korrekt funktioniert:

      ~/client-configs/base.conf

      key-direction 1
      

      Fügen Sie schließlich einige auskommentierte Zeilen hinzu. Sie können diese Anweisungen zwar in jede Client-Konfigurationsdatei einbinden, müssen sie allerdings nur für Linux-Clients aktivieren, in deren Lieferumfang die Datei /etc/openvpn/update-resolv-conf enthalten ist. Dieses Skript verwendet das Utility resolvconf, um DNS-Informationen für Linux-Clients zu aktualisieren.

      ~/client-configs/base.conf

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

      Wenn Ihr Client Linux ausführt und eine Datei /etc/openvpn/update-resolv-conf enthält, kommentieren Sie diese Zeilen aus der Konfigurationsdatei des Clients aus, nachdem sie generiert wurde.

      Wenn Sie fertig sind, speichern und schließen Sie die Datei.

      Als Nächstes erstellen wir ein Skript, das Ihre Basiskonfiguration mit dem entsprechenden Zertifikat, Schlüssel und den Verschlüsselungsdateien kompiliert und platzieren die generierte Konfiguration dann in das Verzeichnis ~/client-configs/files. Öffnen Sie eine neue Datei namens make_config.sh im Verzeichnis ~/client-configs:

      • nano ~/client-configs/make_config.sh

      Fügen Sie der Datei den folgenden Inhalt hinzu:

      ~/client-configs/make_config.sh

      #!/bin/bash
      
      # First argument: Client identifier
      
      KEY_DIR=~/client-configs/keys
      OUTPUT_DIR=~/client-configs/files
      BASE_CONFIG=~/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
      

      Wenn Sie fertig sind, speichern und schließen Sie die Datei.

      Bevor Sie fortfahren, markieren Sie diese Datei als ausführbar, indem Sie Folgendes eingeben:

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

      Dieses Skript erstellt eine Kopie der von Ihnen angelegten Datei base.conf, sammelt alle für Ihren Client erstellten Zertifikate und Schlüsseldateien, extrahiert ihre Inhalte, fügt sie der Kopie der Basiskonfigurationsdatei an und exportiert alle Inhalte in eine neue Client-Konfigurationsdatei. Das bedeutet, dass alle erforderlichen Informationen an einem Ort gespeichert werden und die Konfiguration des Clients, die Zertifikate und Schlüsseldateien nicht getrennt verwaltet werden müssen. Der Vorteil besteht darin, dass Sie, falls Sie einmal einen Client hinzufügen müssen, einfach dieses Skript ausführen können, um rasch die neue Konfigurationsdatei zu erstellen. Dabei wird sichergestellt, dass alle wichtigen Informationen an einem einzigen, einfach zugänglichen Ort gespeichert werden.

      Bitte beachten Sie, dass bei jedem Hinzufügen eines neuen Clients neue Schlüssel und Zertifikate für ihn generiert werden müssen, bevor Sie dieses Skript ausführen und die entsprechende Konfigurationsdatei generieren können. Im nächsten Schritt können Sie die Verwendung dieses Skripts üben.

      Schritt 12 — Generieren von Client-Konfigurationen

      Durch Befolgung der Anweisungen im Leitfaden haben Sie in Schritt 6 ein Client-Zertifikat und einen Schlüssel namens client1.crt bzw. client1.key erstellt. Sie können eine Konfigurationsdatei für diese Anmeldedaten generieren, indem Sie in das Verzeichnis ~/client-configs wechseln und das am Ende des vorherigen Schrittes erstellte Skript ausführen:

      • cd ~/client-configs
      • ./make_config.sh client1

      Dadurch wird eine Datei namens client1.ovpn in Ihrem Verzeichnis ~/client-configs/files erstellt:

      • ls ~/client-configs/files

      Output

      client1.ovpn

      Sie müssen diese Datei auf das Gerät übertragen, das Sie als Client verwenden wollen. Das könnte beispielsweise Ihr lokaler Computer oder ein mobiles Gerät sein.

      Die genauen Anwendungen, die zur Durchführung dieser Übertragung eingesetzt werden, hängen zwar vom Betriebssystem Ihres Geräts und Ihren persönlichen Präferenzen ab, aber die Verwendung von SFTP (SSH File Transfer Protocol) oder SCP (Secure Copy) im Backend ist ein zuverlässiges und sicheres Verfahren. Damit werden die VPN-Authentifizierungsdateien Ihres Clients über eine verschlüsselte Verbindung übertragen.

      Hier sehen Sie das Beispiel eines SFTP-Befehls, den Sie von Ihrem lokalen Computer (macOS oder Linux) ausführen können. Damit wird die Datei client1.ovpn kopiert, die wir im letzten Schritt in Ihrem Stammverzeichnis erstellt haben:

      • sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/

      Hier sind einige Tools und Tutorials für die sichere Übertragung von Dateien vom OpenVPN-Server auf einen lokalen Computer:

      Schritt 13 — Installieren der Client-Konfiguration

      Dieser Abschnitt behandelt die Installation eines Client-VPN-Profils auf Windows, macOS, Linux, iOS und Android. Keine dieser Client-Anleitungen bauen aufeinander auf. Daher können Sie je nach verwendetem Gerät direkt zur entsprechenden Anleitung navigieren.

      Die OpenVPN-Verbindung hat den gleichen Namen wie die von Ihnen benannte Datei .ovpn. In diesem Tutorial bedeutet dies, dass die Verbindung den Namen client1.ovpn erhält, was sich mit der von Ihnen erzeugten ersten Client-Datei deckt.

      Windows

      Installation

      Laden Sie die OpenVPN-Client-Anwendung für Windows von der OpenVPN-Downloadseite herunter. Wählen Sie das entsprechende Installationsprogramm für Ihre Windows-Version aus.

      Anmerkung: OpenVPN benötigt für die Installation Administratorrechte.

      Nach der Installation von OpenVPN kopieren Sie die Datei .ovpn auf:

      C:Program FilesOpenVPNconfig
      

      Beim Starten von OpenVPN lokalisiert es automatisch das Profil und stellt es zur Verfügung.

      Sie müssen OpenVPN bei jedem Einsatz, auch durch Administratorkonten, als Administrator ausführen. Wenn Sie nicht bei jeder Verwendung des VPN mit der rechten Maustaste klicken und Als Administrator ausführen auswählen möchten, müssen Sie von einem Administratorkonto aus eine Voreinstellung vornehmen. Das bedeutet auch, dass Standardbenutzer zur Verwendung von OpenVPN das Passwort des Administrators eingeben müssen. Andererseits können Standardbenutzer nur dann eine korrekte Verbindung mit dem Server herstellen, wenn die OpenVPN-Anwendung auf dem Client Administrationsrechte hat. Somit sind die höheren Berechtigungen notwendig.

      Um die OpenVPN-Anwendung so einzustellen, dass sie immer als Administrator ausgeführt wird, klicken Sie mit der rechten Maustaste auf das entsprechende Verknüpfungssymbol und gehen zu Eigenschaften. Klicken Sie im unteren Teil der Registerkarte Kompatibilität auf die Schaltfläche Einstellungen für alle Benutzer ändern. Aktivieren Sie im neuen Fenster Programm als Administrator ausführen.

      Verbindungsherstellung

      Jedes Mal, wenn Sie die OpenVPN-GUI starten, fragt Windows Sie, ob das Programm Änderungen an Ihrem Computer vornehmen darf. Klicken Sie auf Ja. Durch das Starten der OpenVPN-Client-Anwendung wird nur das Applet in die Taskleiste eingefügt, damit Sie je nach Bedarf die Verbindung mit dem VPN herstellen und trennen können; es stellt die VPN-Verbindung nicht tatsächlich her.

      Sobald OpenVPN gestartet wird, stellen Sie eine Verbindung her, indem Sie zum Taskleisten-Applet navigieren und mit der rechten Maustaste auf das OpenVPN-Applet-Symbol klicken. Dadurch wird das Kontextmenü geöffnet. Wählen Sie client1 oben im Menü (hierbei handelt es sich um Ihr client1.ovpn-Profil) und anschließend Verbinden.

      Ein Statusfenster wird geöffnet und zeigt die Protokollausgabe an, während die Verbindung hergestellt wird. Sobald der Client verbunden ist, erscheint eine Meldung.

      Trennen Sie die Verbindung mit dem VPN in der gleichen Weise: Gehen Sie zum Taskleisten-Applet, klicken Sie mit der rechten Maustaste auf das OpenVPN-Applet-Symbol, wählen Sie das Client-Profil und klicken Sie auf Verbindung trennen.

      macOS

      Installation

      Tunnelblick ist ein kostenloser Open-Source-OpenVPN-Client für macOS. Sie können das neueste Datenträgerabbild von der Tunnelblick-Downloadseite herunterladen. Doppelklicken Sie auf die heruntergeladene Datei .dmg und befolgen Sie die Aufforderungen zur Installation.

      Am Ende des Installationsprozesses fragt Tunnelblick Sie, ob Sie Konfigurationsdateien haben. Antworten Sie Ich habe Konfigurationsdateien und lassen Sie Tunnelblick den Vorgang beenden. Öffnen Sie ein Finder-Fenster und doppelklicken Sie auf client1.ovpn. Tunnelblick installiert das Client-Profil. Administratorrechte sind erforderlich.

      Verbindungsherstellung

      Starten Sie Tunnelblick, indem Sie auf das Tunnelblick-Symbol im Ordner Anwendungen doppelklicken. Nach dem Starten von Tunnelblick befindet sich oben rechts am Bildschirm in der Menüleiste ein Tunnelblick-Symbol zur Steuerung von Verbindungen. Klicken Sie auf das Symbol und dann auf den Menüpunkt Connect client1, um die VPN-Verbindung herzustellen.

      Linux

      Installation

      Wenn Sie Linux verwenden, gibt es eine Vielzahl von Tools, die Sie je nach Distribution verwenden können. Ihre Desktop-Umgebung oder Ihr Fenstermanager enthält möglicherweise auch Verbindungs-Utilitys.

      Die universellste Art der Verbindungsherstellung besteht jedoch darin, einfach die OpenVPN-Software zu verwenden.

      Unter Ubuntu oder Debian können Sie sie wie auf dem Server installieren, indem Sie Folgendes eingeben:

      • sudo apt update
      • sudo apt install openvpn

      Unter CentOS können Sie die EPEL-Repositorys aktivieren und dann installieren, indem Sie Folgendes eingeben:

      • sudo yum install epel-release
      • sudo yum install openvpn

      Konfiguration

      Überprüfen Sie, ob Ihre Distribution das Skript /etc/openvpn/update-resolv-conf enthält:

      Output

      update-resolv-conf

      Bearbeiten Sie als Nächstes die von Ihnen übertragene OpenVPN-Client-Konfigurationsdatei:

      Wenn Sie eine Datei update-resolv-conf finden konnten, kommentieren Sie die drei Zeilen aus, die Sie hinzugefügt haben, um die DNS-Einstellungen anzupassen:

      client1.ovpn

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

      Wenn Sie CentOS verwenden, ändern Sie die Anweisung group von nogroup auf nobody, um sie an die verfügbaren Gruppen der Distribution anzugleichen:

      client1.ovpn

      group nobody
      

      Speichern und schließen Sie die Datei.

      Jetzt können Sie eine Verbindung zum VPN herstellen, indem Sie mit dem Befehl openvpn auf die Client-Konfigurationsdatei zeigen:

      • sudo openvpn --config client1.ovpn

      Dies sollte Sie mit Ihrem VPN verbinden.

      iOS

      Installation

      Suchen Sie im iTunes App Store nach OpenVPN Connect, der offiziellen iOS OpenVPN-Client-Anwendung, und installieren Sie sie. Um Ihre iOS-Client-Konfiguration auf das Gerät zu übertragen, schließen Sie es direkt an einen Computer an.

      Der Vorgang zum Abschließen der Übertragung mit iTunes wird hier beschrieben. Öffnen Sie iTunes auf dem Computer und klicken Sie auf iPhone > Apps. Scrollen Sie nach unten zum Abschnitt File Sharing und klicken Sie auf die OpenVPN-App. Das leere Fenster auf der rechten Seite, OpenVPN-Dokumente, dient zum Freigeben von Dateien. Ziehen Sie die Datei .ovpn in das Fenster OpenVPN-Dokumente. iTunes zeigt das zum Laden bereite VPN-Profil auf dem iPhone

      Starten Sie jetzt die OpenVPN-App auf dem iPhone. Sie erhalten eine Benachrichtigung, dass ein neues Profil zum Import bereit ist. Tippen Sie auf das grüne Pluszeichen, um es zu importieren.

      Die OpenVPN-iOS-App zeigt ein neues, zum Import bereites Profil anVerbindungsherstellung

      OpenVPN kann jetzt mit dem neuen Profil verwendet werden. Starten Sie die Verbindung, indem Sie die Taste Connect in die Position On schieben. Trennen Sie die Verbindung, indem Sie dieselbe Taste in die Position Off schieben.

      Anmerkung: Der VPN-Switch unter Einstellungen kann nicht zur Verbindung mit dem VPN verwendet werden. Wenn Sie es versuchen, erhalten Sie eine Mitteilung, die Verbindung nur mit der OpenVPN-App herzustellen.

      Die mit dem VPN verbundene OpenVPN iOS-App

      Android

      Installation

      Öffnen Sie den Google Play Store. Suchen und installieren Sie Android OpenVPN Connect, die offizielle Android OpenVPN-Client-Anwendung.

      Sie können das Profil .ovpn übertragen, indem Sie das Android-Gerät per USB an Ihren Computer anschließen und die Datei kopieren. Wenn Sie einen SD-Kartenleser haben, können Sie auch die SD-Karte des Geräts entfernen, das Profil auf sie kopieren und dann die Karte wieder in das Android-Gerät einlegen.

      Starten Sie die OpenVPN-App und tippen Sie auf das Menü FILE, um das Profil zu importieren.

      Die Menüauswahl für den Import des Profils in der OpenVPN-App für Android

      Navigieren Sie dann zum Speicherort des Profils (im Screenshot wird /storage/emulated/0/openvpn verwendet) und wählen Sie Ihre Datei .ovpn aus. Tippen Sie auf die Schalttaste IMPORT, um das Importieren dieses Profils zu beenden.

      Die OpenVPN-App für Android, die das zu importierende VPN-Profil auswählt

      Verbindungsherstellung Sobald das Profil hinzugefügt wurde, sehen Sie einen Bildschirm wie diesen:

      Die OpenVPN-App für Android mit dem neu hinzugefügten Profil

      Tippen Sie zum Verbinden auf die Umschalttaste in der Nähe des Profils, das Sie verwenden möchten. Sie sehen Echtzeitstatistiken der Verbindung und des Datenverkehrs, der über Ihren OpenVPN-Server geleitet wird: Die mit dem VPN verbundene OpenVPN-App für Android

      Zum Trennen der Verbindung tippen Sie einfach erneut auf die Umschalttaste oben links. Sie werden aufgefordert, zu bestätigen, dass Sie die Verbindung zu Ihrem VPN trennen möchten.

      Schritt 14 — Testen Ihrer VPN-Verbindung (optional)

      Anmerkung: Diese Methode zum Testen Ihrer VPN-Verbindung funktioniert nur dann, wenn Sie sich im Schritt 7 bei der Bearbeitung der Datei server.conf für OpenVPN dazu entschieden haben, den gesamten Verkehr über das VPN zu leiten.

      Sobald alles installiert ist, wird durch eine einfache Überprüfung bestätigt, dass alles ordnungsgemäß funktioniert. Öffnen Sie einen Browser, ohne dass eine VPN-Verbindung aktiviert ist, und rufen Sie DNSLeakTest auf.

      Die Site gibt die von Ihrem Internetdienstanbieter zugewiesene IP-Adresse zurück und zeigt, wie Sie dem Rest der Welt erscheinen. Um Ihre DNS-Einstellungen über dieselbe Website zu überprüfen, klicken Sie auf Erweiterter Test. Dann erfahren Sie, welche DNS-Server Sie verwenden.

      Verbinden Sie nun den OpenVPN-Client mit dem VPN Ihres Droplets und aktualisieren Sie den Browser. Jetzt sollte eine völlig andere IP-Adresse (die Ihres VPN-Servers) angezeigt werden. So sehen Sie für die Welt aus. Erneut werden mit Erweiterter Test von DNSLeakTest Ihre DNS-Einstellungen überprüft, und es wird bestätigt, dass Sie jetzt die von Ihrem VPN per Push übertragene DSN-Resolver verwenden.

      Schritt 15 — Widerrufen von Client-Zertifikaten

      Gelegentlich müssen Sie möglicherweise ein Client-Zertifikat sperren, um den weiteren Zugriff auf den OpenVPN-Server zu verhindern.

      Folgen Sie dazu dem Beispiel im Abschnitt Widerrufen eines Zertifikats im voraussetzenden Tutorial Erstellen und Konfigurieren einer Zertifizierungsstelle unter CentOS 8.

      Sobald Sie ein Zertifikat für einen Client mit diesen Anweisungen widerrufen haben, müssen Sie die generierte Datei crl.pem in das Verzeichnis /etc/openvpn/server ihres OpenVPN-Servers kopieren:

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

      Öffnen Sie als Nächstes die OpenVPN-Serverkonfigurationsdatei:

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

      Fügen Sie am Ende der Datei die Option crl-verify hinzu, mit der der OpenVPN-Server angewiesen wird, die Zertifikatsperrliste zu überprüfen, die wir bei jedem Verbindungsversuch erstellt haben:

      /etc/openvpn/server/server.conf

      crl-verify crl.pem
      

      Speichern und schließen Sie die Datei.

      Starten Sie zum Abschluss OpenVPN neu, um die Zertifikatsperre zu implementieren:

      Der Client sollte mit den alten Anmeldedaten keine Verbindung mehr zum Server herstellen können.

      Um weitere Clients zu sperren, gehen Sie wie folgt vor:

      1. Sperren Sie das Zertifikat mit dem Befehl ./easyrsa revoke client_name
      2. Generieren Sie eine neue CRL
      3. Übertragen Sie die neue Datei crl.pem auf Ihren OpenVPN-Server und kopieren Sie sie in das Verzeichnis /etc/openvpn/server/, um die alte Liste zu überschreiben
      4. Starten Sie den OpenVPN-Dienst neu.

      Mit diesem Vorgang können Sie alle zuvor für Ihren Server ausgestellten Zertifikate sperren.

      Zusammenfassung

      Sie sollten nun über ein voll funktionsfähiges virtuelles privates Netzwerk verfügen, das auf Ihrem OpenVPN-Server läuft. Sie können im Internet surfen und Inhalte herunterladen, ohne sich Sorgen machen zu müssen, dass böswillige Akteure Ihre Aktivitäten verfolgen.

      Sie können noch verschiedene weitere Schritte ausführen, um Ihr OpenVPN anzupassen. Beispielsweise können Sie Ihren Client so konfigurieren, dass er sich automatisch mit dem VPN verbindet oder client-spezifische Regeln und Zugriffsrichtlinien konfigurieren. Konsultieren Sie für diese und andere Anpassungen des OpenVPNs die offizielle OpenVPN-Dokumentation.

      Um weitere Clients zu konfigurieren, müssen Sie nur den Schritten 6 und 11 – 13 für jedes zusätzliche Gerät folgen. Um den Zugriff auf Clients zu widerrufen, führen Sie einfach Schritt 15 aus.



      Source link

      So installieren und konfigurieren Sie Elasticsearch unter Ubuntu 20.04


      Einführung

      Elasticsearch ist eine Plattform für verteilte Suche und Analyse von Daten in Echtzeit. Aufgrund hoher Benutzerfreundlichkeit, leistungsfähiger Funktionen und Skalierbarkeit ist sie eine beliebte Wahl.

      In diesem Artikel installieren Sie Elasticsearch, konfigurieren es für Ihren Anwendungsfall, sichern Ihre Installation und unternehmen die ersten Schritte mit Ihrem Elasticsearch-Server.

      Voraussetzungen

      Bevor Sie dieses Tutorial absolvieren, benötigen Sie Folgendes:

      In diesem Tutorial arbeiten wir mit der Mindestmenge von CPUs und RAM, die zur Ausführung von Elasticsearch benötigt werden. Beachten Sie, dass die Menge von CPUs, RAM und Speicher, die Ihr Elasticsearch-Server benötigt, von der Menge der Protokolle abhängt, die Sie erwarten.

      Schritt 1 — Installieren und Konfigurieren von Elasticsearch

      Die Elasticsearch-Komponenten sind in Standard-Paket-Repositorys von Ubuntu nicht verfügbar. Sie können jedoch mit APT installiert werden, nachdem Sie die Paketquellliste von Elastic hinzugefügt haben.

      Alle Pakete werden mit dem Signierschlüssel von Elasticsearch signiert, um das System vor Paket-Spoofing zu schützen. Pakete, die mit dem Schlüssel authentifiziert wurden, werden von Ihrem Paketmanager als vertrauenswürdig eingestuft. In diesem Schritt importieren Sie den öffentlichen GPG-Schlüssel von Elasticsearch und fügen die Paketquellliste von Elasticsearch hinzu, um Elasticsearch zu installieren.

      Verwenden Sie zunächst cURL, das Befehlszeilentool zur Übertragung von Daten mit URLs, um den öffentlichen GPG-Schlüssel von Elasticsearch in APT zu importieren. Beachten Sie, dass wir die Argumente -fsSL nutzen, um alle Fortschritte und möglichen Fehler stumm zu schalten (ausgenommen Serverfehler) und um zuzulassen, dass cURL bei einer Umleitung eine Anfrage an einem neuen Ort stellt. Leiten Sie die Ausgabe des cURL-Befehls in das APT-Schlüsselprogramm weiter, das den öffentlichen GPG-Schlüssel zu APT hinzufügt.

      • curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

      Fügen Sie als Nächstes die Elastic-Quellliste in das Verzeichnis sources.list.d ein, in dem APT nach neuen Quellen sucht:

      • echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

      Aktualisieren Sie als Nächstes Ihre Paketlisten, damit APT die neue Elastic-Quelle liest:

      Installieren Sie dann Elasticsearch mit diesem Befehl:

      • sudo apt install elasticsearch

      Elasticsearch ist nun installiert und bereit für die Konfiguration.

      Schritt 2 — Konfigurieren von Elasticsearch

      Um Elasticsearch zu konfigurieren, bearbeiten wir die Hauptkonfigurationsdatei elasticsearch.yml, in der die meisten Konfigurationsoptionen gespeichert sind. Diese Datei befindet sich im Verzeichnis /etc/elasticsearch.

      Verwenden Sie zur Bearbeitung der Konfigurationsdatei von Elasticsearch Ihren bevorzugten Texteditor. Wir verwenden hier nano:

      • sudo nano /etc/elasticsearch/elasticsearch.yml

      Anmerkung: Die Konfigurationsdatei von Elasticsearch liegt im YAML-Format vor. Das bedeutet, dass wir das Einrückungsformat beibehalten müssen. Achten Sie darauf, dass Sie beim Bearbeiten der Datei keine zusätzlichen Leerzeichen hinzufügen.

      Die Datei elasticsearch.yml bietet Konfigurationsoptionen für Cluster, Knoten, Pfade, Arbeitsspeicher, Netzwerk, Suche und Gateway. Die meisten dieser Optionen sind in der Datei vorkonfiguriert, aber Sie können sie je nach Ihren Bedürfnissen ändern. Im Sinne unserer Demonstration einer Konfiguration mit nur einem Server werden wir nur die Einstellungen für den Netzwerkhost anpassen.

      Elasticsearch lauscht an Port 9200 auf Verkehr von überall. Sie werden externen Zugriff auf Ihre Elasticsearch-Instanz einschränken wollen, um zu verhindern, dass externe Personen Ihre Daten lesen oder Ihren Elasticsearch-Cluster mit der REST-API herunterfahren. Um Zugriff zu beschränken und damit die Sicherheit zu erhöhen, suchen Sie nach der Zeile, die network.host angibt, heben Sie die Kommentierung auf und ersetzen den Wert durch localhost, sodass die Zeile wie folgt aussieht:

      /etc/elasticsearch/elasticsearch.yml

      . . .
      # ---------------------------------- Network -----------------------------------
      #
      # Set the bind address to a specific IP (IPv4 or IPv6):
      #
      network.host: localhost
      . . .
      

      Wir haben localhost angegeben, damit Elasticsearch an allen Schnittstellen und gebundenen IPs lauscht. Wenn Sie möchten, dass nur an einer bestimmten Schnittstelle gelauscht werden soll, können Sie deren IP-Adresse an Stelle von localhost angeben. Speichern und schließen Sie elasticsearch.yml. Wenn Sie nano verwenden, können Sie dazu STRG+X drücken, gefolgt von Y und dann ENTER.

      Das sind die Mindesteinstellungen, mit denen Sie beginnen können, um Elasticsearch zu verwenden. Sie können Elasticsearch jetzt zum ersten Mal starten.

      Starten Sie den Elasticsearch-Dienst mit systemctl. Geben Sie Elasticsearch einige Momente zum Starten. Andernfalls erhalten Sie möglicherweise Fehlermeldungen, dass Sie keine Verbindung herstellen können.

      • sudo systemctl start elasticsearch

      Führen Sie als Nächstes den folgenden Befehl aus, damit Elasticsearch bei jedem Server-Boot gestartet wird:

      • sudo systemctl enable elasticsearch

      Nachdem Elasticsearch beim Starten nun aktiviert ist, fahren wir mit dem nächsten Schritt fort und besprechen das Thema Sicherheit.

      Schritt 3 — Sichern von Elasticsearch

      Standardmäßig kann Elasticsearch von jedem kontrolliert werden, der auf die HTTP-API zugreifen kann. Das ist nicht immer ein Sicherheitsproblem, da Elasticsearch nur an der Loopback-Schnittstelle lauscht (d. h. 127.0.0.1), auf die nur lokal zugegriffen werden kann. So ist kein öffentlicher Zugriff möglich und solange alle Serverbenutzer vertrauenswürdig sind, ist Sicherheit möglicherweise kein großes Problem.

      Wenn Sie Remotezugriff auf die HTTP-API zulassen müssen, können Sie das Gefahrenpotenzial im Netzwerk mit der Standard-Firewall von Ubuntu (UFW) reduzieren. Diese Firewall sollte bereits aktiviert sein, wenn Sie die Schritte im Tutorial Ersteinrichtung eines Servers unter Ubuntu 20.04 ausgeführt haben.

      Wir konfigurieren nun die Firewall, um Zugriff auf den standardmäßigen HTTP-API-Port (TCP 9200) für den vertrauenswürdigen Remote-Host zuzulassen. Das ist in der Regel der Server, den Sie in einer Einrichtung mit einem einzelnen Server verwenden, wie zum Beispiel 198.51.100.0. Geben Sie, um Zugriff zuzulassen, den folgenden Befehl ein:

      • sudo ufw allow from 198.51.100.0 to any port 9200

      Danach können Sie UFW mit folgendem Befehl aktivieren:

      Überprüfen Sie abschließend mit folgendem Befehl den Status von UFW:

      Wenn Sie die Regeln richtig angegeben haben, sollten Sie eine Ausgabe wie diese erhalten:

      Output

      Status: active To Action From -- ------ ---- 9200 ALLOW 198.51.100.0 22 ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6)

      Die UFW sollte jetzt aktiviert und zum Schutz von Elasticsearch Port 9200 eingerichtet ein.

      Wenn Sie in zusätzlichen Schutz investieren möchten, bietet Elasticsearch das kommerzielle Shield-Plugin zum Kauf an.

      Schritt 4 — Testen von Elasticsearch

      Jetzt sollte Elasticsearch an Port 9200 ausgeführt werden. Sie können das mit cURL und einer GET-Anfrage testen.

      • curl -X GET 'http://localhost:9200'

      Sie sollten die folgende Antwort erhalten:

      Output

      { "name" : "elasticsearch-ubuntu20-04", "cluster_name" : "elasticsearch", "cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ", "version" : { "number" : "7.6.2", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f", "build_date" : "2020-03-26T06:34:37.794943Z", "build_snapshot" : false, "lucene_version" : "8.4.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }

      Wenn Sie eine Antwort sehen, die der obigen ähnelt, funktioniert Elasticsearch richtig. Wenn nicht, stellen Sie sicher, dass Sie die Installationsanweisungen richtig befolgt und Elasticsearch Zeit zum vollständigen Starten gegeben haben.

      Um eine gründlichere Prüfung von Elasticsearch vorzunehmen, führen Sie den folgenden Befehl aus:

      • curl -XGET 'http://localhost:9200/_nodes?pretty'

      In der Ausgabe des obigen Befehls können Sie alle aktuellen Einstellungen für Knoten, Cluster, Anwendungspfade, Module und mehr überprüfen.

      Schritt 5 — Verwenden von Elasticsearch

      Um mit der Verwendung von Elasticsearch zu beginnen, fügen wir zuerst Daten hinzu. Elasticsearch nutzt eine RESTful-API, die auf die üblichen CRUD-Befehle reagiert: create, read, update und delete. Dazu verwenden wir erneut den Befehl cURL.

      Sie können Ihren ersten Eintrag wie folgt hinzufügen:

      • curl -XPOST -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

      Sie sollten die folgende Antwort erhalten:

      Output

      {"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}

      Mit cURL haben wir eine HTTP-POST-Anfrage an den Elasticsearch-Server gesendet. Der URI der Anfrage war /tutorial/helloworld/1 mit mehreren Parametern:

      • tutorial ist der Index der Daten in Elasticsearch.
      • helloworld ist der Typ.
      • 1 ist die ID unseres Eintrags unter dem obigen Index und Typ.

      Sie können diesen ersten Eintrag mit einer HTTP-GET-Anfrage abrufen.

      • curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

      Die Ausgabe sollte wie folgt aussehen:

      Output

      {"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}

      Um einen bestehenden Eintrag zu ändern, können Sie eine HTTP-PUT-Anfrage verwenden.

      • curl -X PUT -H "Content-Type: application/json" 'localhost:9200/tutorial/helloworld/1?pretty' -d '
      • {
      • "message": "Hello, People!"
      • }'

      Elasticsearch sollte die erfolgreiche Änderung wie folgt bestätigen:

      Output

      { "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }

      Im obigen Beispiel haben wir die message des ersten Eintrags in “Hello, People!” geändert. Damit wurde die Versionsnummer automatisch auf 2 erhöht.

      Vielleicht haben Sie in der obigen Anfrage das zusätzliche Argument pretty bemerkt. Das ermöglicht ein visuell lesbares Format, sodass Sie jedes Datenfeld in eine neue Zeile schreiben können. Sie können Ihre Ergebnisse beim Abruf von Daten auch „verschönern“, um eine besser lesbare Ausgabe zu erhalten, indem Sie den folgenden Befehl eingeben:

      • curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?pretty'

      Nun wird die Antwort so formatiert, dass sie visuell analysiert werden kann:

      Output

      { "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "_seq_no" : 1, "_primary_term" : 1, "found" : true, "_source" : { "message" : "Hello, People!" } } }

      Wir haben jetzt Daten in Elasticsearch hinzugefügt und abgefragt. Um mehr über die anderen Operationen zu erfahren, konsultieren Sie bitte die API-Dokumentation.

      Zusammenfassung

      Sie haben Elasticsearch jetzt installiert, konfiguriert und erstmals verwendet. Um die Funktionalität von Elasticsearch weiter zu erkunden, lesen Sie bitte die offizielle Elasticsearch-Dokumentation.



      Source link