Virtuelle private Netzwerke (VPNs) ermöglichen es Ihnen, Ihre Online-Datenübertragungen zu verbergen und Ihre Sicherheit zu erhöhen, während Sie das Internet von öffentlichen Orten aus durchsuchen. Viele Online-Diensteanbieter bieten sowohl kostenlose als auch kostenpflichtige VPN-Optionen für Sie an. Jedoch können sogar die bestbezahlten Pläne manchmal unzuverlässig oder langsam sein.

Wenn Sie nur Ihr eigenes VPN zwischen Ihrem mobilen Computer und Ihrem Heimcomputer erstellen könnten.

Eigentlich ist dieser Prozess einfacher als Sie vielleicht denken. Heute besprechen wir, wie Sie mit OpenVPN eine sichere Verbindung zwischen einem Client und einem Server auf einem Linux-Rechner herstellen können.

Denken Sie daran, dass wir eine Routing-Konfiguration erstellen und keine Bridging-Konfiguration, die für die meisten Anwendungsfälle in Ordnung sein sollte. Windows-Benutzer können die OpenVPN-Dokumentation lesen, beginnend mit dem Abschnitt zum Einrichten einer Zertifizierungsstelle. Befehle, die in Windows verwendet werden, ähneln denen, die unten gezeigt werden.

Was du brauchst

Sie benötigen zwei Computer - einer ist der Server, der andere der Client. Der Server kann Ihr Home Desktop oder eine Linux-Instanz von DigitalOcean oder Linode sein. Der Client-Computer ist der Computer, den Sie regelmäßig verwenden. Da dieses Tutorial unter Linux ausgeführt wird, müssen beide Computer auch Linux ausführen.

Hinweis : In diesem Tutorial verwenden wir Ubuntu als unsere Distribution für den Server und den Client-Rechner.

Installation von OpenVPN

Um zu beginnen, müssen Sie OpenVPN und Easy-RSA auf Ihrem Server installieren. Dann installieren Sie OpenVPN auf Ihrem Client-Rechner.

Unter Ubuntu sollten Sie Easy-RSA von dieser Github-Seite installieren. Ubuntu enthält Easy-RSA Version 2 in seinen Repositories. Der Github-Link bietet Easy-RSA Version 3, die den Befehlen folgt, die ich in diesem Artikel verwenden werde.

 sudo apt-get installieren openvpn Git-Klon https://github.com/OpenVPN/easy-rsa.git 

Kopieren Sie in dem Verzeichnis, in das Sie das Github-Repository kopiert haben, das Verzeichnis "easyrsa3" in "/ etc / easy-rsa /."

 sudo mkdir / etc / easy-rsa sudo cp -r ./easyrsa3/* / etc / easy-rsa / 

Public-Key-Infrastruktur (PKI)

OpenVPN verwendet eine Public Key Infrastructure (PKI), um die Identität von Servern und Clients zu ermitteln, sodass diese separaten Entitäten miteinander kommunizieren können. Die PKI verwendet eine Master Certificate Authority (CA) neben einzelnen Zertifikaten und privaten Schlüsseln für jeden Server und Client.

Die Zertifizierungsstelle muss die Server- und Clientzertifikate signieren. OpenVPN überprüft dann, ob der Server die Identität jedes Clients authentifiziert, und gleichzeitig überprüft jeder Client die Identität des Servers.

Das Setup ist hier komplizierter als bei PPTP-ähnlichen Verbindungen, bietet jedoch eine bessere Sicherheit für die Benutzer und gibt dem Server mehr Freiheit, angeforderte eingehende Clientverbindungen zu akzeptieren oder zu verweigern.

CA-Zertifikat erstellen

Um die Sicherheit zu erhöhen, wird empfohlen, dass sich Ihre CA-Maschine von Ihrem Server unterscheidet. Der Kürze halber wird dieser Artikel die gleiche Maschine für beide Aufgaben verwenden. Sie sollten Ihre Dateikopierverfahren ändern, um sie an Ihre Situation scp - ob Sie scp für Netzwerkübertragungen verwenden oder einen USB-Schlüssel verwenden, um Dateien manuell zu verschieben.

Hinweis : Wenn Sie einen separaten Computer als CA verwenden, müssen Sie Easy-RSA auf diesem Computer installieren.

1. Ändern Sie die Verzeichnisse in "/ etc / easy-rsa /:"

 CD / etc / easy-rsa / 

2. Kopieren Sie gegebenenfalls "/etc/easy-rsa/vars.example" nach "/ etc / easy-rsa / vars". Öffnen Sie dann vars, um den Inhalt zu bearbeiten:

 sudo cp ./vars.example ./vars sudo nano ./vars 

3. Geben Sie die Details wie Land, Provinz, Stadt, Organisation und E-Mail ein. Entfernen Sie die Kommentarzeichen für die hier gezeigten Zeilen, indem Sie das "#" zu Beginn jeder Zeile entfernen.

Sobald Sie mit der Bearbeitung fertig sind, speichern Sie (Strg + o) und beenden Sie (Strg + x).

4. Initialisieren Sie Ihre neue PKI und generieren Sie das Schlüsselpaar für die Zertifizierungsstelle, mit dem Sie einzelne Server- und Clientzertifikate signieren:

 export EASYRSA = $ (pwd) sudo ./easyrsa init-pki sudo ./easyrsa build-ca 

Kopieren Sie die ca.crt-Datei, die Sie gerade erstellt haben, in Ihr OpenVPN-Serververzeichnis. Sie sollten auch seinen Besitzer und seine Gruppe mit Chown wechseln:

 sudo cp /etc/easy-rsa/pki/ca.crt / etc / openvpn / server / sudo chown root: root /etc/openvpn/server/ca.crt 

Erstellen des Serverzertifikats und des privaten Schlüssels

Wechseln Sie zurück in Ihr Easy-RSA-Verzeichnis und generieren Sie das Serverzertifikat und seinen privaten Schlüssel:

 cd / etc / easy-rsa sudo ./easyrsa init-pki sudo ./easyrsa genreq ServerName nopass 

Sie können "ServerName" im obigen Befehl auf den von Ihnen gewünschten Namen ändern. Stellen Sie sicher, dass Sie diese Änderung widerspiegeln, wenn Sie Ihren neuen Schlüssel in das OpenVPN-Serververzeichnis kopieren:

 sudo cp /etc/easy-rsa/pki/private/ServerName.key / etc / openvpn / server / 

Diffie-Hellman-Parameterdatei

OpenVPN verwendet die Diffie-Hellman (DH) Schlüsselaustauschmethode zum sicheren Austausch kryptographischer Schlüssel über ein Netzwerk. Sie erstellen eine DH-Parameterdatei mit dem folgenden Befehl:

 sudo openssl dhparam -out /etc/openvpn/server/dh.pem 2048 

Die letzte Zahl 2048 in diesem Befehl zeigt die Anzahl der Bits, die beim Erstellen der Datei verwendet wurden. Zum Beispiel könnten Sie 4096 verwenden, aber es würde viel länger dauern, um die Datei zu generieren, und würde die Sicherheit nicht wesentlich verbessern. Der Standardwert ist 2048, und dieser Wert ist für die meisten Anwendungsfälle ausreichend.

Hash-basierte Nachrichtenauthentifizierung

OpenVPN verwendet auch eine HMAC-Signatur (Hash-based Message Authentication) zum Schutz vor Sicherheitslücken in SSL / TLS-Handshakes. Erstellen Sie die Datei mit diesem Befehl:

 sudo openvpn --genkey --secret /etc/openvpn/server/ta.key 

Clientdateien

An dieser Stelle haben Sie eine Reihe von Dateien für Ihren Server erstellt. Jetzt ist es an der Zeit, Dateien für Ihre Kunden zu erstellen. Sie können diesen Vorgang mehrmals für so viele Clients wiederholen, wie Sie benötigen. Sie können Clientdateien auf jedem Computer mit Easy-RSA sicher erstellen.

Geben Sie das Easy-RSA-Verzeichnis ein und initialisieren Sie die PKI erneut, falls Sie dies noch nicht getan haben:

 cd / etc / easy-rsa sudo ./easyrsa init-pki 

Erstellen Sie einen Clientschlüssel und ein Zertifikat. Ändern Sie die Verzeichnisse, wenn Sie den vorherigen Schritt übersprungen haben.

 cd / etc / easy-rsa sudo ./easyrsa gen-req Kundenname nopass 

Wenn Sie den Prozess wiederholen, müssen Sie die PKI für jeden neuen Client nicht initialisieren. Stellen Sie nur sicher, dass "ClientName" jedes Mal eindeutig ist.

Server- und Client-Zertifikate signieren

Die Zertifizierungsstelle muss jetzt Ihre Server- und Clientzertifikate signieren.

Wenn Sie in Ihre Datei "/ etc / easy-rsa / pki / reqs /" schauen, sollten Sie alle Request (.req) -Dateien sehen, die Easy-RSA in den vorherigen easyrsa gen-req Befehlen erstellt hat.

In diesem Screenshot gibt es nur zwei .req Dateien. Ihre Nummer wird variieren, wenn Sie im vorherigen Schritt mehr als einen Client erstellt haben.

Wenn Sie eine separate CA-Maschine verwendet haben, müssen Sie diese .req-Dateien jetzt zur Signierung an die CA übertragen. Sobald dies abgeschlossen ist, wechseln Sie in das Easy-RSA-Verzeichnis und signieren Sie Ihre Dateien mit den folgenden Befehlen. Stellen Sie dabei sicher, dass der korrekte Speicherort jeder .req-Datei und der Name jedes Servers und Clients angegeben wird.

 cd / etc / easy-rsa sudo ./easyrsa Import-Anforderung /etc/easy-rsa/pki/reqs/ServerName.req Server1 sudo ./easyrsa import-req /etc/easy-rsa/pki/reqs/ClientName.req Client1 sudo ./easyrsa sign-req Server Server1 sudo ./easyrsa sign-req Client Client1 

Beachten Sie, dass Sie Easy-RSA einen anderen Namen für Ihre Server- und Clientzertifikate geben müssen. ServerName.req wird hier zum Beispiel verwendet, um Server1.crt zu erstellen.

Sie sollten jetzt zwei neue Dateien finden - "/etc/easy-rsa/pki/issued/Server1.crt" und "/etc/easy-rsa/pki/issued/Client1.crt" - die Sie zu ihren jeweiligen übertragen werden Maschinen (im nächsten Abschnitt dieses Artikels gesehen). Sie können alle verbleibenden REQ-Dateien löschen.

Entlang der .CRT-Dateien übergeben

Jetzt sind die signierten Zertifikate (jeweils .crt) bereit für ihre Besitzer zu arbeiten. Verschieben Sie die Serverdatei an ihren OpenVPN-Speicherort und erstellen Sie ein neues Verzeichnis für die Clientzertifikate:

 sudo mv /etc/easy-rsa/pki/issued/Server1.crt / etc / openvpn / server / sudo chown root: root /etc/openvpn/server/Server1.crt sudo mkdir / etc / easy-rsa / pki / signed sudo mv /etc/easy-rsa/pki/ausgabe/Client1.crt / etc / easy-rsa / pki / signed / 

Durch Erstellen des Ordners "... pki / signed /" erhalten Sie einen gekennzeichneten Speicherort für mehrere Clientzertifikate.

Freigegebene Server- und Client-Dateien

Jetzt sollten Sie fünf Dateien in Ihrem Verzeichnis "/ etc / openvpn / server /" haben: ca.crt, dh.pem, Server1.crt, ServerName.key und ta.key.

Sie benötigen zwei dieser Dateien in Ihrem OpenVPN-Client-Ordner auf dem Client-Computer. Kopieren Sie sie mit scp oder einer scp . Kopieren Sie "/etc/openvpn/server/ca.crt" und "/etc/openvpn/server/ta.key" in das Verzeichnis "/ etc / openvpn / client /" Ihres Clients.

Stellen Sie sicher, dass Sie das Clientzertifikat und den Schlüssel an denselben Speicherort kopieren. Kopieren Sie "/etc/easy-rsa/pki/signed/Client1.crt" und "/etc/easy-rsa/pki/private/ClientName.key" in den Client "/ etc / openvpn / client /". Wiederholen Sie diesen Vorgang für zusätzliche Kunden, die Sie möglicherweise erstellt haben.

Für jeden Client sollten Sie jetzt vier Dateien in "/ etc / openvpn / client:" Client1.crt, ClientName.key, ca.crt und ta.key haben.

Server- und Clientkonfigurationsdateien

Der letzte Schritt vor dem Starten des VPNs besteht darin, die Konfigurationsdateien für den Server und den Client zu bearbeiten. Suchen Sie zuerst die Dateien "default server.conf" und "client.conf". Sie werden wahrscheinlich an einem dieser Orte sein:

  • "/ Usr / teilen / openvpn / Beispiele"
  • "/ Usr / share / doc / openvpn / Beispiele / sample-config-files /" (Ubuntu-Konfigurationen befinden sich hier)

Hinweis : Unter Ubuntu müssen Sie die Datei "server.conf.gz" entpacken. Verwenden Sie gunzip -d ./server.conf.gz, um die Datei server.conf aus dem komprimierten Paket zu erhalten.

Kopieren Sie jede Konfigurationsdatei in das entsprechende Verzeichnis "/ etc / openvpn / server /" und "/ etc / openvpn / client /".

Nehmen Sie in server.conf die folgenden Änderungen vor. Stellen Sie sicher, dass die Namen und Positionen von ca.crt, Server1.crt, ServerName.key und dh.pem in Ihrer Konfigurationsdatei aufgeführt sind. Sie müssen möglicherweise vollständige Pfade verwenden - wie eine Zeile, die "cert /etc/openvpn/server/Server1.crt" lautet.

Ändern Sie die tls-auth..., um tls-crypt ta.key zu lesen. Auch hier kann ein vollständiger Pfad erforderlich sein.

Kommentar entfernen (entfernen Sie das ";") aus den Zeilen "user nobody" und "group nobody".

Für Ihren Kunden werden Sie ähnliche Änderungen vornehmen. Nachdem Sie die Konfigurationsdatei erstellt haben, geben Sie die Namen und Speicherorte von ca.crt, Client1.crt, ClientName.key und ta.key an (mit derselben Verschiebung von tls-auth... nach tls-crypt... ). Geben Sie den Namen oder die IP-Adresse und den Port Ihres Servers ein.

Zeit zum Verbinden

Jetzt können Sie Ihren Server und Ihren Client starten. Dies ist eine einfache Angelegenheit, wenn alles oben wie geplant abgelaufen ist.

Starten Sie den Server mit:

 openvpn /etc/openvpn/server/server.conf 

und der Kunde mit:

 openvpn /etc/openvpn/client/client.conf 

Wenn ein VPN erfolgreich erstellt wurde, wird am Ende der Ausgabe der Ausgang des Clients mit der Meldung "Initialization Sequence Completed" angezeigt. In Ihren verfügbaren Netzwerkschnittstellen finden Sie auch einen neuen Verbindungstyp.

Dieser Screenshot zeigt die "tun0" -Schnittstelle. Das hat der OpenVPN-Server gemacht. Sie können ihre Adresse als 10.8.0.1 sehen und diese Adresse vom Client pingen, um eine erfolgreiche Verbindung zu überprüfen.

Routing von Internetverkehr über den Server

An dieser Stelle möchten Sie wahrscheinlich von Ihrem Remote-Client aus über Ihren Server auf das Internet zugreifen. Dazu müssen Sie zuerst Ihre Serverkonfigurationsdatei ändern. Fügen Sie die Zeile push 'redirect-gateway def1 zu Ihrer Server-Konfigurationsdatei hinzu.

 echo "push" redirect-gateway def1 \ "" | sudo tee -a /etc/openvpn/server/server.conf 

Sie müssen Ihrem Server außerdem mitteilen, dass er die Internet-Datenverkehranforderungen des Clients ordnungsgemäß weiterleiten soll. Dieser Befehl ändert Ihre Iptables-Paketfilterregeln:

 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASKERADE 

Wenn Sie die Zeile "server 10.8.0.0 255.255.255.0" in Ihrer Datei server.conf nicht geändert haben, sollte die IP-Adresse in diesem Befehl funktionieren. Sie müssen "eth0" ändern, um mit der Ethernet-Schnittstelle Ihres Servers übereinzustimmen. Sie können aus früheren Screenshots sehen, dass mein Computer "enp19s0" verwendet.

Als Nächstes können Sie die DNS-Einstellungen auf den Client übertragen. Jede Adresse, die ein Client erreichen kann, kann verschoben werden. Sie können diesen Befehl als Ausgangspunkt verwenden:

 echo "push" dhcp-option DNS 10.8.0.1 \ "" | sudo tee -a /etc/openvpn/server/server.conf 

Schließlich können Sie die Paketweiterleitung auf dem Server wie folgt aktivieren:

 Echo 1 | sudo tee / proc / sys / net / ipv4 / ip_forward 

Sie sollten nun in der Lage sein, mit Ihrem Client über das VPN auf das Internet zuzugreifen.

Fazit

Ich weiß, das war ein langer Weg. Hoffentlich haben Sie Erfolg darin gefunden, ein VPN zu erstellen und sicher mit dem Internet zu verbinden.

Nicht zuletzt ist dies eine gute Lernerfahrung für die Schaffung eines sicheren digitalen Tunnels. Danke, dass Sie mich bis zum Ende begleitet haben.