Eine Anmerkung zum Tutorial: Wir ermutigen unsere Benutzer, Tutorials auszuprobieren, aber sie werden nicht vollständig von unserem Team unterstützt – wir können nicht immer Unterstützung bieten, wenn etwas schief läuft. Prüfe unbedingt, mit welchem Betriebssystem und welcher Version es getestet wurde, bevor du weitermachst.

Deshalb zeigen wir dir heute, wie du OpenVPN unter Ubuntu 18.04 installieren kannst, um deine Daten sicher vor dritten zu schützen.

Voraussetzungen für die Installation von OpenVPN unter Ubuntu 18.04

  • Zwei VPS mit Ubuntu 18.04, einer zum Hosten des OpenVPN-Dienstes und ein weiterer als Ihre Zertifizierungsstelle (CA). Es wird nicht empfohlen, den OpenVPN-Server als CA zu verwenden, dies öffnet dein VPN für Sicherheitslücken.
  • Ein reguläres (nicht Root-) Konto mit sudo-Berechtigungen.
Wenn du die Passwortauthentifizierung während der Konfiguration dieser Server deaktivierst, kann es später in diesem Handbuch zu Schwierigkeiten bei der Übertragung von Dateien zwischen diesen Servern kommen. Um dieses Problem zu beheben, kann man die Kennwortauthentifizierung auf jedem Server wieder aktivieren. Oder du kannst ein SSH-Schlüsselpaar für jeden Server generieren und dann den öffentlichen SSH-Schlüssel des OpenVPN-Servers zur Datei authorized_keys des CA-Computers hinzufügen und umgekehrt.

Schritt 1: OpenVPN und EasyRSA installieren

Fangen wir damit an, unseren apt Cache zu aktualisieren und openvpn zu installieren.

sudo apt-get update
sudo apt-get install openvpn

OpenVPN verwendet SSL/TLS zur Authentifizierung und zum Schlüsselaustausch, um den Datenverkehr zwischen dem Server und den Clients zu verschlüsseln. Um vertrauenswürdige Zertifikate auszustellen, richte deine Zertifizierungsstelle (CA) ein.

Um dies zu tun, werden wir die neueste Version von EasyRSA, die wir zum Aufbau unserer CA Public Key Infrastruktur (PKI) verwenden werden, aus dem offiziellen GitHub-Repository des Projekts herunterladen.

Es wird empfohlen, den CA-Server als zusätzliche Vorsichtsmaßnahme auszuschalten, wenn er nicht zum Signieren von Schlüsseln verwendet wird.

Um mit dem Aufbau der CA- und PKI-Infrastruktur zu beginnen, verwenden wir den Befehl wget, um die neueste Version von EasyRSA sowohl auf dem CA-Rechner als auch auf dem OpenVPN-Server herunterzuladen.

wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz

Dann extrahieren wir das Tarball Archiv.

cd ~
tar xvf EasyRSA-unix-v3.0.6.tgz

Es wurden nun alle erforderlichen Anwendungen erfolgreich auf dem Server und der CA-Maschine installiert.

Fahren wir nun mit der Konfiguration der von EasyRSA verwendeten Variablen fort und richten ein CA-Verzeichnis ein, aus dem wir die Schlüssel und Zertifikate generieren, die für den Server und die Clients für den Zugriff auf das VPN benötigt werden.

Schritt 2: Einrichten der Zertifizierungsstelle

EasyRSA wird mit einer Konfigurationsdatei geliefert, die bearbeitet werden kann, um mehrere Variablen für den CA zu definieren.

Navigieren wir auf der CA-Maschine in das EasyRSA-Verzeichnis:

cd ~/EasyRSA-v3.0.6/

Wir können die easy-rsa-Vorlage verwenden, indem wir eine Kopie einer bestehenden vars.example-Datei in diesem Verzeichnis erstellen und sie in vars umbenennen:

cp vars.example vars

Wir müssen einige der Variablen bearbeiten, die bei der Entscheidung helfen, wie die Zertifikate erstellt werden sollen. Wir verwenden nano – oder einen anderen bevorzugten Editor – um die Datei zu öffnen. Wir werden einige Variablen am Ende der Datei bearbeiten.

nano vars

Wir suchen die Einstellungen, die die Feldvorgaben für neue Zertifikate festlegen. Es sollte ungefähr so aussehen:

#set_var EASYRSA_REQ_COUNTRY    "US"
#set_var EASYRSA_REQ_PROVINCE   "California"
#set_var EASYRSA_REQ_CITY       "San Francisco"
#set_var EASYRSA_REQ_ORG        "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL      "me@example.net"
#set_var EASYRSA_REQ_OU         "My Organizational Unit"

Wir entkommentieren diese Zeilen und aktualisieren die markierten Werte auf das, was wir bevorzugen, aber lassen sie nicht leer:

set_var EASYRSA_REQ_COUNTRY    "DE"
set_var EASYRSA_REQ_PROVINCE   "Hamburg"
set_var EASYRSA_REQ_CITY       "Hamburg"
set_var EASYRSA_REQ_ORG        "LinuxxOnline"
set_var EASYRSA_REQ_EMAIL      "joel@example.net"
set_var EASYRSA_REQ_OU         "IT"

Am Ende der Bearbeitung wird die Datei gespeichert und anschließend geschlossen.

Innerhalb des EasyRSA-Verzeichnisses befindet sich ein Skript namens easyrsa, das für eine Vielzahl von Aufgaben bei der Erstellung und Verwaltung der CA verwendet wird. Führen wir nun dieses Skript mit der Option init-pki aus, um die Public-Key-Infrastruktur auf dem CA-Server zu initiieren:

./easyrsa init-pki

Danach rufen wir das easyrsa Skript erneut auf, gefolgt von der Option build-ca. Dies baut die CA auf und erzeugt zwei wichtige Dateien – ca.crt und ca.key – die die öffentliche und private Seite eines SSL-Zertifikats bilden.

Wenn wir nicht bei jeder Interaktion mit der CA nach einem Passwort gefragt werden wollen, können wir mit den Befehl build-ca mit der Option nopass ausführen:

./easyrsa build-ca nopass

In der Ausgabe werden wir aufgefordert, den gemeinsamen Namen für die CA zu bestätigen.

Der Common Name ist der Name, der im Zusammenhang mit der Zertifizierungsstelle für dieses Gerät verwendet wird. Man kann eine beliebige Zeichenfolge für den Common Name der CA eingeben, aber der Einfachheit halber drücken wir ENTER, um den Standardnamen zu akzeptieren.

Damit ist die CA eingerichtet und bereit, mit dem Signieren von Zertifikatsanforderungen zu beginnen.

Schritt 3: Erstellen des Serverzertifikats und des öffentlichen/privaten Schlüssels

Wenn die CA korrekt eingerichtet ist, können wir einen privaten Schlüssel und eine Zertifikatsanforderung von dem Server generieren und die Anforderung dann an die CA zur Signierung weiterleiten, um das erforderliche Zertifikat zu erstellen.

Wir navigieren in das EasyRSA-Verzeichnis auf dem OpenVPN-Server:

cd EasyRSA-v3.0.6/

Von hier aus führen wir das easyrsa Script mit der Option init-pki aus. Obwohl wir diesen Befehl bereits auf der CA-Maschine ausgeführt haben, ist es notwendig, ihn hier auszuführen, da der Server und die CA getrennte PKI-Verzeichnisse haben werden:

./easyrsa init-pki

Dann rufen wir das easyrsa Script erneut auf, diesmal mit der Option gen-req gefolgt von einem allgemeinen Namen für die Maschine.

Das kann alles sein, was wir wollen, aber für dieses Tutorial wählen wir vpnserver. Damit die Anforderungsdatei nicht passwortgeschützt ist, fügen wir die nopass Option ein, da es sonst später zu Berechtigungsproblemen führen kann:

Wenn wir hier einen anderen Namen als „Server“ wählen, müssen wir einige der unten stehenden Punkte anpassen. Wenn wir zum Beispiel die generierten Dateien in das Verzeichnis /etc/openvpn kopieren, müssen wir die korrekten Namen ersetzen. Außerdem müssen wir später die Datei /etc/openvpn/server.conf modifizieren, um auf die richtigen .crt- und .key-Dateien zu verweisen.
./easyrsa gen-req vpnserver nopass

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

sudo cp ~/EasyRSA-v3.0.6/pki/private/vpnserver.key /etc/openvpn/

Nun übertragen wir die Datei vpnserver.req mit einer sicheren Methode (wie SCP, in unserem Beispiel unten) auf die CA-Maschine:

scp ~/EasyRSA-v3.0.6/pki/reqs/vpnserver.req joel@your_CA_ip:/tmp

Als nächstes navigieren wir auf dem CA-Server in das EasyRSA-Verzeichnis:

cd EasyRSA-v3.0.6/

Wir benutzen wieder das easyrsa Script und importieren die die Datei vpnserver.req, indem wir den Dateipfad mit dem gemeinsamen Namen verwenden:

./easyrsa import-req /tmp/vpnserver.req vpnserver

Dann unterschreiben wir die Anfrage, indem wir das easyrsa Script mit der Option sign-req ausführen, gefolgt von dem Anfragetyp und dem Common Name. Der Anfragetyp kann entweder Client oder Server sein, so dass für die Zertifikatsanfrage des OpenVPN-Servers unbedingt der Serveranfragetyp verwendet werden muss:

./easyrsa sign-req server vpnserver

Wenn wir den CA-Schlüssel verschlüsselt haben, werden wir an dieser Stelle nach dem Passwort gefragt. Als nächstes übertragen wir das signierte Zertifikat auf einem sicheren Weg zurück auf den VPN-Server:

cp pki/issued/vpnserver.crt joel@your_server_ip:/tmp

Bevor wir uns von dem CA-Server abmelden, übertragen wir auch die ca.crt-Datei auf den Server.

scp pki/ca.crt joel@your_server_ip:/tmp

Als nächstes melden wir uns wieder an den OpenVPN-Server an und kopieren die Dateien server.crt und ca.crt in das Verzeichnis /etc/openvpn/:

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

Wir navigieren dann zum entsprechenden EasyRSA-Verzeichnis:

cd EasyRSA-v3.0.6/

Von hier aus erstellen wir einen starken Diffie-Hellman-Schlüssel, den wir während des Schlüsselaustauschs durch Eintippen verwenden können:

./easyrsa gen-dh

Dies kann einige Minuten dauern. Sobald dies geschehen ist, erzeugen wir eine HMAC-Signatur, um die TLS-Integritätsüberprüfungsfunktionen des Servers zu stärken:

openvpn --genkey --secret ta.key

Wenn der Vorgang abgeschlossen ist, kopieren wir die beiden neuen Dateien in das Verzeichnis /etc/openvpn/:

sudo cp ~/EasyRSA-v3.0.6/ta.key /etc/openvpn/
sudo cp ~/EasyRSA-v3.0.6/pki/dh.pem /etc/openvpn/

Wenn alle benötigten Zertifikats- und Schlüsseldateien generiert sind, können wir die entsprechenden Zertifikate und Schlüssel erstellen, die vom Clientrechner für den Zugriff auf den OpenVPN-Server verwendet wird.

Schritt 4: Wir erzeugen ein Client-Zertifikat und ein Schlüsselpaar

Wir erstellen innerhalb des Heimatverzeichnisses eine Verzeichnisstruktur, in der das Client-Zertifikat und die Schlüsseldateien gespeichert werden:

mkdir -p ~/client-configs/keys

Da die Zertifikat/Schlüsselpaare und Konfigurationsdateien des Clients in diesem Verzeichnis gespeichert werden, sollten wir als Sicherheitsmaßnahme seine Berechtigungen anpassen:

chmod -R 700 ~/client-configs

Als nächstes navigieren wir zurück zum EasyRSA-Verzeichnis und führen das easyrsa Script mit den Optionen gen-req und nopass aus, zusammen mit dem Common Name für den Client:

Wir müssen dem Skript für jeden Client einen eindeutigen Namenswert übergeben. In diesem Tutorial wird das erste Zertifikat/Schlüsselpaar als clienta bezeichnet.
cd ~/EasyRSA-v3.0.6/
./easyrsa gen-req clienta nopass

Wir drücken dann ENTER, um den gemeinsamen Namen zu bestätigen. Und kopieren die Datei clienta.key in das zuvor erstellte Verzeichnis /client-configs/keys/:

cp pki/private/clienta.key ~/client-configs/keys/

Anschließend übertragen wir die Datei clienta.req sicher auf den CA-Server:

scp pki/reqs/clienta.req joel@your_CA_ip:/tmp

Wir melden uns bei der CA an, navigieren in das EasyRSA-Verzeichnis und importieren die Zertifikatsanforderung:

ssh joel@your_CA_ip
cd EasyRSA-v3.0.6/
./easyrsa import-req /tmp/clienta.req clienta

Dann unterschreiben wir die Anfrage wie im vorherigen Schritt für den Server. Achten diesmal jedoch darauf, dass wir den Client-Anforderungstyp angeben:

./easyrsa sign-req client clienta

Wir bestätigen, dass wir die Zertifikatsanforderung signieren möchten und dass sie von einer vertrauenswürdigen Quelle stammt. Dazu erhalten wir dann die folgende Ausgabe:

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

Auch hier werden wir, wenn wir den CA-Schlüssel verschlüsselt haben, nach dem Passwort gefragt. Dadurch wird eine Client-Zertifikatsdatei namens clienta.crt erstellt. Diese Datei wird zurück zum Server übertragen:

scp pki/issued/clienta.crt joel@your_server_ip:/tmp

Zurück mit SSH auf den OpenVPN-Server kopieren wir das Client-Zertifikat in das Verzeichnis /client-configs/keys/:

cp /tmp/clienta.crt ~/client-configs/keys/

Als nächstes kopieren wir die Dateien ca.crt und ta.key ebenfalls in das Verzeichnis /client-configs/keys/:

cp ~/EasyRSA-v3.0.6/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

Die Zertifikate und Schlüssel des Servers und des Clients wurden alle generiert und werden in den entsprechenden Verzeichnissen auf dem Server gespeichert.

Schritt 5: Konfigurieren des OpenVPN-Dienstes

Nun, da sowohl die Zertifikate und Schlüssel des Clients als auch des Servers generiert wurden, können wir damit beginnen, den OpenVPN-Dienst so zu konfigurieren, dass er unter Ubuntu 18.04 mit diesen Zugangsdaten läuft.

Beginnen wir damit, eine OpenVPN-Beispielkonfigurationsdatei in das Konfigurationsverzeichnis zu kopieren und diese dann zu extrahieren, um sie als Grundlage für Ihr Setup zu verwenden:

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

Wir öffnen die Server-Konfigurationsdatei in einem Texteditor unserer Wahl:

sudo nano /etc/openvpn/server.conf

Wir suchen dann den HMAC-Bereich, indem wir die tls-auth-Richtlinie suchen. Diese Zeile sollte bereits unkommentiert sein, aber wenn nicht, dann entfernen wir das „;“, um sie unkommentiert zu lassen. Unterhalb dieser Zeile fügen wir den Parameter key-direction hinzu, der auf „0“ gesetzt wird:

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

Als nächstes suchen wir den Abschnitt über kryptographische Verschlüsselungen, indem wir nach den auskommentierten Verschlüsselungszeilen suchen. Die AES-256-CBC-Chiffre bietet ein gutes Maß an Verschlüsselung und wird gut unterstützt. Auch diese Zeile sollte bereits unkommentiert sein, aber wenn sie es nicht ist, dann entfernen wir einfach das „;“ davor:

cipher AES-256-CBC

Darunter fügen wir eine auth-Anweisung hinzu, um den HMAC Message Digest-Algorithmus auszuwählen. Hierfür ist SHA256 eine gute Wahl:

auth SHA256

Wenn wir wie in diesem Tutorial zuvor beim Befehl ./build-key-server einen anderen Namen gewählt haben, ändern wir die cert und key Zeilen, die wir sehen, um auf die entsprechenden .crt und .key Dateien zu zeigen. Die Voreinstellung ist server, während in diesem Leitfaden vpnserver verwendet wird.

cert vpnserver.crt
key vpnserver.key

Als nächstes suchen wir die Zeile, die eine dh-Direktive enthält, die die Diffie-Hellman-Parameter definiert. Aufgrund einiger kürzlich vorgenommener Änderungen an EasyRSA kann der Dateiname für den Diffie-Hellman-Schlüssel von dem in der Beispielserver-Konfigurationsdatei aufgeführten abweichen. Wir ändern ggf. den hier aufgeführten Dateinamen, indem wir die 2048 entfernen, so dass sie mit dem im vorherigen Schritt erzeugten Schlüssel übereinstimmt:

dh dh.pem

Zum Schluss suchen wir die Benutzer- und Gruppeneinstellungen und entfernen das „;“ am Anfang jeder Zeile, um diese Zeilen auszukommentieren:

user nobody
group nogroup

Die Änderungen, die wir bis zu diesem Zeitpunkt an der Datei server.conf vorgenommen haben, sind notwendig, damit OpenVPN funktioniert. Wenn wir fertig sind, speichern und schließen wir die Datei.

Nachdem wir alle Änderungen an der OpenVPN-Konfiguration des Servers, die für den speziellen Anwendungsfall erforderlich sind, durchgegangen sind und diese vorgenommen haben, können wir damit beginnen, einige Änderungen am Netzwerk des Servers vorzunehmen.

Schritt 6: Starten und aktivieren des OpenVPN-Dienstes.

Bevor wir unsere Clients konfigurieren, stellen wir sicher, dass der OpenVPN-Server so läuft, wie wir es erhoffen.

sudo systemctl enable openvpn@server
sudo systemctl start openvpn@server

Wir können mit dem Befehl systemctl status überprüfen, ob OpenVPN läuft:

sudo systemctl status openvpn@server

Wir müssen auch iptables einrichten, um den Datenverkehr richtig zu leiten. Zuerst müssen wir nach dem Standardinterface suchen.

sudo ip route | grep default

Die Ausgabe kann wie folgt aussehen:

default via 198.151.100.0 dev eth0 proto static 

Das eth0 Feld ist das, was wir suchen. Und dann richten wir iptables ein. Um sicherzustellen, dass diese Regel zwischen den Neustarts bestaendig ist, installieren wir das Paket iptables-persistent, das uns auffordert, bestehende Regeln zu speichern. Wir wählen Ja und so werden die Regeln auch in Zukunft bestehen bleiben.

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
sudo apt-get install iptables-persistent

Schritt 7: Clients konfigurieren

Zuletzt müssen wir noch die Client-Konfigurationen erstellen. Wir können diese in jedem beliebigen Ordner speichern, solange es nicht der Ordner /etc/openvpn ist. Wir werden zu diesem Zweck ein Verzeichnis in home erstellen.

cd ~
mkdir openvpn-clients
cd openvpn-clients

Nun kopieren wir die Beispiel-Clientkonfiguration in dieses neue Verzeichnis und öffnen sie dann in nano zur Bearbeitung.

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

nano base.conf

Wir suchen nach dem folgenden Zeilenblock. Wir müssen den my-server-1 auf die öffentliche IP-Adresse dieses VPS ändern. Wir können diese Information finden indem wir den Befehl ifconfig eingeben und nach dem inet-Feld suchen, das nicht wie 127.0.0.x aussieht.

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote my-server-1 1194
;remote my-server-2 1194

Als nächstes werden die folgenden zwei Zeilen durch Entfernen des Semikolons auskommentiert.

Vorher:

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

Nachher:

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

Da wir Schlüssel und Zertifikate direkt in die .ovpn-Datei einfügen werden, kommentieren wir die folgenden Zeilen aus, indem wir Semikolons an den Anfang setzen.

Vorher:

# 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

Nachher:

# 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

Zum Schluss springen wir an das Ende der Datei und fügen die folgenden Zeilen hinzu. Die ersten beiden spiegeln die cipher/auth-Optionen wider, die wir zuvor der Datei server.conf hinzugefügt haben, und die dritte legt fest, dass diese Dateien zur Verbindung mit dem Server verwendet werden, nicht umgekehrt.

Wir fügen auch drei auskommentierte Dateien hinzu, die für Linux-basierte Systeme, die update-resolv-conf verwenden, unkommentiert bleiben sollten.

# Added lines via Linuxx.Online tutorial
cipher AES-256-CBC
auth SHA512
key-direction 1

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

Schließlich müssen wir die Schlüssel und Zertifikate in eine .ovpn-Datei mit Hilfe von base.conf als Framework einbetten. Wir kopieren den gesamten Befehl und führen ihn aus, um die Schlüssel einzubinden und eine endgültige Datei client1.ovpn zu erstellen.

$ cat base.conf 
<(echo -e '<ca>') ~/openvpn-ca/keys/ca.crt <(echo -e '</ca>') 
<(echo -e '<cert>') ~/openvpn-ca/keys/client1.crt <(echo -e '</cert>n') 
<(echo -e '<key>') ~/openvpn-ca/keys/client1.key <(echo -e '</key>n') 
<(echo -e '<tls-auth>') ~/openvpn-ca/keys/ta.key <(echo -e '</tls-auth>') 
>> client1.ovpn

Dieses Tutorial wird nicht im Detail auf Client-Konfigurationen eingehen, aber wir werden eine einfache Möglichkeit zur Übertragung der .ovpn-Datei auf einen Linux- oder OS X-Client vorstellen. Dieser Befehl wird auf einen VPS und dann mit cat eine neue client1.ovpn Datei auf dem lokalen Rechner erzeugen

ssh USER@SERVER-IP "cat ~/openvpn-clients/client1.ovpn" > client1.ovpn

Sobald der Client konfiguriert ist, sollten wir in der Lage sein, eine Verbindung zum VPN herzustellen und über das VPN auf das Internet zuzugreifen.

Du verwendest jetzt OpenVPN auf Ubuntu 18.04, um deine Daten zu schützen

Herzlichen Glückwunsch! Du kannst jetzt weitgehend anonym im Internet surfen. Dein VPN kann deinen ISP davon abhalten, deine Browsing-Daten zu sehen und eine zusätzliche Stufe der Verschlüsselung für kritische Informationen hinzufügen.

Ein VPN ist jedoch kein vollständiger Unsichtbarkeitsschutz. Es führt nicht dazu, dass du aufhörst zu existieren. Deshalb solltest du dir überlegen, was es für dich tun kann und was nicht, um dich nicht in Schwierigkeiten zu bringen.