So richten Sie einen OpenVPN-Server unter Ubuntu 20.04 ein

Ultimative Anleitung zum Einrichten eines sicheren OpenVPN-Servers unter Ubuntu 20.04

Ein Virtual Private Network (VPN) ermöglicht Ihnen eine sichere und private Verbindung zu einem entfernten privaten Netzwerk, beispielsweise Ihrem Büronetzwerk, oder dem Internet, als ob Sie direkt mit einem privaten Netzwerk verbunden wären.

VPN arbeitet in einer Server-Client-Architektur. Ein VPN-Server wird auf einem Computer bereitgestellt und ist öffentlich über das Internet zugänglich. Der VPN-Server kann so konfiguriert werden, dass er eine Verbindung zu einem privaten LAN, z. B. einem Büronetzwerk, oder Verbindungen zum Internet zulässt. Der Benutzer verbindet sich über einen VPN-Client auf seinem lokalen Computer mit dem VPN-Server. Die Kommunikation zwischen VPN-Server und Client erfolgt über ein sicheres Tunneling-Protokoll. Für das Internet scheint es, als ob das Ziel des Datenverkehrs der VPN-Server wäre; der Verkehr wird jedoch über den Server an den Client weitergeleitet.

VPN hat viele Anwendungen im täglichen Leben, wie die sichere Verbindung mit einem öffentlichen Wifi-Netzwerk, das oft kompromittiert wird, oder das Umgehen von geografischen Beschränkungen auf bestimmten Websites, indem eine Verbindung zu einem VPN mit Sitz in einem Land hergestellt wird, das von der Website zugelassen wird.

OpenVPN ist eine weit verbreitete VPN-Implementierung, die eine Vielzahl von Konfigurationen und Optionen ermöglicht. Es verwendet das Secure Sockets Layer (SSL)-Protokoll zur Verschlüsselung der Daten und Pre-Shared Keys, Benutzername/Passwort oder Zertifikate zur Authentifizierung des VPN-Clients. In diesem Artikel erfahren Sie, wie Sie einen VPN-Server und einen VPN-Client unter Ubuntu 20.04 einrichten.

Installation

OpenVPN ist in den offiziellen Ubuntu-Repositorys im Paket verfügbar openvpn. Dieses Paket installiert sowohl den OpenVPN-Server als auch den Client.

sudo apt install openvpn

Wie bereits erwähnt, verwendet OpenVPN SSL-Zertifikate, um Daten zwischen dem Server und dem Client zu verschlüsseln. Wir müssen unsere eigene Zertifizierungsstelle (CA) einrichten, um Zertifikate für das VPN auszustellen. Beachten Sie, dass dies auf einem anderen Computer als dem, auf dem OpenVPN eingerichtet ist, eingerichtet werden sollte; Der Grund ist, dass ein Angreifer, wenn er sich auf demselben Server befindet und kompromittiert wird, auf den privaten Schlüssel zugreifen und damit die VPN-Verbindung angreifen kann.

Wir werden ein Tool namens „Easy-RSA“ verwenden, um die Zertifizierungsstelle einzurichten. Führen Sie zur Installation Folgendes auf dem CA-Rechner, dem OpenVPN-Server-Rechner und dem Client-Rechner aus, da die Konfiguration auf allen dreien erforderlich ist, um die CA einzurichten.

sudo apt install easy-rsa

Wir werden nun zuerst die Zertifizierungsstelle auf dem CA-Rechner konfigurieren und einige erforderliche Konfigurationsschritte dafür auf dem Open VPN-Server-Rechner durchführen.

Einrichtung der Zertifizierungsstelle

Ersteinrichtung auf CA-Rechner

Nun installiert dieses Paket einen Befehl namens machen-cadir die verwendet wird, um einen Ordner für die Konfiguration der Zertifizierungsstelle zu erstellen. Lassen Sie uns damit einen Ordner erstellen und den Ordner eingeben.

make-cadir cert_authority && cd cert_authority

Öffnen Sie die Datei namens vars in diesem Verzeichnis erstellt. Diese Datei enthält einige Konfigurationsvariablen, die wir ändern müssen. Die zu ändernden Werte stehen in den Zeilen 91-96, nach dem Kommentar zu Organisationsfelder die diese Felder beschreibt. Entkommentieren Sie die Zeilen und tragen Sie die entsprechenden Werte anstelle der Beispielwerte ein.

Speichern und beenden Sie die Datei. Wenn Sie den vim-Editor verwenden, drücken Sie Esc, Typ :wq und drücke Eingeben zu speichern und zu beenden.

Als nächstes führen wir die easyrsa Programm im Verzeichnis zum Einrichten der Public-Key-Infrastruktur (PKI), die zum Generieren öffentlicher Schlüssel und Zertifikate verwendet wird.

./easyrsa init-pki

Im nächsten Schritt werden der CA-Schlüssel und das Zertifikat generiert. Wenn der Befehl zur Eingabe eines Kennworts auffordert, geben Sie ein Kennwort für den CA-Schlüssel ein. Geben Sie außerdem einen allgemeinen Namen ein, wenn Sie dazu aufgefordert werden. Wenn Sie dieses Feld leer lassen, wird der Standardname Easy-RSA CA-Name verwendet.

./easyrsa build-ca

Wie wir aus der Ausgabe sehen können, wurden das Zertifikat und der Schlüssel generiert. Dieser Schlüssel wird zum Signieren der Client- und Serverzertifikate verwendet und sollte daher niemals berührt/verändert werden.

Jetzt haben wir das PKI-Setup. Der nächste Schritt besteht darin, einen Serverschlüssel und ein Zertifikat auf dem Computer zu erstellen, den wir als OpenVPN-Server verwenden. Dieses Zertifikat wird später von der CA-Maschine signiert.

Generieren von Serverschlüssel und Zertifikat auf dem Servercomputer

Wir haben Easy RSA bereits auf dem Server-Rechner installiert. Führen Sie nun die drei Schritte auf dem Server-Rechner aus, die wir zuvor auf dem CA-Rechner ausgeführt haben, nämlich. Erstellen eines CA-Verzeichnisses mit machen-cadir und gehen Sie hinein, ändern Sie die Variablen in der vars Datei und Generieren von PKI mit ./easyrsa init-pki Befehl.

Als nächstes müssen wir den Befehl ausführen, um eine Serverzertifikatsanforderung und einen Schlüssel zu generieren.

./easyrsa gen-req server nopass

Beachten Sie, dass wir die Option bestanden haben kein Pass damit der Befehl uns nicht zur Eingabe eines Passworts für den Serverschlüssel auffordert. Es wird weiterhin nach einem allgemeinen Namen für den Server gefragt, den Sie beliebig eingeben oder für den Standardnamen leer lassen können (Server) benutzt werden.

Verschieben Sie die generierte Schlüsseldatei in das /etc/openvpn Verzeichnis.

sudo mv pki/private/server.key /etc/openvpn

Senden Sie die Zertifikatsanforderung an den CA-Computer. Wir werden den Befehl verwenden scp für diesen Zweck.

scp pki/reqs/server.req user@CA_MACHINE_HOSTNAME:/directory

Im obigen Screenshot ist der Host 45.79.125.41 der CA-Rechner. Wir haben das Zertifikat in das Verzeichnis /root kopiert.

Nun wurde das Zertifikat des Servers auf den CA-Rechner kopiert. Der nächste Schritt besteht darin, zum CA-Computer zurückzukehren und dieses Zertifikat zu signieren.

Signieren des Serverzertifikats in der CA

Lassen Sie uns zunächst überprüfen, ob die Zertifikatsanforderungsdatei vom Server auf den CA-Computer kopiert wurde. Gehen Sie in das Verzeichnis, in das wir die Datei kopiert haben (/root in meinem Beispiel) und führen Sie aus ls.

:~# cd /root && ls cert_authority server.req

Wie wir sehen können, ist die Datei server.req ist anwesend. Wechseln Sie als Nächstes in das CA-Verzeichnis und importieren Sie diese Anfrage.

cd cert_authority ./easyrsa import-req /root/server.req server

Führen Sie den folgenden Befehl aus, um diese Anforderung zu signieren.

./easyrsa sign-req server server

Hier ist das erste Argument die Art der Anfrage, d. h. Server, und das zweite Argument ist der allgemeine Name des Servercomputers, für den wir zuvor den Standardwert verwendet haben, d. h. Server.

Geben Sie den Satz ein ja, und das Kennwort für den CA-Schlüssel, wenn Sie dazu aufgefordert werden.

Jetzt können wir die Zertifikatsanforderungsdatei entfernen und das generierte Zertifikat für den Server sowie das öffentliche CA-Zertifikat zurück auf den Servercomputer kopieren.

rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root

Als nächstes müssen wir einige weitere Schritte ausführen, um eine sichere Verbindung des VPNs zu gewährleisten.

DH-Parametergenerierung

Der DH-Schlüsselaustausch (Diffie-Hellman) ist ein Algorithmus, der einen sicheren Austausch von Kryptoschlüsseln über einen unsicheren Kanal gewährleistet. Verschieben wir zunächst das empfangene Zertifikat und das öffentliche CA-Zertifikat nach /etc/openvpn.

mv /root/ca.crt /root/server.crt /etc/openvpn

Wechseln Sie zum CA-Ordner auf dem Servercomputer und führen Sie den folgenden Befehl aus, um die DH-Parameter zu generieren. Die Generierung kann lange dauern.

./easyrsa gen-dh

Verschieben Sie nun die generierte Datei nach /etc/openvpn.

mv /root/cert_authority/pki/dh.pem /etc/openvpn

Generieren von TA-Schlüsseln

OpenVPN verwendet eine weitere zusätzliche Sicherheitsmaßnahme mit dem TLS-Authentifizierungsschlüssel. Führen Sie zum Generieren des TLS-Authentifizierungsschlüssels Folgendes aus:

openvpn --genkey --secret tls_auth.key

Und bewege den Schlüssel zu /etc/openvpn.

mv tls_auth.key /etc/openvpn

Die Konfiguration des Serverschlüssels und die Einrichtung der Zertifizierungsstelle sind nun abgeschlossen. Kommen wir nun zur eigentlichen Konfiguration des VPN-Servers.

OpenVPN-Serverkonfiguration

Die Konfigurationsdatei für den OpenVPN-Server wird nicht automatisch erstellt, wir können jedoch eine Vorlagenkonfigurationsdatei aus dem openvpn Paket.

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

Öffnen Sie die Datei mit vim oder einem beliebigen Editor Ihrer Wahl.

cd /etc/openvpn vim server.conf

Wir müssen die allgemeinen Namen von Schlüsseln und Zertifikaten eingeben, die wir zuvor generiert haben. Gehen Sie zu Zeile Nr. 78. Da wir alle Standardnamen verwendet haben, behalten wir sie unverändert bei. Überprüfen Sie dann den Namen für die DH-Parameterdatei in Zeile 85. Wir haben den Namen dh.pem verwendet, also ändern wir ihn.

Als Nächstes ändern wir die Berechtigungen für den OpenVPN-Server. Gehen Sie zu den Zeilen 274 und 275 und entfernen Sie die führenden ; es zu entkommentieren.

Gehen Sie auf ähnliche Weise zu Zeile 192 und entfernen Sie das Semikolon. Diese Direktive ermöglicht, dass der Verkehr aller Clients durch das VPN geleitet wird.

Speichern und beenden Sie die Datei.

Ändern Sie den Besitz des Ordners /etc/openvpn in root.

sudo chown -R root:root /etc/openvpn

Netzwerk- und Firewall-Setup

Wir müssen die IP-Weiterleitung auf dem Server zulassen, damit Pakete vom und zum VPN-Client weitergeleitet werden können. Entkommentieren Sie Zeile 28 auf /etc/sysctl.conf:

Speichern und beenden Sie die Datei.

Neustart systemctl damit diese Änderungen stattfinden.

sudo sysctl -p

Wir müssen Network Address Translation (NAT) auf dem Server mit einer UFW-Firewall einrichten, damit der VPN-Client über die IP-Adresse des VPN-Servers auf das Internet zugreifen kann. Lassen Sie uns zunächst die Paketweiterleitung in der Firewall-Konfiguration aktivieren. Offen /etc/default/ufw und ändern Sie die Variable in Zeile 19 in ACCEPT.

Speichern und beenden Sie die Datei.

Fügen Sie nun die folgenden Regeln zur Datei hinzu /etc/ufw/before.rules Vor dem Filter Zeile in der Datei.

*nat :POSTROUTING AKZEPTIEREN [0:0] -A POSTROUTING -s 10.8.0.0/8 -o -j MASQUERADE COMMIT

Geben Sie Ihre Netzwerkschnittstelle anstelle von ein . Sie können Ihre Netzwerkschnittstelle mit dem Befehl anzeigen ifconfig.

Erlauben Sie Datenverkehr für den OpenVPN-Dienst auf der Firewall und erlauben Sie Port 1194.

sudo ufw openvpn zulassen && sudo ufw zulassen 1194

Laden Sie den Firewall-Dienst neu.

sudo ufw neu laden

Wir können jetzt den Open VPN-Server-Daemon neu starten, indem wir Folgendes ausführen:

sudo service openvpn neu starten

Aktivieren Sie es, um beim Booten zu starten, indem Sie Folgendes ausführen:

sudo systemctl aktivieren openvpn

Der OpenVPN-Server ist nun konfiguriert und gestartet. Fahren wir nun mit der Client-Zertifikatsanforderung und der Schlüsselgenerierung und anderen Konfigurationen fort.

OpenVPN-Client-Konfiguration

Wir müssen einen Schlüssel und eine Zertifikatsanforderung für den Client generieren. Das Verfahren dazu ist das gleiche wie für den Server.

Obwohl ein Client-Schlüssel und eine Zertifikatsanforderung auf dem Client-Rechner erstellt und dann auf den CA-Rechner übertragen werden können, wird empfohlen, diese auf dem Server-Rechner zu erstellen. Dies hat den Vorteil, dass Sie auf dem Server ein Skript erstellen können, um alle erforderlichen Schritte auf dem Server auszuführen, was einem neuen Client den Beitritt zum VPN erleichtert.

Wechseln Sie zum CA-Ordner auf dem Server und führen Sie Folgendes aus:

cd ~/cert_authority ./easyrsa gen-req client nopass

Geben Sie auf ähnliche Weise wie zuvor einen allgemeinen Namen ein, wenn Sie dazu aufgefordert werden, oder lassen Sie ihn leer, um den standardmäßigen allgemeinen Namen zu verwenden, d. h. Klient.

Kopieren wir nun die generierte Client-Zertifikatsanforderung auf den CA-Rechner.

scp pki/reqs/client.req [email protected]:/root

Lassen Sie uns diese Anfrage in den CA-Computer importieren:

./easyrsa import-req /root/client.req client

Und lass es uns jetzt unterschreiben:

./easyrsa sign-req client client

Eingebenja wenn Sie aufgefordert werden, fortzufahren. Geben Sie das Kennwort für den CA-Schlüssel ein, wenn Sie dazu aufgefordert werden.

Wir können jetzt die angeforderte Datei für den Client entfernen und die Anforderung zurück auf den VPN-Servercomputer kopieren.

rm /root/client.req scp pki/issued/client.crt [email protected]:/root

Erstellen wir einen Ordner namens Klient um alle Dateien, die sich auf den Client beziehen, auf dem VPN-Server zu halten. Wir werden den Clientschlüssel und das Zertifikat in diesen Ordner verschieben.

mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client

Lassen Sie uns nun eine Konfigurationsdatei aus einer verfügbaren Vorlage erstellen, ähnlich wie wir die Serverkonfigurationsdatei erstellt haben.

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

Öffne die Datei client.conf. Geben Sie in Zeile 42 anstelle von den Hostnamen oder die IP-Adresse Ihres Servers ein mein-server-1.

Entkommentieren Sie die Zeilen 61 und 62, indem Sie das führende Semikolon entfernen, um die Berechtigungen für die Datei herabzustufen.

Als nächstes kommentieren Sie die Zeilen 88-90 und die Zeile 108 aus. Der Grund ist, dass wir den Inhalt der genannten Dateien manuell hinzufügen möchten, anstatt die Dateispeicherorte zu verwenden. Der Zweck besteht darin, dass die Client-Konfigurationsdatei später an den Client übertragen wird, wo wir tatsächlich nicht über die Client-Schlüssel- und Zertifikatsdateien verfügen; Daher kopieren wir den Inhalt dieser in die Konfigurationsdatei selbst.

Hängen Sie Folgendes an die Client-Konfigurationsdatei an. Geben Sie den Dateiinhalt der jeweiligen Dateien in die angegebenen Tags ein.

 # Inhalt der Datei ca.crt hier einfügen # Inhalt der Datei client.crt hier einfügen # Inhalt der Datei client.key hier einfügen key-direction 1 # Inhalt der Datei tls_auth.key hier einfügen 

Speichern und beenden Sie die Datei. Benennen Sie diese Datei um von client.conf zu client.ovpn, da letztere die erforderliche Erweiterung für Konfigurationsdateien ist, die als Netzwerkkonfigurationen importiert werden können.

Übertragen Sie nun die Datei client.ovpn zum Client, d. h. zur lokalen Maschine.

Lauf scp auf Ihrem Client-Computer, um die Datei vom Server-Computer auf Ihren lokalen Computer zu übertragen.

scp user@server_ip:/path_to_file local_destination_path

Schließlich müssen wir diese Konfigurationsdatei verwenden, um eine Verbindung zum VPN-Server herzustellen. Dies kann sowohl über die Kommandozeile als auch über die GUI erfolgen.

Um den VPN-Client über die Befehlszeile zu starten, führen Sie Folgendes aus:

sudo openvpn --config client.ovpn

Und das ist der einzige Befehl, den Sie ausführen müssen, um den VPN-Client zu starten.

Um den VPN-Client über die GUI zu starten, führen Sie die folgenden Schritte aus.

Gehen Sie auf Ihrem Client-Rechner zu Einstellungen » Netzwerk.

Klicken Sie auf + Klicken Sie im VPN-Bereich auf die Schaltfläche und wählen Sie aus den Optionen „Aus Datei importieren…“.

Klicken Sie auf „Hinzufügen“, um das VPN zu verwenden.

Beachten Sie, dass es sich unter „Gateway“ um die IP-Adresse des Servers handelt.

Schalten Sie schließlich die Schaltfläche „Client-VPN“ um, um VPN auf dem Computer zu aktivieren.

Der Aufbau einer VPN-Verbindung kann einige Sekunden dauern. Während der Einrichtung wird in der oberen linken Ecke Ihres Bildschirms ein neues Fortschrittslogo für VPN angezeigt, das sich nach der Einrichtung in ein VPN-Logo ändert.

Führen Sie Folgendes aus, um zu überprüfen, ob das VPN ordnungsgemäß funktioniert:

curl //ipinfo.io/ip

Es sollte die IP-Adresse Ihres Servercomputers zurückgeben. Oder Sie können Ihre IP-Adresse auch überprüfen, indem Sie einfach bei Google nach "Meine IP" suchen. Es sollte die IP-Adresse Ihres VPN-Servers anzeigen, wenn unser VPN-Setup ordnungsgemäß funktioniert.

Fazit

In diesem Artikel haben wir gesehen, wie Sie einen OpenVPN-Server, eine Zertifizierungsstelle und einen OpenVPN-Client konfigurieren. Um dem VPN weitere Clients hinzuzufügen, müssen wir nun das Verfahren zum Generieren und Signieren eines Zertifikats für den Client befolgen und dieselbe hier erstellte Konfigurationsdatei verwenden, wobei nur der Clientschlüssel und die Zertifikatswerte geändert wurden.

Bei langsameren Internetverbindungen kann es bei Verwendung von UDP zur Kommunikation zu erheblichen Paketverlusten kommen. Der Benutzer kann zu TCP wechseln, indem er die Zeile auskommentiert proto tcp und die Zeile kommentieren proto udp in der Serverkonfigurationsdatei.

Sollten andere Fehler auftreten, können Sie die Protokollierungsebene mit dem Verb -Anweisung sowohl in den Server- als auch in den Client-Konfigurationsdateien. Sie können Werte zwischen 0 und 9 eingeben. Je höher der Wert dieser Direktive ist, desto ausführlicher wird das Protokoll.