Mit einem Virtual Private Network (VPN) kannst du dich in nicht vertrauenswürdigen Netzwerken bewegen, als wärst du in einem privaten Netzwerk. Es gibt dir die Freiheit, mit deinem Smartphone oder Laptop sicher auf das Internet zuzugreifen, wenn du mit einem nicht vertrauenswürdigen Netzwerk verbunden bist, z. B. mit dem WLAN eines Hotels oder Cafés.
In Kombination mit HTTPS-Verbindungen kannst du so deine drahtlosen Anmeldungen und Transaktionen absichern. Du kannst geografische Beschränkungen und Zensur umgehen und deinen Standort sowie unverschlüsselten HTTP-Verkehr vor nicht vertrauenswürdigen Netzwerken schützen.
OpenVPN ist eine voll funktionsfähige Open-Source Transport Layer Security (TLS) VPN-Lösung, die eine Vielzahl von Konfigurationen zulässt. In dieser Anleitung wirst du OpenVPN auf einem Ubuntu 22.04 Server einrichten und ihn dann so konfigurieren, dass er von einem Client-Rechner aus erreichbar ist.
Voraussetzungen
Um diesem Tutorial zu folgen, brauchst du:
Einen Ubuntu 22.04 Server mit einem sudo non-root Benutzer und einer aktivierten Firewall. Um diesen einzurichten, kannst du dich an die Anleitung zur Ersteinrichtung des Servers mit Ubuntu 22.04 halten. In dieser Anleitung bezeichnen wir diesen Server als OpenVPN-Server.
Einen separaten Ubuntu 22.04-Server, der als private Zertifizierungsstelle (CA) eingerichtet wird und den wir in diesem Leitfaden als CA-Server bezeichnen. Nachdem du die Schritte aus dem Leitfaden zur Ersteinrichtung des Servers auf diesem Server ausgeführt hast, kannst du die Schritte 1 bis 3 unseres Leitfadens zum Einrichten und Konfigurieren einer Zertifizierungsstelle (CA) unter Ubuntu 22.04 befolgen, um dies zu erreichen.
Obwohl es technisch möglich ist, deinen OpenVPN-Server oder deinen lokalen Rechner als CA zu verwenden, wird dies nicht empfohlen, da es dein VPN für einige Sicherheitslücken öffnet. Laut der offiziellen OpenVPN-Dokumentation solltest du deine CA auf einem eigenständigen Rechner platzieren, der ausschließlich für das Importieren und Signieren von Zertifikatsanfragen zuständig ist. Aus diesem Grund wird in dieser Anleitung davon ausgegangen, dass sich deine CA auf einem separaten Ubuntu 22.04-Server befindet, auf dem auch ein Nicht-Root-Benutzer mit sudo-Rechten und eine einfache Firewall aktiviert sind.
Außerdem brauchst du einen Client-Rechner, mit dem du dich mit deinem OpenVPN-Server verbinden kannst. In dieser Anleitung nennen wir das den OpenVPN-Client. Für die Zwecke dieser Anleitung wird empfohlen, dass du deinen lokalen Rechner als OpenVPN-Client verwendest.
Wenn du diese Voraussetzungen erfüllst, kannst du mit der Einrichtung und Konfiguration eines OpenVPN-Servers unter Ubuntu 22.04 beginnen.
Wenn du bei der Konfiguration dieser Server die Passwortauthentifizierung deaktivierst, kann es später in diesem Leitfaden zu Problemen bei der Übertragung von Dateien zwischen den Servern kommen. Um dieses Problem zu lösen, kannst du die Passwortauthentifizierung auf jedem Server wieder aktivieren. Alternativ kannst du für jeden Server ein SSH-Schlüsselpaar erstellen und dann den öffentlichen SSH-Schlüssel des OpenVPN-Servers zur authorized_keys-Datei des CA-Rechners hinzufügen und umgekehrt. Wie du SSH-Schlüssel unter Ubuntu 22.04 einrichtest, erfährst du in der Anleitung zu diesen beiden Lösungen.
Schritt 1 - Installation von OpenVPN und Easy-RSA
Der erste Schritt in diesem Lernprogramm ist die Installation von OpenVPN und Easy-RSA. Easy-RSA ist ein Tool zur Verwaltung der Public Key Infrastructure (PKI), mit dem du auf dem OpenVPN-Server eine Zertifikatsanforderung erstellst, die du dann auf dem CA-Server verifizierst und signierst.
Als erstes aktualisierst du den Paketindex deines OpenVPN Servers und installierst OpenVPN und Easy-RSA. Beide Pakete sind in den Standard-Repositories von Ubuntu verfügbar, du kannst also apt für die Installation verwenden:
sudo apt update
sudo apt install openvpn easy-rsa
Als Nächstes musst du als Nicht-Root-Benutzer ein neues Verzeichnis mit dem Namen ~/easy-rsa auf dem OpenVPN-Server erstellen:
mkdir ~/easy-rsa
Jetzt musst du einen Symlink von dem easyrsa-Skript, das das Paket installiert hat, in das ~/easy-rsa-Verzeichnis erstellen, das du gerade erstellt hast:
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
Stelle sicher, dass der Eigentümer des Verzeichnisses dein sudo-Benutzer ist, der nicht root ist, und schränke den Zugriff mit chmod auf diesen Benutzer ein:
sudo chown sammy ~/easy-rsa
chmod 700 ~/easy-rsa
Sobald diese Programme installiert und an die richtigen Stellen auf deinem System verschoben wurden, musst du im nächsten Schritt eine Public Key Infrastructure (PKI) auf dem OpenVPN-Server erstellen, damit du TLS-Zertifikate für Clients und andere Server, die sich mit deinem VPN verbinden, anfordern und verwalten kannst.
Schritt 2 - Erstellen einer PKI für OpenVPN
Bevor du den privaten Schlüssel und das Zertifikat deines OpenVPN-Servers erstellen kannst, musst du ein lokales Public Key Infrastructure-Verzeichnis auf deinem OpenVPN-Server anlegen. Du wirst dieses Verzeichnis verwenden, um die Zertifikatsanfragen des Servers und der Clients zu verwalten, anstatt sie direkt auf deinem CA-Server zu stellen.
Um ein PKI-Verzeichnis auf deinem OpenVPN-Server zu erstellen, musst du eine Datei namens vars mit einigen Standardwerten füllen. Zuerst gehst du in das easy-rsa-Verzeichnis, dann erstellst und bearbeitest du die vars-Datei mit nano oder deinem bevorzugten Texteditor.
cd ~/easy-rsa
nano vars
Sobald die Datei geöffnet ist, fügst du die folgenden zwei Zeilen ein:
~/easy-rsa/vars
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
Dies sind die einzigen beiden Zeilen, die du in der vars-Datei auf deinem OpenVPN-Server brauchst, da er nicht als Zertifizierungsstelle verwendet wird. Sie stellen sicher, dass deine privaten Schlüssel und Zertifikatsanfragen so konfiguriert sind, dass sie moderne Elliptic Curve Cryptography (ECC) verwenden, um Schlüssel und sichere Signaturen für deine Clients und den OpenVPN-Server zu erzeugen.
Wenn du deine OpenVPN- und CA-Server für die Verwendung von ECC konfigurierst, können Client und Server beim Versuch, einen gemeinsamen symmetrischen Schlüssel zu erstellen, Elliptic Curve-Algorithmen für den Austausch verwenden. Die Verwendung von ECC für den Schlüsselaustausch ist deutlich schneller als die Verwendung von Diffie-Hellman mit dem klassischen RSA-Algorithmus, da die Zahlen viel kleiner und die Berechnungen schneller sind.
Hintergrund: Wenn sich Clients mit OpenVPN verbinden, verwenden sie eine asymmetrische Verschlüsselung (auch bekannt als öffentlicher/privater Schlüssel), um einen TLS-Handshake durchzuführen. Bei der Übertragung des verschlüsselten VPN-Verkehrs verwenden Server und Clients jedoch eine symmetrische Verschlüsselung, die auch als Shared Key-Verschlüsselung bezeichnet wird.
Bei der symmetrischen Verschlüsselung ist der Rechenaufwand viel geringer als bei der asymmetrischen: Die Zahlen, die verwendet werden, sind viel kleiner, und moderne CPUs haben Befehle integriert, um optimierte symmetrische Verschlüsselungsoperationen durchzuführen. Um von der asymmetrischen zur symmetrischen Verschlüsselung zu wechseln, verwenden der OpenVPN-Server und der Client den Elliptic Curve Diffie-Hellman (ECDH)-Algorithmus, um sich so schnell wie möglich auf einen gemeinsamen geheimen Schlüssel zu einigen.
Sobald du die vars-Datei ausgefüllt hast, kannst du mit der Erstellung des PKI-Verzeichnisses fortfahren. Dazu führst du das easyrsa-Skript mit der Option init-pki aus. Obwohl du diesen Befehl bereits auf dem CA-Server als Teil der Voraussetzungen ausgeführt hast, ist es notwendig, ihn hier auszuführen, weil dein OpenVPN-Server und der CA-Server getrennte PKI-Verzeichnisse haben:
./easyrsa init-pki
Beachte, dass du auf deinem OpenVPN-Server keine Zertifizierungsstelle einrichten musst. Dein CA-Server ist allein für die Validierung und Signierung von Zertifikaten zuständig. Die PKI auf deinem VPN-Server dient nur als bequemer und zentraler Ort, um Zertifikatsanträge und öffentliche Zertifikate zu speichern.
Nachdem du deine PKI auf dem OpenVPN-Server initialisiert hast, kannst du zum nächsten Schritt übergehen, nämlich der Erstellung einer OpenVPN-Server-Zertifikatsanforderung und eines privaten Schlüssels.
Schritt 3 - Erstellen einer OpenVPN-Server-Zertifikatsanforderung und eines privaten Schlüssels
Nachdem alle Voraussetzungen auf deinem OpenVPN-Server installiert sind, musst du im nächsten Schritt einen privaten Schlüssel und einen Certificate Signing Request (CSR) auf deinem OpenVPN-Server erstellen. Danach übermittelst du den Antrag an deine Zertifizierungsstelle, damit sie ihn signiert und das erforderliche Zertifikat erstellt. Sobald du ein signiertes Zertifikat hast, überträgst du es zurück auf den OpenVPN-Server und installierst es, damit der Server es verwenden kann.
Um zu beginnen, navigiere als Nicht-Root-Benutzer zum Verzeichnis ~/easy-rsa auf deinem OpenVPN-Server:
cd ~/easy-rsa
Nun rufst du die easyrsa mit der Option gen-req auf, gefolgt von einem Common Name (CN) für den Rechner. Der CN kann ein beliebiger Name sein, aber es kann hilfreich sein, ihn etwas aussagekräftig zu gestalten. In dieser Anleitung wird der CN des OpenVPN-Servers server sein. Achte darauf, dass du auch die Option nopass angibst. Andernfalls wird die Anfragedatei mit einem Passwort geschützt, was später zu Problemen mit den Zugriffsrechten führen kann.
Wenn du hier einen anderen Namen als server wählst, musst du einige der folgenden Anweisungen anpassen. Wenn du zum Beispiel die erzeugten Dateien in das Verzeichnis /etc/openvpn kopierst, musst du die richtigen Namen ersetzen. Außerdem musst du später die Datei /etc/openvpn/server.conf ändern, damit sie auf die richtigen .crt- und .key-Dateien verweist.
./easyrsa gen-req server nopass
Dadurch wird ein privater Schlüssel für den Server und eine Zertifikatsanforderungsdatei namens server.req erstellt. Kopiere den Serverschlüssel in das Verzeichnis /etc/openvpn/server:
sudo cp /home/rene/easy-rsa/pki/private/server.key /etc/openvpn/server/
Nachdem du diese Schritte ausgeführt hast, hast du erfolgreich einen privaten Schlüssel für deinen OpenVPN-Server erstellt. Außerdem hast du einen Certificate Signing Request für den OpenVPN-Server erstellt. Die CSR ist nun bereit, von deiner CA signiert zu werden. Im nächsten Abschnitt dieses Tutorials erfährst du, wie du eine CSR mit dem privaten Schlüssel deines CA-Servers signierst.
Schritt 4 - Signieren der Zertifikatsanforderung des OpenVPN-Servers
Im vorherigen Schritt hast du eine Certificate Signing Request (CSR) und einen privaten Schlüssel für den OpenVPN-Server erstellt. Nun muss der CA-Server von dem Serverzertifikat erfahren und es validieren. Sobald die CA das Zertifikat validiert und an den OpenVPN-Server weiterleitet, können Clients, die deiner CA vertrauen, auch dem OpenVPN-Server vertrauen.
Verwende auf dem OpenVPN-Server als Nicht-Root-Benutzer SCP oder eine andere Übertragungsmethode, um die Zertifikatsanforderung server.req zum Signieren auf den CA-Server zu kopieren:
scp /home/rene/easy-rsa/pki/reqs/server.req rene@Ihre_ca_server_ip:/tmp
Wenn du die Anleitung "How To Set Up and Configure a Certificate Authority (CA) on Ubuntu 22.04" befolgt hast, musst du dich im nächsten Schritt als Nicht-Root-Benutzer, den du für die Verwaltung deiner CA eingerichtet hast, beim CA-Server anmelden. Du wechselst in das Verzeichnis ~/easy-rsa, in dem du deine PK erstellt hast, und importierst dann die Zertifikatsanforderung mit dem easyrsa-Skript:
cd ~/easy-rsa
./easyrsa import-req /tmp/server.req server
Als Nächstes signierst du die Anfrage, indem du das easyrsa-Skript mit der Option sign-req ausführst, gefolgt von der Anfrageart und dem Common Name. Der Anfragetyp kann entweder Client oder Server sein. Da du mit der Zertifikatsanforderung des OpenVPN-Servers arbeitest, solltest du den Server-Anforderungstyp verwenden:
./easyrsa sign-req server server
In der Ausgabe wirst du aufgefordert, zu überprüfen, ob die Anfrage aus einer vertrauenswürdigen Quelle stammt. Gib "ja" ein und bestätige mit ENTER.
Wenn du deinen privaten CA-Schlüssel verschlüsselt hast, wirst du an dieser Stelle nach deinem Passwort gefragt.
Wenn diese Schritte abgeschlossen sind, hast du die Zertifikatsanforderung des OpenVPN-Servers mit dem privaten Schlüssel des CA-Servers signiert. Die resultierende Datei server.crt enthält den öffentlichen Schlüssel des OpenVPN-Servers sowie eine Signatur des CA-Servers. Der Sinn der Signatur ist es, jedem, der dem CA-Server vertraut, zu sagen, dass er auch dem OpenVPN-Server vertrauen kann, wenn er sich mit ihm verbindet.
Um die Konfiguration der Zertifikate abzuschließen, kopierst du die Dateien server.crt und ca.crt vom CA-Server auf den OpenVPN-Server:
scp pki/issued/server.crt rene@dein_vpn_server_ip:/tmp
scp pki/ca.crt rene@Ihre_vpn_server_ip:/tmp
Zurück auf deinem OpenVPN-Server kopierst du nun die Dateien von /tmp nach /etc/openvpn/server:
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server
Jetzt ist dein OpenVPN-Server fast bereit, Verbindungen zu akzeptieren. Im nächsten Schritt führst du einige zusätzliche Schritte durch, um die Sicherheit des Servers zu erhöhen.
Schritt 5 - OpenVPN-Kryptomaterial konfigurieren
Für eine zusätzliche Sicherheitsebene fügst du einen zusätzlichen gemeinsamen geheimen Schlüssel hinzu, den der Server und alle Clients mit der tls-crypt-Direktive von OpenVPN verwenden. Diese Option wird verwendet, um das TLS-Zertifikat zu verschleiern, das verwendet wird, wenn ein Server und ein Client sich zum ersten Mal miteinander verbinden. Sie wird auch vom OpenVPN-Server verwendet, um eingehende Pakete schnell zu überprüfen: Wenn ein Paket mit dem Pre-Shared Key signiert ist, verarbeitet der Server es; wenn es nicht signiert ist, weiß der Server, dass es aus einer nicht vertrauenswürdigen Quelle stammt und kann es ohne zusätzliche Entschlüsselung verwerfen.
Diese Option stellt sicher, dass dein OpenVPN-Server in der Lage ist, unauthentifizierten Datenverkehr, Port-Scans und Denial-of-Service-Angriffe zu bewältigen, die Serverressourcen binden können. Außerdem wird es dadurch schwieriger, OpenVPN-Netzwerkverkehr zu identifizieren.
Um den tls-crypt Pre-Shared Key zu erzeugen, führe 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. Kopiere sie in das Verzeichnis /etc/openvpn/server/:
sudo cp ta.key /etc/openvpn/server
Mit diesen Dateien auf dem OpenVPN-Server bist du bereit, Client-Zertifikate und Schlüsseldateien für deine Benutzer zu erstellen, mit denen du dich mit dem VPN verbinden kannst.
Schritt 6 - Client-Zertifikat und Schlüsselpaar generieren
Obwohl du einen privaten Schlüssel und eine Zertifikatsanforderung auf deinem Client-Rechner generieren und dann zur Signierung an die Zertifizierungsstelle schicken kannst, beschreibt dieser Leitfaden einen Prozess zur Generierung der Zertifikatsanforderung auf dem OpenVPN-Server. Der Vorteil dieser Vorgehensweise ist, dass du ein Skript erstellen kannst, das automatisch Client-Konfigurationsdateien erzeugt, die alle benötigten Schlüssel und Zertifikate enthalten. So vermeidest du die Übertragung von Schlüsseln, Zertifikaten und Konfigurationsdateien an die Clients und rationalisierst den Prozess des VPN-Beitritts.
In diesem Leitfaden wird ein einziges Paar aus Client-Schlüssel und -Zertifikat erstellt. Wenn du mehr als einen Client hast, kannst du diesen Vorgang für jeden einzelnen wiederholen. Bitte beachte jedoch, dass du dem Skript für jeden Client einen eindeutigen Namenswert übergeben musst. In dieser Anleitung wird das erste Zertifikat/Schlüsselpaar als client1 bezeichnet.
Erstelle zunächst eine Verzeichnisstruktur in deinem Home-Verzeichnis, in der du das Client-Zertifikat und die Schlüsseldateien speicherst:
mkdir -p ~/client-configs/keys
Da du die Zertifikats-/Schlüsselpaare und die Konfigurationsdateien deiner Kunden in diesem Verzeichnis speichern wirst, solltest du zur Sicherheit die Berechtigungen für dieses Verzeichnis festlegen:
chmod -R 700 ~/client-configs
Als Nächstes navigierst du zurück in das EasyRSA-Verzeichnis und führst das easyrsa-Skript mit den Optionen gen-req und nopass sowie dem Common Name für den Client aus:
cd ~/easy-rsa
./easyrsa gen-req client1 nopass
Drücke ENTER, um den gemeinsamen Namen zu bestätigen. Kopiere dann die Datei client1.key in das Verzeichnis ~/client-configs/keys/, das du zuvor erstellt hast:
cp pki/private/client1.key ~/client-configs/keys/
Übertrage als Nächstes die Datei client1.req mit einer sicheren Methode auf deinen CA-Server:
scp pki/reqs/client1.req rene@dein_ca_server_ip:/tmp
Melde dich nun bei deinem CA Server an. Navigiere dann zum EasyRSA-Verzeichnis und importiere die Zertifikatsanforderung:
cd ~/easy-rsa
./easyrsa import-req /tmp/client1.req client1
Als Nächstes signierst du die Anfrage auf dieselbe Weise, wie du es im vorherigen Schritt für den Server getan hast. Dieses Mal musst du jedoch den Typ der Client-Anfrage angeben:
./easyrsa sign-req client client1
Wenn du dazu aufgefordert wirst, bestätige mit "Ja", dass du die Zertifikatsanforderung signieren willst und dass sie aus einer vertrauenswürdigen Quelle stammt:
Gib das Wort "yes" ein, um fortzufahren.
Wenn du deinen CA-Schlüssel verschlüsselt hast, wirst du auch hier zur Eingabe deines Passworts aufgefordert.
Dadurch wird eine Client-Zertifikatsdatei mit dem Namen client1.crt erstellt. Übertrage diese Datei zurück auf den Server:
scp pki/issued/client1.crt rene@deine_server_ip:/tmp
Zurück auf deinem OpenVPN-Server kopierst du das Client-Zertifikat in das Verzeichnis ~/client-configs/keys/:
cp /tmp/client1.crt ~/client-configs/keys/
Kopiere als Nächstes auch die Dateien ca.crt und ta.key in das Verzeichnis ~/client-configs/keys/ und setze die entsprechenden Berechtigungen für deinen sudo-Benutzer:
cp ~/easy-rsa/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
sudo chown rene.rene ~/client-configs/keys/*
Damit sind die Zertifikate und Schlüssel deines Servers und deines Clients erstellt und in den entsprechenden Verzeichnissen auf deinem OpenVPN-Server gespeichert. Es gibt noch ein paar Aktionen, die mit diesen Dateien durchgeführt werden müssen, aber die kommen in einem späteren Schritt. Jetzt kannst du mit der Konfiguration von OpenVPN fortfahren.
Schritt 7 - OpenVPN konfigurieren
Wie viele andere weit verbreitete Open-Source-Tools verfügt auch OpenVPN über zahlreiche Konfigurationsoptionen, mit denen du deinen Server an deine speziellen Bedürfnisse anpassen kannst. In diesem Abschnitt gebe ich dir eine Anleitung, wie du eine OpenVPN-Serverkonfiguration einrichtest, die auf einer der Beispielkonfigurationsdateien basiert, die in der Dokumentation dieser Software enthalten sind.
Kopiere zunächst die Beispieldatei server.conf als Ausgangspunkt für deine eigene Konfigurationsdatei:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/
Öffne die neue Datei zum Bearbeiten mit nano oder einem Texteditor deiner Wahl:
sudo nano /etc/openvpn/server/server.conf
Du musst ein paar Zeilen in dieser Datei ändern. Als erstes musst du den HMAC-Abschnitt der Konfiguration finden, indem du nach der Direktive tls-auth suchst. Diese Zeile ist standardmäßig aktiviert. Kommentiere sie aus, indem du ein ; an den Anfang der Zeile setzt. Füge dann eine neue Zeile ein, die nur den Wert tls-crypt ta.key enthält:
/etc/openvpn/server/server.conf
;tls-auth ta.key 0 # Diese Datei ist geheim
tls-crypt ta.key
Als Nächstes suchst du den Abschnitt über kryptografische Verschlüsselungen, indem du nach den Cipher-Zeilen suchst. Der Standardwert ist AES-256-CBC, aber die Verschlüsselung AES-256-GCM bietet eine bessere Verschlüsselung und Leistung und wird von aktuellen OpenVPN-Clients gut unterstützt. Kommentiere den Standardwert aus, indem du am Anfang dieser Zeile ein ; Zeichen hinzufügst, und füge danach eine weitere Zeile mit dem aktualisierten Wert AES-256-GCM ein:
/etc/openvpn/server/server.conf
;Verschlüsselung AES-256-CBC
Verschlüsselung AES-256-GCM
Füge direkt nach dieser Zeile eine auth-Direktive hinzu, um den HMAC Message Digest Algorithmus auszuwählen. Hierfür ist SHA256 eine gute Wahl:
/etc/openvpn/server/server.conf
auth SHA256
Als nächstes suchst du die Zeile mit der dh-Direktive, die Diffie-Hellman-Parameter definiert. Da du alle Zertifikate so konfiguriert hast, dass sie Elliptic Curve Cryptography verwenden, ist eine Diffie-Hellman-Seed-Datei nicht nötig. Kommentiere die bestehende Zeile aus, die wie dh dh2048.pem oder dh dh.pem aussieht. Der Dateiname für den Diffie-Hellman-Schlüssel kann ein anderer sein als der, der in der Beispiel-Serverkonfigurationsdatei angegeben ist. Füge danach eine Zeile mit dem Inhalt dh none ein:
/etc/openvpn/server/server.conf
;dh dh2048.pem
dh none
Als Nächstes sollte OpenVPN ohne Rechte laufen, sobald es gestartet ist. Deshalb musst du ihm sagen, dass es mit dem Benutzer nobody und der Gruppe nogroup laufen soll. Um dies zu aktivieren, musst du die Zeilen user nobody und group nogroup finden und auskommentieren, indem du das Zeichen ; am Anfang jeder Zeile entfernst:
/etc/openvpn/server/server.conf
Benutzer nobody
Gruppe nogroup
(Optional) DNS-Änderungen vornehmen, um den gesamten Datenverkehr über das VPN umzuleiten
Die obigen Einstellungen stellen die VPN-Verbindung zwischen deinem Client und dem Server her, zwingen aber keine Verbindungen, den Tunnel zu nutzen. Wenn du das VPN nutzen möchtest, um den gesamten Datenverkehr deiner Clients über das VPN zu leiten, wirst du wahrscheinlich einige zusätzliche Einstellungen auf den Client-Computern vornehmen wollen.
Um damit zu beginnen, musst du die Zeile mit der Push-Funktion "redirect-gateway def1 bypass-dhcp" finden und auskommentieren. Dadurch wird dein Client angewiesen, seinen gesamten Datenverkehr über deinen OpenVPN-Server umzuleiten. Beachte, dass die Aktivierung dieser Funktion zu Verbindungsproblemen mit anderen Netzwerkdiensten, wie SSH, führen kann:
/etc/openvpn/server/server.conf
push "redirect-gateway def1 bypass-dhcp"
Direkt unter dieser Zeile findest du den Abschnitt dhcp-option. Entferne auch hier das ; am Anfang der beiden Zeilen, um sie auszukommentieren:
/etc/openvpn/server/server.conf
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 1.0.0.1"
Diese Zeilen weisen deinen Client an, die kostenlosen OpenDNS-Resolver an den aufgeführten IP-Adressen zu verwenden. Wenn du andere DNS-Resolver bevorzugst, kannst du sie anstelle der markierten IPs verwenden.
Dies hilft den Clients bei der Neukonfiguration ihrer DNS-Einstellungen, damit sie den VPN-Tunnel als Standard-Gateway verwenden.
(Optional) Port und Protokoll anpassen
Standardmäßig verwendet der OpenVPN-Server Port 1194 und das UDP-Protokoll, um Client-Verbindungen zu akzeptieren. Wenn du aufgrund von restriktiven Netzwerkumgebungen, in denen sich deine Kunden befinden könnten, einen anderen Port verwenden musst, kannst du die Port-Option ändern. Wenn du keine Webinhalte auf deinem OpenVPN-Server hostest, ist Port 443 eine beliebte Wahl, da er normalerweise durch Firewall-Regeln zugelassen wird.
Um OpenVPN so zu ändern, dass es auf Port 443 lauscht, öffne die Datei server.conf und suche die Zeile, die wie folgt aussieht:
/etc/openvpn/server/server.conf
Port 1194
Bearbeite sie so, dass der Port 443 ist:
/etc/openvpn/server/server.conf
Port 443
Oftmals ist auch das Protokoll auf diesen Port beschränkt. Wenn das der Fall ist, ändere das Protokoll in der proto-Zeile unterhalb der port-Zeile von udp auf tcp:
/etc/openvpn/server/server.conf
proto tcp
Wenn du das Protokoll auf TCP umstellst, musst du den Wert der Anweisung explicit-exit-notify von 1 auf 0 ändern, da diese Anweisung nur von UDP verwendet wird. Wenn du das nicht tust, während du TCP verwendest, führt das zu Fehlern, wenn du den OpenVPN-Dienst startest.
Suche die Zeile explicit-exit-notify am Ende der Datei und ändere den Wert auf 0:
/etc/openvpn/server/server.conf
explicit-exit-notify 0
Wenn du keinen Bedarf hast, einen anderen Port und ein anderes Protokoll zu verwenden, ist es am besten, wenn du diese Einstellungen unverändert lässt.
(Optional) Verweise auf nicht standardmäßige Anmeldedaten
Wenn du beim Befehl ./easyrsa gen-req server einen anderen Namen gewählt hast, musst du die Zeilen cert und key in der Konfigurationsdatei server.conf so ändern, dass sie auf die entsprechenden .crt- und .key-Dateien verweisen. Wenn du den Standardnamen server verwendet hast, ist dies bereits richtig eingestellt:
/etc/openvpn/server/server.conf
cert server.crt
key server.key
Wenn du fertig bist, speichere und schließe die Datei.
Damit hast du die Konfiguration deiner allgemeinen OpenVPN-Einstellungen abgeschlossen. Im nächsten Schritt passt du die Netzwerkoptionen des Servers an.
Schritt 8 - Anpassen der Netzwerkkonfiguration des OpenVPN-Servers
Es gibt einige Aspekte der Netzwerkkonfiguration des Servers, die angepasst werden müssen, damit OpenVPN den Datenverkehr korrekt durch das VPN leiten kann. Der erste Aspekt ist die IP-Weiterleitung, eine Methode, mit der festgelegt wird, wohin der IP-Verkehr geleitet werden soll. Das ist wichtig für die VPN-Funktionalität, die dein Server bereitstellt.
Um die Standardeinstellung für die IP-Weiterleitung deines OpenVPN-Servers anzupassen, öffne die Datei /etc/sysctl.conf mit nano oder deinem bevorzugten Editor:
sudo nano /etc/sysctl.conf
Füge dann die folgende Zeile am Ende der Datei ein:
/etc/sysctl.conf
net.ipv4.ip_forward = 1
Speichere und schließe die Datei, wenn du fertig bist.
Um die Datei zu lesen und die neuen Werte für die aktuelle Sitzung zu laden, gibst du ein:
sudo sysctl -p
Ausgabe: net.ipv4.ip_forward = 1
Jetzt ist dein OpenVPN-Server in der Lage, eingehenden Datenverkehr von einem Ethernet-Gerät zu einem anderen weiterzuleiten. 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 weiterleiten kann. Mit dieser Konfiguration wird der gesamte Webverkehr deines Clients über die IP-Adresse deines Servers geleitet und die öffentliche IP-Adresse deines Clients wird effektiv versteckt.
Im nächsten Schritt musst du einige Firewall-Regeln konfigurieren, um sicherzustellen, dass der Verkehr zu und von deinem OpenVPN-Server ordnungsgemäß fließt.
Schritt 9 - Firewall-Konfiguration
Bis jetzt hast du OpenVPN auf deinem Server installiert, konfiguriert und die Schlüssel und Zertifikate generiert, die dein Client für den Zugriff auf das VPN benötigt. Allerdings hast du OpenVPN noch keine Anweisungen gegeben, wohin der eingehende Webverkehr der Clients geleitet werden soll. Du kannst festlegen, wie der Server den Client-Datenverkehr behandeln soll, indem du einige Firewall-Regeln und Routing-Konfigurationen einrichtest.
Wenn du die Voraussetzungen am Anfang dieses Tutorials beachtet hast, sollte ufw bereits auf deinem Server installiert sein und laufen. Um OpenVPN durch die Firewall zu lassen, musst du Masquerading aktivieren, ein iptables-Konzept, das eine dynamische Netzwerkadressübersetzung (NAT) ermöglicht, um Client-Verbindungen korrekt zu routen.
Bevor du die Firewall-Konfigurationsdatei öffnest, um die Masquerading-Regeln hinzuzufügen, musst du zunächst die öffentliche Netzwerkschnittstelle deines Rechners finden. Gib dazu ein:
ip route list default
Deine öffentliche Schnittstelle ist die Zeichenfolge in der Ausgabe dieses Befehls, die auf das Wort "dev" folgt. Das Ergebnis zeigt zum Beispiel die Schnittstelle eth0, die unten hervorgehoben ist:
Ausgabe: default via 198.11.23.167 dev eth0 proto static
Wenn du die Schnittstelle mit deiner Standardroute verbunden hast, öffne die Datei /etc/ufw/before.rules, um die entsprechende Konfiguration hinzuzufügen:
sudo nano /etc/ufw/before.rules
UFW-Regeln werden normalerweise mit dem Befehl ufw hinzugefügt. Die Regeln in der Datei before.rules werden jedoch gelesen und in Kraft gesetzt, bevor die herkömmlichen UFW-Regeln geladen werden. Füge am Anfang der Datei die unten hervorgehobenen Zeilen ein. Damit wird die Standardrichtlinie für die POSTROUTING-Kette in der nat-Tabelle festgelegt und jeglicher Verkehr, der vom VPN kommt, maskiert. Denke daran, eth0 in der Zeile -A POSTROUTING durch die Schnittstelle zu ersetzen, die du im obigen Befehl angegeben hast:
# START OPENVPN REGELN
# NAT-Tabelle Regeln
*nat
:POSTROUTING ACCEPT [0:0]
# Erlaube den Verkehr vom OpenVPN-Client zu eth0 (wechsle zu der Schnittstelle, #die du entdeckt hast!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
#OPENVPN REGELN ENDE
Speichere und schließe die Datei, wenn du fertig bist.
Als Nächstes musst du UFW mitteilen, dass es auch weitergeleitete Pakete standardmäßig zulassen soll. Dazu öffnest du die Datei /etc/default/ufw:
sudo nano /etc/default/ufw
Suche darin die Direktive DEFAULT_FORWARD_POLICY und ändere den Wert von DROP auf ACCEPT:
/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
Speichere und schließe die Datei, wenn du fertig bist.
Als Nächstes musst du die Firewall selbst so anpassen, dass sie den Verkehr zu OpenVPN zulässt. Wenn du den Port und das Protokoll in der Datei /etc/openvpn/server.conf nicht geändert hast, musst du den UDP-Verkehr zum Port 1194 freigeben. Wenn du den Port und/oder das Protokoll geändert hast, ersetze die Werte, die du hier ausgewählt hast.
Falls du in der Anleitung vergessen hast, den SSH-Port hinzuzufügen, füge ihn hier ebenfalls hinzu:
sudo ufw allow 1194/udp
sudo ufw allow OpenSSH
Wenn du eine andere Firewall verwendest oder deine UFW-Konfiguration angepasst hast, musst du eventuell zusätzliche Firewall-Regeln hinzufügen. Wenn du zum Beispiel deinen gesamten Netzwerkverkehr über die VPN-Verbindung tunneln willst, musst du sicherstellen, dass Port 53 für DNS-Anfragen und Ports wie 80 und 443 für HTTP- bzw. HTTPS-Verkehr zugelassen sind. Wenn du andere Protokolle über das VPN verwendest, musst du auch für diese Regeln hinzufügen.
Nachdem du diese Regeln hinzugefügt hast, musst du UFW deaktivieren und wieder aktivieren, damit es neu startet und die Änderungen aus allen geänderten Dateien lädt:
sudo ufw disable
sudo ufw enable
Dein Server ist jetzt so konfiguriert, dass er den OpenVPN-Verkehr korrekt verarbeitet. Wenn die Firewall-Regeln in Kraft sind, kannst du den OpenVPN-Dienst auf dem Server starten.
Schritt 10 - OpenVPN starten
OpenVPN läuft als systemd-Dienst, du kannst also systemctl verwenden, um es zu verwalten. Du wirst OpenVPN so konfigurieren, dass es beim Booten gestartet wird, damit du dich jederzeit mit deinem VPN verbinden kannst, solange dein Server läuft. Dazu aktivierst du den OpenVPN-Dienst, indem du ihn zu systemctl hinzufügst:
sudo systemctl -f enable openvpn-server@server.service
Dann starte den OpenVPN-Dienst:
sudo systemctl start openvpn-server@server.service
Überprüfe mit folgendem Befehl, ob der OpenVPN-Dienst aktiv ist. In der Ausgabe sollte active (läuft) stehen:
sudo systemctl status openvpn-server@server.service
Du hast nun die serverseitige Konfiguration für OpenVPN abgeschlossen. Als Nächstes konfigurierst du deinen Client-Rechner und verbindest dich mit dem OpenVPN-Server.
Schritt 11 - Erstellen der Client-Konfigurationsinfrastruktur
Das Erstellen von Konfigurationsdateien für OpenVPN-Clients kann etwas kompliziert sein, da jeder Client seine eigene Konfiguration haben und mit den Einstellungen in der Konfigurationsdatei des Servers übereinstimmen muss. Anstatt eine einzige Konfigurationsdatei zu schreiben, die nur auf einem Client verwendet werden kann, wird in diesem Schritt ein Verfahren zum Aufbau einer Client-Konfigurationsinfrastruktur beschrieben, mit der du Konfigurationsdateien im Handumdrehen erstellen kannst. Zunächst erstellst du eine "Basis"-Konfigurationsdatei und dann ein Skript, mit dem du bei Bedarf individuelle Client-Konfigurationsdateien, Zertifikate und Schlüssel erstellen kannst.
Beginne mit der Erstellung eines neuen Verzeichnisses, in dem du die Client-Konfigurationsdateien in dem zuvor erstellten Verzeichnis client-configs speichern wirst:
mkdir -p ~/client-configs/files
Als Nächstes kopierst du eine Beispielkonfigurationsdatei in das Verzeichnis client-configs, um sie als Basiskonfiguration zu verwenden:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Öffne diese neue Datei mit nano oder deinem bevorzugten Texteditor:
nano ~/client-configs/base.conf
Suche darin nach der Remote-Direktive. Diese verweist den Client auf deine OpenVPN-Serveradresse - die öffentliche IP-Adresse deines OpenVPN-Servers. Wenn du dich entschieden hast, den Port zu ändern, an dem der OpenVPN-Server lauscht, musst du auch 1194 in den von dir gewählten Port ändern. Achte darauf, dass das Protokoll mit dem Wert übereinstimmt, den du in der Serverkonfiguration verwendest. Und entferne als die Kommentare zu den Benutzer- und Gruppenanweisungen, indem du das Zeichen ; am Anfang jeder Zeile entfernst:
remote deine_server_ip 1194
proto udp
user nobody
group nogroup
Finde die Direktiven, die ca, cert und key festlegen. Kommentiere diese Direktiven aus, da du die Zertifikate und Schlüssel gleich in der Datei selbst hinzufügen wirst. Kommentiere auch die tls-auth-Direktive aus, da du ta.key direkt in die Konfigurationsdatei des Clients einfügst (und der Server für die Verwendung von tls-crypt eingerichtet ist):
;ca ca.crt
;cert client.crt
;key client.key
;tls-auth ta.key 1
Spiegle die Verschlüsselungs- und Authentifizierungseinstellungen, die du in der Datei /etc/openvpn/server/server.conf festgelegt hast:
~/client-configs/base.conf
Verschlüsselung AES-256-GCM
auth SHA256
Als Nächstes fügst du irgendwo in der Datei die Direktive key-direction ein. Sie muss auf "1" gesetzt werden, damit das VPN auf dem Client-Rechner korrekt funktioniert:
~/client-configs/base.conf
key-direction 1
Zum Schluss fügst du ein paar auskommentierte Zeilen hinzu, um verschiedene Methoden zu behandeln, die Linux-basierte VPN-Clients für die DNS-Auflösung verwenden. Du fügst zwei ähnliche, aber getrennte Sätze von auskommentierten Zeilen hinzu. Der erste Satz ist für Clients, die nicht systemd-resolved zur Verwaltung von DNS verwenden. Diese Clients verlassen sich auf das Dienstprogramm resolvconf, um die 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
Füge nun eine weitere Reihe von Zeilen für Clients hinzu, die systemd-resolved für die DNS-Auflösung verwenden:
~/client-configs/base.conf
; script-security 2
up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE .
Speichere und schließe die Datei, wenn du fertig bist.
Als Nächstes erstellst du ein Skript, das deine Basiskonfiguration mit den relevanten Zertifikats-, Schlüssel- und Verschlüsselungsdateien kompiliert und die generierte Konfiguration im Verzeichnis ~/client-configs/files ablegt. Öffne eine neue Datei namens make_config.sh im Verzeichnis ~/client-configs:
nano ~/client-configs/make_config.sh
Füge darin den folgenden Inhalt ein:
#!/bin/bash
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
Speichere und schließe die Datei, wenn du fertig bist.
Bevor du weitermachst, musst du diese Datei als ausführbar markieren, indem du eingibst:
chmod 700 ~/client-configs/make_config.sh
Dieses Skript erstellt eine Kopie der base.conf-Datei, sammelt alle Zertifikats- und Schlüsseldateien, die du für deinen Client erstellt hast, extrahiert deren Inhalt, fügt ihn an die Kopie der Basiskonfigurationsdatei an und exportiert den gesamten Inhalt in eine neue Client-Konfigurationsdatei. Das bedeutet, dass du die Konfigurations-, Zertifikats- und Schlüsseldateien des Clients nicht mehr separat verwalten musst, sondern alle erforderlichen Informationen an einem Ort gespeichert sind. Der Vorteil dieser Methode ist, dass du mit diesem Skript schnell eine neue Konfigurationsdatei erstellen und sicherstellen kannst, dass alle wichtigen Informationen an einem einzigen, leicht zugänglichen Ort gespeichert sind, wenn du in Zukunft einen neuen Client hinzufügen musst.
Bitte beachte, dass du jedes Mal, wenn du einen neuen Client hinzufügst, neue Schlüssel und Zertifikate für ihn erzeugen musst, bevor du dieses Skript ausführen und seine Konfigurationsdatei erstellen kannst. Im nächsten Schritt wirst du einige Übungen mit diesem Skript machen.
Schritt 12 - Generierung von Client-Konfigurationen
Wenn du der Anleitung gefolgt bist, hast du in Schritt 6 ein Client-Zertifikat und einen Schlüssel mit den Namen client1.crt bzw. client1.key erstellt. Du kannst eine Konfigurationsdatei für diese Anmeldedaten erstellen, indem du in das Verzeichnis ~/client-configs wechselst und das Skript ausführst, das du am Ende des vorherigen Schrittes erstellt hast:
cd ~/client-configs
./make_config.sh client1
Dadurch wird eine Datei namens client1.ovpn in deinem Verzeichnis ~/client-configs/files erstellt:
Du musst diese Datei auf das Gerät übertragen, das du als Client verwenden willst. Das kann zum Beispiel dein lokaler Computer oder ein mobiles Gerät sein.
Welche Anwendungen du für diese Übertragung genau verwendest, hängt vom Betriebssystem deines Geräts und deinen persönlichen Vorlieben ab. Eine zuverlässige und sichere Methode ist die Verwendung von SFTP (SSH File Transfer Protocol) oder SCP (Secure Copy) auf dem Backend. Damit werden die VPN-Authentifizierungsdateien deines Kunden über eine verschlüsselte Verbindung übertragen.
Hier ist ein Beispiel für einen SFTP-Befehl, den du von deinem lokalen Computer (macOS oder Linux) aus ausführen kannst. Damit kopierst du die Datei client1.ovpn, die du im letzten Schritt erstellt hast, in dein Heimatverzeichnis:
sftp rene@openvpn_server_ip:client-configs/files/client1.ovpn ~/
Schritt 13 - Installieren der Client-Konfiguration
In diesem Abschnitt wird beschrieben, wie du ein Client-VPN-Profil unter Windows, macOS, Linux, iOS und Android installierst. Die Anleitungen für die Clients sind nicht voneinander abhängig, du kannst also gerne zu dem Abschnitt springen, der für dein Gerät relevant ist.
Die OpenVPN-Verbindung wird denselben Namen haben wie die .ovpn-Datei, die du erstellt hast. In Bezug auf diese Anleitung bedeutet das, dass die Verbindung client1.ovpn heißt, was der ersten Client-Datei entspricht, die du erstellt hast.
Windows
Lade die OpenVPN-Client-Anwendung für Windows von der Download-Seite von OpenVPN herunter. Wähle die passende Installationsversion für deine Windows-Version.
Hinweis: OpenVPN benötigt für die Installation Administratorrechte.
Nach der Installation von OpenVPN kopierst du die .ovpn-Datei nach:
C:\Programme\OpenVPN\config
Wenn du OpenVPN startest, wird es das Profil automatisch finden und verfügbar machen.
Du musst OpenVPN jedes Mal als Administrator starten, auch wenn es von administrativen Konten verwendet wird. Damit du nicht jedes Mal, wenn du das VPN verwendest, mit der rechten Maustaste klicken und "Als Administrator ausführen" wählen musst, musst du dies von einem Administratorkonto aus voreinstellen. Das bedeutet auch, dass Standardbenutzer das Administratorpasswort eingeben müssen, um OpenVPN zu benutzen. Andererseits können normale Benutzer nur dann eine Verbindung zum Server herstellen, wenn die OpenVPN-Anwendung auf dem Client über Administratorrechte verfügt, daher sind die erhöhten Rechte notwendig.
Um die OpenVPN-Anwendung so einzustellen, dass sie immer als Administrator ausgeführt wird, klicke mit der rechten Maustaste auf das Verknüpfungssymbol und gehe zu "Eigenschaften". Unten auf der Registerkarte "Kompatibilität" klickst du auf die Schaltfläche "Einstellungen für alle Benutzer ändern". Aktiviere in dem neuen Fenster das Kontrollkästchen "Dieses Programm als Administrator ausführen".
Jedes Mal, wenn du die OpenVPN-GUI startest, fragt Windows, ob du dem Programm erlauben willst, Änderungen an deinem Computer vorzunehmen. Klicke auf "Ja". Wenn du die OpenVPN-Client-Anwendung startest, wird das Applet nur in der Taskleiste angezeigt, damit du die VPN-Verbindung nach Bedarf herstellen und trennen kannst.
Sobald OpenVPN gestartet ist, kannst du eine Verbindung herstellen, indem du in der Taskleiste mit der rechten Maustaste auf das Symbol des OpenVPN-Applets klickst. Dadurch wird das Kontextmenü geöffnet. Wähle oben im Menü client1 (das ist dein Profil client1.ovpn) und wähle " Verbinden".
Es öffnet sich ein Statusfenster, in dem die Protokollausgabe angezeigt wird, während die Verbindung hergestellt wird, und eine Meldung, sobald der Client verbunden ist.
Trenne die Verbindung mit dem VPN auf die gleiche Weise: Gehe in die Taskleiste, klicke mit der rechten Maustaste auf das Symbol des OpenVPN-Applets, wähle das Client-Profil aus und klicke auf Trennen.
macOS
Tunnelblick ist ein kostenloser, quelloffener OpenVPN-Client für macOS. Du kannst das neueste Disk-Image von der Tunnelblick-Downloadseite herunterladen. Doppelklicke auf die heruntergeladene .dmg-Datei und folge den Anweisungen zur Installation.
Gegen Ende des Installationsvorgangs fragt Tunnelblick, ob du Konfigurationsdateien hast. Antworte "Ich habe Konfigurationsdateien" und lass Tunnelblick den Vorgang beenden. Öffne ein Finder-Fenster und doppelklicke auf client1.ovpn. Tunnelblick wird das Client-Profil installieren. Du brauchst dazu Administratorrechte.
Starte Tunnelblick durch einen Doppelklick auf das Tunnelblick-Symbol im Programme-Ordner. Sobald Tunnelblick gestartet ist, erscheint in der Menüleiste oben rechts auf dem Bildschirm ein Tunnelblick-Symbol, mit dem du Verbindungen steuern kannst. Klicke auf das Symbol und dann auf den Menüpunkt Client1 verbinden, um die VPN-Verbindung zu starten. Wenn du mit Tunnelblick benutzerdefinierte DNS-Einstellungen verwendest, musst du eventuell im erweiterten Konfigurationsdialog die Option "Änderungen an manuell eingestellten Netzwerkeinstellungen zulassen" aktivieren.
Linux
Wenn du Linux verwendest, gibt es je nach Distribution eine Reihe von Tools, die du verwenden kannst. Deine Desktop-Umgebung oder dein Fenstermanager enthält vielleicht auch Verbindungsprogramme.
Die universellste Art, eine Verbindung herzustellen, ist jedoch die Verwendung der OpenVPN-Software.
Unter Ubuntu oder Debian kannst du es genau wie auf dem Server installieren, indem du eingibst
sudo apt update
sudo apt install openvpn
Unter CentOS kannst du die EPEL-Repositories aktivieren und dann installieren, indem du eingibst:
sudo dnf install epel-release
sudo dnf install openvpn
Konfigurieren von Clients, die systemd-resolved verwenden
Stelle zunächst fest, ob dein System systemd-resolved für die DNS-Auflösung verwendet, indem du die Datei /etc/resolv.conf überprüfst:
cat /etc/resolv.conf
Nameserver 127.0.0.53
Optionen edns0
Wenn dein System so konfiguriert ist, dass systemd-resolved für die DNS-Auflösung verwendet wird, lautet die IP-Adresse nach der Option nameserver 127.0.0.53. In der Datei sollten auch Kommentare wie die gezeigte Ausgabe stehen, die erklären, wie systemd-resolved die Datei verwaltet. Wenn du eine andere IP-Adresse als 127.0.0.53 hast, verwendet dein System wahrscheinlich nicht systemd-resolved und du kannst zum nächsten Abschnitt über die Konfiguration von Linux-Clients gehen, die stattdessen ein update-resolv-conf-Skript verwenden.
Um diese Clients zu unterstützen, installiere zunächst das Paket openvpn-systemd-resolved. Es enthält Skripte, die systemd-resolved dazu zwingen, den VPN-Server für die DNS-Auflösung zu verwenden.
sudo apt install openvpn-systemd-resolved
Wenn das Paket installiert ist, konfiguriere den Client so, dass er es verwendet und alle DNS-Anfragen über die VPN-Schnittstelle sendet. Öffne die VPN-Datei des Clients:
nano client1.ovpn
Entferne nun die Kommentare in den folgenden Zeilen, die du zuvor hinzugefügt hast:
script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved (abwärts)/etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .
Konfigurieren von Clients, die update-resolv-conf verwenden
Wenn dein System nicht systemd-resolved verwendet, um DNS zu verwalten, überprüfe, ob deine Distribution stattdessen ein /etc/openvpn/update-resolv-conf-Skript enthält:
ls /etc/openvpn
Wenn dein Client die Datei update-resolv-conf enthält, dann bearbeite die OpenVPN-Client-Konfigurationsdatei, die du zuvor übertragen hast:
nano client1.ovpn
Entferne die Kommentare in den drei Zeilen, die du hinzugefügt hast, um die DNS-Einstellungen anzupassen:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Wenn du CentOS verwendest, ändere die Gruppendirektive von nogroup in nobody, damit sie mit den verfügbaren Gruppen der Distribution übereinstimmt:
client1.ovpn
group nobody
Speichere und schließe die Datei.
Jetzt kannst du dich mit dem VPN verbinden, indem du den Befehl openvpn auf die Konfigurationsdatei des Clients richtest:
sudo openvpn --config client1.ovpn
Damit solltest du dich mit deinem VPN verbinden.
iOS
Suche im App Store nach OpenVPN Connect, der offiziellen OpenVPN-Client-Anwendung für iOS, und installiere sie. Um deine iOS-Client-Konfiguration auf das Gerät zu übertragen, verbinde es direkt mit einem Computer.
Wie du die Übertragung mit iTunes durchführst, erfährst du hier. Öffne iTunes auf dem Computer und klicke auf iPhone > Apps. Scrolle ganz nach unten zum Abschnitt Dateifreigabe und klicke auf die OpenVPN-App. Das leere Fenster auf der rechten Seite, OpenVPN Dokumente, ist für die Freigabe von Dateien. Ziehe die .ovpn-Datei in das Fenster OpenVPN-Dokumente.
Starte nun die OpenVPN-App auf dem iPhone. Du erhältst eine Benachrichtigung, dass ein neues Profil zum Importieren bereit ist. Tippe auf das grüne Pluszeichen, um es zu importieren.
OpenVPN ist jetzt mit dem neuen Profil einsatzbereit. Starte die Verbindung, indem du die Schaltfläche Verbinden in die Position Ein schiebst. Trenne die Verbindung, indem du die gleiche Schaltfläche auf Aus schiebst.
Android
Öffne den Google Play Store. Suche und installiere Android OpenVPN Connect, die offizielle Android OpenVPN Client-Anwendung.
Du kannst das .ovpn-Profil übertragen, indem du das Android-Gerät per USB an deinen Computer anschließt und die Datei kopierst. Wenn du einen SD-Kartenleser hast, kannst du auch die SD-Karte des Geräts herausnehmen, das Profil darauf kopieren und die Karte dann wieder in das Android-Gerät einsetzen.
Starte die OpenVPN-App und tippe auf das Menü DATEI, um das Profil zu importieren.
Die Menüauswahl für den Profilimport in der OpenVPN Android App
Navigiere dann zum Speicherort des Profils (im Screenshot wird /storage/emulated/0/openvpn verwendet) und wähle deine .ovpn-Datei aus. Tippe auf die Schaltfläche IMPORTIEREN, um den Import des Profils abzuschließen.
Die OpenVPN Android App bei der Auswahl des zu importierenden VPN-Profils
Verbinden sobald das Profil hinzugefügt ist, siehst du einen Bildschirm wie diesen:
Die OpenVPN Android App mit dem neu hinzugefügten Profil
Um eine Verbindung herzustellen, tippe auf die Schaltfläche neben dem Profil, das du verwenden möchtest. Du siehst Echtzeit-Statistiken über deine Verbindung und den Datenverkehr, der durch deinen OpenVPN-Server geleitet wird: Die OpenVPN Android App ist mit dem VPN verbunden
Um die Verbindung zu trennen, tippst du einfach noch einmal auf den Kippschalter oben links. Du wirst aufgefordert, zu bestätigen, dass du die Verbindung zu deinem VPN trennen möchtest.
Schritt 14 - Testen deiner VPN-Verbindung (optional)
Diese Methode zum Testen deiner VPN-Verbindung funktioniert nur, wenn du in Schritt 7 beim Bearbeiten der server.conf-Datei für OpenVPN festgelegt hast, dass dein gesamter Datenverkehr über das VPN geleitet wird.
Sobald alles installiert ist, bestätigst du mit einem einfachen Test, dass alles richtig funktioniert. Ohne eine VPN-Verbindung zu haben, öffne einen Browser und gehe auf DNSLeakTest.
Die Seite zeigt dir die IP-Adresse an, die dir von deinem Internetanbieter zugewiesen wurde und wie du im Rest der Welt aussiehst. Um deine DNS-Einstellungen auf der gleichen Website zu überprüfen, klicke auf "Erweiterter Test" und du erfährst, welche DNS-Server du verwendest.
Verbinde nun den OpenVPN-Client mit dem VPN deines Droplets und aktualisiere den Browser. Jetzt sollte eine völlig andere IP-Adresse (die deines VPN-Servers) erscheinen, und so erscheinst du der Welt. Der erweiterte Test von DNSLeakTest prüft deine DNS-Einstellungen und bestätigt, dass du jetzt die DNS-Resolver verwendest, die von deinem VPN verwendet werden.
Schritt 15 - Client-Zertifikate widerrufen
Es kann vorkommen, dass du ein Client-Zertifikat widerrufen musst, um den weiteren Zugriff auf den OpenVPN-Server zu verhindern.
Befolge dazu das Beispiel in der Anleitung zum Einrichten und Konfigurieren einer Zertifizierungsstelle unter Ubuntu 22.04 im Abschnitt "Widerruf eines Zertifikats".
Sobald du ein Zertifikat für einen Client mit diesen Anweisungen widerrufen hast, musst du die erzeugte Datei crl.pem auf deinen OpenVPN-Server in das Verzeichnis /etc/openvpn/server kopieren:
sudo cp /tmp/crl.pem /etc/openvpn/server/
Als nächstes öffnest du die Konfigurationsdatei des OpenVPN-Servers:
sudo nano /etc/openvpn/server/server.conf
Füge am Ende der Datei die Option crl-verify hinzu, die den OpenVPN-Server anweist, die von dir erstellte Zertifikatswiderrufsliste bei jedem Verbindungsversuch zu überprüfen:
/etc/openvpn/server/server.conf
crl-verify crl.pem
Speichere und schließe die Datei.
Starte schließlich OpenVPN neu, um den Zertifikatswiderruf zu implementieren:
sudo systemctl restart openvpn-server@server.service
Der Client sollte nun nicht mehr in der Lage sein, sich erfolgreich mit dem Server zu verbinden, wenn er das alte Zertifikat verwendet.
Um weitere Clients zu widerrufen, gehe wie folgt vor:
- Widerrufe das Zertifikat mit dem Befehl ./easyrsa revoke client_name
- Erstelle eine neue CRL
- Übertrage die neue Datei crl.pem auf deinen OpenVPN-Server und kopiere sie in das Verzeichnis /etc/openvpn/server/, um die alte Liste zu überschreiben.
- Starte den OpenVPN-Dienst neu.
Du kannst diesen Vorgang nutzen, um alle Zertifikate zu widerrufen, die du zuvor für deinen Server ausgestellt hast.
Fazit
Du solltest jetzt ein voll funktionsfähiges virtuelles privates Netzwerk auf deinem OpenVPN-Server haben. Du kannst im Internet surfen und Inhalte herunterladen, ohne dir Sorgen machen zu müssen, dass böswillige Akteure deine Aktivitäten verfolgen.
Du kannst deine OpenVPN-Installation noch weiter anpassen, z. B. indem du deinen Client so konfigurierst, dass er sich automatisch mit dem VPN verbindet oder indem du kundenspezifische Regeln und Zugriffsrichtlinien konfigurierst. Für diese und andere OpenVPN-Anpassungen solltest du die offizielle OpenVPN-Dokumentation zu Rate ziehen.
Um weitere Clients zu konfigurieren, musst du nur die Schritte 6 und 11-13 für jedes zusätzliche Gerät ausführen. Um den Zugriff auf Clients zu sperren, befolge Schritt 15.