OpenVPN-Installationsprogramm für Debian, Ubuntu, Fedora, CentOS, Arch Linux, Oracle Linux, Rocky Linux und AlmaLinux.
Mit diesem Skript können Sie in wenigen Sekunden Ihren eigenen sicheren VPN-Server einrichten.
Sie können sich auch Wireguard-Install ansehen, ein einfaches Installationsprogramm für ein einfacheres, sichereres, schnelleres und moderneres VPN-Protokoll.
Holen Sie sich zunächst das Skript und machen Sie es ausführbar:
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
Führen Sie es dann aus:
./openvpn-install.sh
Sie müssen das Skript als Root ausführen und das TUN-Modul aktiviert haben.
Wenn Sie es zum ersten Mal ausführen, müssen Sie dem Assistenten folgen und einige Fragen beantworten, um Ihren VPN-Server einzurichten.
Wenn OpenVPN installiert ist, können Sie das Skript erneut ausführen und haben die Wahl:
In Ihrem Home-Verzeichnis befinden sich .ovpn
Dateien. Dies sind die Client-Konfigurationsdateien. Laden Sie sie von Ihrem Server herunter und stellen Sie eine Verbindung mit Ihrem bevorzugten OpenVPN-Client her.
Wenn Sie Fragen haben, schauen Sie sich zuerst die FAQ an. Bitte lesen Sie alles, bevor Sie eine Ausgabe eröffnen.
BITTE senden Sie mir keine E-Mails oder privaten Nachrichten mit der Bitte um Hilfe. Der einzige Ort, an dem man Hilfe bekommt, sind die Probleme. Möglicherweise können andere Personen helfen, und in Zukunft werden möglicherweise auch andere Benutzer auf dasselbe Problem stoßen wie Sie. Meine Zeit steht nicht umsonst nur für Dich zur Verfügung, Du bist nichts Besonderes.
Es ist auch möglich, das Skript automatisiert auszuführen, ohne auf Benutzereingaben zu warten.
Beispielverwendung:
AUTO_INSTALL=y ./openvpn-install.sh
# or
export AUTO_INSTALL=y
./openvpn-install.sh
Anschließend wird ein Standardsatz von Variablen festgelegt, indem die Notwendigkeit einer Benutzereingabe übergeben wird.
Wenn Sie Ihre Installation anpassen möchten, können Sie sie exportieren oder in derselben Zeile angeben, wie oben gezeigt.
APPROVE_INSTALL=y
APPROVE_IP=y
IPV6_SUPPORT=n
PORT_CHOICE=1
PROTOCOL_CHOICE=1
DNS=1
COMPRESSION_ENABLED=n
CUSTOMIZE_ENC=n
CLIENT=clientname
PASS=1
Wenn sich der Server hinter NAT befindet, können Sie seinen Endpunkt mit der Variablen ENDPOINT
angeben. Wenn der Endpunkt die öffentliche IP-Adresse ist, hinter der er steht, können Sie ENDPOINT=$(curl -4 ifconfig.co)
verwenden (das Skript verwendet standardmäßig diese Adresse). Der Endpunkt kann ein IPv4 oder eine Domäne sein.
Abhängig von Ihrer Wahl können weitere Variablen festgelegt werden (Verschlüsselung, Komprimierung). Sie können in der installQuestions()
Funktion des Skripts danach suchen.
Passwortgeschützte Clients werden von der Headless-Installationsmethode nicht unterstützt, da Benutzereingaben von Easy-RSA erwartet werden.
Die Headless-Installation ist mehr oder weniger idempotent, da sie sicher gemacht wurde, mehrere Male mit denselben Parametern ausgeführt zu werden, z. B. durch einen Statusbereitsteller wie Ansible/Terraform/Salt/Chef/Puppet. Die Easy-RSA-PKI wird nur dann installiert und neu generiert, wenn sie noch nicht vorhanden ist, und OpenVPN und andere Upstream-Abhängigkeiten werden nur dann installiert, wenn OpenVPN noch nicht installiert ist. Bei jedem Headless-Lauf wird die gesamte lokale Konfiguration neu erstellt und die Client-Datei neu generiert.
Es ist auch möglich, das Hinzufügen eines neuen Benutzers zu automatisieren. Hier besteht der Schlüssel darin, den (String-)Wert der Variablen MENU_OPTION
zusammen mit den übrigen obligatorischen Variablen bereitzustellen, bevor das Skript aufgerufen wird.
Das folgende Bash-Skript fügt einen neuen Benutzer foo
zu einer vorhandenen OpenVPN-Konfiguration hinzu
#! /bin/bash
export MENU_OPTION= " 1 "
export CLIENT= " foo "
export PASS= " 1 "
./openvpn-install.sh
nobody
/ nogroup
ausführenDas Skript unterstützt diese Linux-Distributionen:
Unterstützung | |
---|---|
AlmaLinux 8 | ✅ |
Amazon Linux 2 | ✅ |
Arch Linux | ✅ |
CentOS 7 | ✅ |
CentOS-Stream >= 8 | ✅ ? |
Debian >= 10 | ✅ ? |
Fedora >= 35 | ✅ ? |
Oracle Linux 8 | ✅ |
Rocky Linux 8 | ✅ |
Ubuntu >= 18.04 | ✅ ? |
Zu beachten:
amd64
-Architektur getestet.systemd
. Dieses Drehbuch basiert auf der großartigen Arbeit von Nyr und seinen Mitwirkenden.
Seit 2016 weichen die beiden Drehbücher voneinander ab und ähneln sich nicht mehr, insbesondere unter der Haube. Das Hauptziel des Skripts war eine erhöhte Sicherheit. Seitdem wurde das Skript jedoch komplett neu geschrieben und viele Funktionen hinzugefügt. Das Skript ist jedoch nur mit neueren Distributionen kompatibel. Wenn Sie also einen sehr alten Server oder Client verwenden müssen, empfehle ich die Verwendung des Nyr-Skripts.
Weitere Fragen und Antworten finden Sie in FAQ.md.
F: Welchen Anbieter empfehlen Sie?
A: Ich empfehle diese:
F: Welchen OpenVPN-Client empfehlen Sie?
A: Wenn möglich, ein offizieller OpenVPN 2.4-Client.
openvpn
Paket aus Ihrer Distribution. Es gibt ein offizielles APT-Repository für Debian/Ubuntu-basierte Distributionen.F: Bin ich durch die Verwendung Ihres Skripts vor der NSA sicher?
A: Bitte überprüfen Sie Ihre Bedrohungsmodelle. Auch wenn bei diesem Skript die Sicherheit im Vordergrund steht und modernste Verschlüsselung verwendet wird, sollten Sie kein VPN verwenden, wenn Sie sich vor der NSA verstecken möchten.
F: Gibt es eine OpenVPN-Dokumentation?
A: Ja, bitte lesen Sie das OpenVPN-Handbuch, in dem alle Optionen aufgeführt sind.
Weitere Fragen und Antworten finden Sie in FAQ.md.
Lösungen, die auf Basis dieses Skripts in einem Rutsch einen betriebsbereiten OpenVPN-Server bereitstellen, sind verfügbar für:
openvpn-terraform-install
openvpn-ephemeral
Bitte öffnen Sie ein Problem, bevor Sie eine PR einreichen, wenn Sie eine Änderung besprechen möchten, insbesondere wenn es sich um eine große Änderung handelt.
Wir verwenden Shellcheck und Shfmt, um Bash-Stilrichtlinien und bewährte Praktiken durchzusetzen. Sie werden für jeden Commit/PR mit GitHub Actions ausgeführt, sodass Sie die Konfiguration hier überprüfen können.
Warnung: Dies wurde für OpenVPN 2.5 und höher nicht aktualisiert.
Die Standardeinstellungen von OpenVPN sind hinsichtlich der Verschlüsselung ziemlich schwach. Dieses Skript soll das verbessern.
OpenVPN 2.4 war ein großartiges Update in Bezug auf die Verschlüsselung. Es wurde Unterstützung für ECDSA, ECDH, AES GCM, NCP und TLS-Crypt hinzugefügt.
Wenn Sie weitere Informationen zu einer der unten genannten Optionen wünschen, lesen Sie das OpenVPN-Handbuch. Es ist sehr vollständig.
Die meisten verschlüsselungsbezogenen Dinge von OpenVPN werden von Easy-RSA verwaltet. Standardparameter befinden sich in der Datei vars.example.
OpenVPN aktiviert standardmäßig keine Komprimierung. Dieses Skript bietet Unterstützung für die Algorithmen LZ0 und LZ4 (v1/v2), wobei letzterer effizienter ist.
Es wird jedoch davon abgeraten, Komprimierung zu verwenden, da der VORACLE-Angriff davon Gebrauch macht.
OpenVPN akzeptiert standardmäßig TLS 1.0, das fast 20 Jahre alt ist.
Mit tls-version-min 1.2
erzwingen wir TLS 1.2, das derzeit beste verfügbare Protokoll für OpenVPN.
TLS 1.2 wird seit OpenVPN 2.3.3 unterstützt.
OpenVPN verwendet standardmäßig ein RSA-Zertifikat mit einem 2048-Bit-Schlüssel.
OpenVPN 2.4 hat Unterstützung für ECDSA hinzugefügt. Die Kryptografie mit elliptischen Kurven ist schneller, leichter und sicherer.
Dieses Skript bietet:
prime256v1
/ secp384r1
/ secp521r1
2048
/ 3072
/ 4096
-Bit-Schlüssel Der Standardwert ist ECDSA mit prime256v1
.
OpenVPN verwendet standardmäßig SHA-256
als Signatur-Hash, ebenso wie das Skript. Es gibt derzeit keine andere Wahl.
Standardmäßig verwendet OpenVPN BF-CBC
als Datenkanalverschlüsselung. Blowfish ist ein alter (1993) und schwacher Algorithmus. Sogar die offizielle OpenVPN-Dokumentation gibt dies zu.
Der Standardwert ist BF-CBC, eine Abkürzung für Blowfish im Cipher Block Chaining-Modus.
Aufgrund der 64-Bit-Blockgröße wird die Verwendung von BF-CBC nicht mehr empfohlen. Diese kleine Blockgröße ermöglicht Angriffe auf Kollisionsbasis, wie SWEET32 demonstriert. Weitere Informationen finden Sie unter https://community.openvpn.net/openvpn/wiki/SWEET32. Sicherheitsforscher von INRIA veröffentlichten einen Angriff auf 64-Bit-Blockchiffren wie 3DES und Blowfish. Sie zeigen, dass sie Klartext wiederherstellen können, wenn dieselben Daten oft genug gesendet werden, und zeigen, wie sie Cross-Site-Scripting-Schwachstellen nutzen können, um relevante Daten oft genug zu senden. Dies funktioniert über HTTPS, aber auch für HTTP-über-OpenVPN. Eine viel bessere und ausführlichere Erklärung finden Sie unter https://sweet32.info/.
Die Standardverschlüsselung von OpenVPN, BF-CBC, ist von diesem Angriff betroffen.
Tatsächlich ist AES der heutige Standard. Es ist die schnellste und sicherste Verschlüsselung, die heute verfügbar ist. SEED und Camellia sind bisher nicht anfällig, aber langsamer als AES und relativ weniger vertrauenswürdig.
Von den derzeit unterstützten Verschlüsselungen empfiehlt OpenVPN derzeit die Verwendung von AES-256-CBC oder AES-128-CBC. OpenVPN 2.4 und neuer unterstützen auch GCM. Für 2.4+ empfehlen wir die Verwendung von AES-256-GCM oder AES-128-GCM.
AES-256 ist 40 % langsamer als AES-128, und es gibt keinen wirklichen Grund, bei AES einen 256-Bit-Schlüssel anstelle eines 128-Bit-Schlüssels zu verwenden. (Quelle: 1,2). Darüber hinaus ist AES-256 anfälliger für Timing-Angriffe.
AES-GCM ist eine AEAD-Verschlüsselung, was bedeutet, dass sie gleichzeitig Vertraulichkeits-, Integritäts- und Authentizitätsgarantien für die Daten bietet.
Das Skript unterstützt die folgenden Chiffren:
AES-128-GCM
AES-192-GCM
AES-256-GCM
AES-128-CBC
AES-192-CBC
AES-256-CBC
Und standardmäßig AES-128-GCM
.
OpenVPN 2.4 hat eine Funktion namens „NCP“ hinzugefügt: Negotiable Crypto Parameters . Das bedeutet, dass Sie eine Cipher-Suite wie bei HTTPS bereitstellen können. Er ist standardmäßig auf AES-256-GCM:AES-128-GCM
eingestellt und überschreibt den Parameter --cipher
, wenn er mit einem OpenVPN 2.4-Client verwendet wird. Der Einfachheit halber hat das Skript sowohl --cipher
als auch --ncp-cipher
auf die oben ausgewählte Verschlüsselung gesetzt.
OpenVPN 2.4 handelt standardmäßig die beste verfügbare Verschlüsselung aus (z. B. ECDHE+AES-256-GCM).
Das Skript schlägt je nach Zertifikat folgende Optionen vor:
TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
Der Standardwert ist TLS-ECDHE-*-WITH-AES-128-GCM-SHA256
.
OpenVPN verwendet standardmäßig einen 2048-Bit-DH-Schlüssel.
OpenVPN 2.4 hat Unterstützung für ECDH-Schlüssel hinzugefügt. Die Kryptografie mit elliptischen Kurven ist schneller, leichter und sicherer.
Außerdem kann das Generieren eines klassischen DH-Schlüssels sehr lange dauern. ECDH-Schlüssel sind kurzlebig: Sie werden im laufenden Betrieb generiert.
Das Skript bietet folgende Optionen:
prime256v1
/ secp384r1
/ secp521r1
2048
/ 3072
/ 4096
-Bit-Schlüssel Der Standardwert ist prime256v1
.
Aus dem OpenVPN-Wiki über --auth
:
Authentifizieren Sie Datenkanalpakete und (falls aktiviert) TLS-Auth-Kontrollkanalpakete mit HMAC mithilfe des Message-Digest-Algorithmus alg. (Der Standardwert ist SHA1). HMAC ist ein häufig verwendeter Nachrichtenauthentifizierungsalgorithmus (MAC), der eine Datenzeichenfolge, einen sicheren Hash-Algorithmus und einen Schlüssel verwendet, um eine digitale Signatur zu erstellen.
Wenn ein AEAD-Verschlüsselungsmodus (z. B. GCM) gewählt wird, wird der angegebene --auth-Algorithmus für den Datenkanal ignoriert und stattdessen die Authentifizierungsmethode der AEAD-Verschlüsselung verwendet. Beachten Sie, dass alg weiterhin den für tls-auth verwendeten Digest angibt.
Das Skript bietet die folgenden Auswahlmöglichkeiten:
SHA256
SHA384
SHA512
Der Standardwert ist SHA256
.
tls-auth
und tls-crypt
Aus dem OpenVPN-Wiki über tls-auth
:
Fügen Sie zusätzlich zum TLS-Kontrollkanal eine zusätzliche Ebene der HMAC-Authentifizierung hinzu, um DoS-Angriffe und Angriffe auf den TLS-Stack abzuwehren.
Kurz gesagt: --tls-auth aktiviert eine Art „HMAC-Firewall“ auf dem TCP/UDP-Port von OpenVPN, wo TLS-Kontrollkanalpakete mit einer falschen HMAC-Signatur sofort ohne Antwort verworfen werden können.
Über tls-crypt
:
Verschlüsseln und authentifizieren Sie alle Kontrollkanalpakete mit dem Schlüssel aus der Schlüsseldatei. (Weitere Hintergrundinformationen finden Sie unter --tls-auth.)
Verschlüsseln (und Authentifizieren) von Kontrollkanalpaketen:
- sorgt für mehr Privatsphäre, indem das für die TLS-Verbindung verwendete Zertifikat ausgeblendet wird,
- macht es schwieriger, OpenVPN-Verkehr als solchen zu identifizieren,
- bietet Post-Quantum-Sicherheit für „arme Leute“ gegen Angreifer, die den Pre-Shared Key nie erfahren werden (dh keine Vorwärtsgeheimnis).
Beide bieten also eine zusätzliche Sicherheitsebene und schwächen DoS-Angriffe ab. Sie werden von OpenVPN nicht standardmäßig verwendet.
tls-crypt
ist eine OpenVPN 2.4-Funktion, die zusätzlich zur Authentifizierung auch Verschlüsselung bietet (im Gegensatz zu tls-auth
). Es ist datenschutzfreundlicher.
Das Skript unterstützt beides und verwendet standardmäßig tls-crypt
.
Du kannst Danke sagen, wenn du willst!
Vielen Dank an die Mitwirkenden und Nyrs Originalarbeit.
Dieses Projekt steht unter der MIT-Lizenz