Programme d'installation OpenVPN pour Debian, Ubuntu, Fedora, CentOS, Arch Linux, Oracle Linux, Rocky Linux et AlmaLinux.
Ce script vous permettra de configurer votre propre serveur VPN sécurisé en quelques secondes seulement.
Vous pouvez également consulter wireguard-install, un programme d'installation simple pour un protocole VPN plus simple, plus sûr, plus rapide et plus moderne.
Tout d'abord, récupérez le script et rendez-le exécutable :
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
Ensuite, exécutez-le :
./openvpn-install.sh
Vous devez exécuter le script en tant que root et activer le module TUN.
La première fois que vous l'exécuterez, vous devrez suivre l'assistant et répondre à quelques questions pour configurer votre serveur VPN.
Une fois OpenVPN installé, vous pouvez réexécuter le script et vous aurez le choix de :
Dans votre répertoire personnel, vous aurez des fichiers .ovpn
. Ce sont les fichiers de configuration client. Téléchargez-les depuis votre serveur et connectez-vous en utilisant votre client OpenVPN préféré.
Si vous avez des questions, rendez-vous d'abord sur la FAQ. Veuillez tout lire avant d'ouvrir un numéro.
S'IL VOUS PLAÎT, ne m'envoyez pas d'e-mails ou de messages privés pour demander de l'aide. Le seul endroit où obtenir de l'aide, ce sont les problèmes. D'autres personnes pourront peut-être vous aider et, à l'avenir, d'autres utilisateurs pourraient également rencontrer le même problème que vous. Mon temps n'est pas disponible gratuitement juste pour vous, vous n'êtes pas spécial.
Il est également possible d'exécuter le script sans tête, par exemple sans attendre la saisie de l'utilisateur, de manière automatisée.
Exemple d'utilisation :
AUTO_INSTALL=y ./openvpn-install.sh
# or
export AUTO_INSTALL=y
./openvpn-install.sh
Un ensemble de variables par défaut sera ensuite défini, en passant par le besoin de saisie de l'utilisateur.
Si vous souhaitez personnaliser votre installation, vous pouvez les exporter ou les spécifier sur la même ligne, comme indiqué ci-dessus.
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
Si le serveur est derrière NAT, vous pouvez spécifier son point de terminaison avec la variable ENDPOINT
. Si le point de terminaison est l'adresse IP publique derrière laquelle il se trouve, vous pouvez utiliser ENDPOINT=$(curl -4 ifconfig.co)
(le script sera par défaut celui-ci). Le point de terminaison peut être un IPv4 ou un domaine.
D'autres variables peuvent être paramétrées selon votre choix (chiffrement, compression). Vous pouvez les rechercher dans la fonction installQuestions()
du script.
Les clients protégés par mot de passe ne sont pas pris en charge par la méthode d'installation sans interface graphique, car Easy-RSA attend la saisie de l'utilisateur.
L'installation sans tête est plus ou moins idempotente, dans la mesure où elle a été sécurisée pour s'exécuter plusieurs fois avec les mêmes paramètres, par exemple par un fournisseur d'état comme Ansible/Terraform/Salt/Chef/Puppet. Il installera et régénérera uniquement la PKI Easy-RSA si elle n'existe pas déjà, et il installera uniquement OpenVPN et d'autres dépendances en amont si OpenVPN n'est pas déjà installé. Il recréera toute la configuration locale et régénérera le fichier client à chaque exécution sans tête.
Il est également possible d'automatiser l'ajout d'un nouvel utilisateur. Ici, la clé est de fournir la valeur (chaîne) de la variable MENU_OPTION
ainsi que les variables obligatoires restantes avant d'appeler le script.
Le script Bash suivant ajoute un nouvel utilisateur foo
à une configuration OpenVPN existante
#! /bin/bash
export MENU_OPTION= " 1 "
export CLIENT= " foo "
export PASS= " 1 "
./openvpn-install.sh
nobody
/ nogroup
Le script prend en charge ces distributions Linux :
Soutien | |
---|---|
AlmaLinux 8 | ✅ |
Amazon Linux 2 | ✅ |
Arch Linux | ✅ |
CentOS7 | ✅ |
Flux CentOS >= 8 | ✅ ? |
Debian >= 10 | ✅ ? |
Fedora >= 35 | ✅ ? |
OracleLinux 8 | ✅ |
Rocheux Linux 8 | ✅ |
Ubuntu >= 18.04 | ✅ ? |
A noter :
amd64
.systemd
. Ce script est basé sur l'excellent travail de Nyr et de ses contributeurs.
Depuis 2016, les deux scénarios divergent et ne se ressemblent plus, notamment sous le capot. L'objectif principal du script était d'améliorer la sécurité. Mais depuis, le script a été complètement réécrit et de nombreuses fonctionnalités ont été ajoutées. Le script n'est cependant compatible qu'avec les distributions récentes, donc si vous devez utiliser un serveur ou un client très ancien, je vous conseille d'utiliser le script de Nyr.
Plus de questions et réponses dans FAQ.md.
Q : Quel fournisseur recommandez-vous ?
R : Je recommande ceux-ci :
Q : Quel client OpenVPN recommandez-vous ?
R : Si possible, un client OpenVPN 2.4 officiel.
openvpn
de votre distribution. Il existe un référentiel APT officiel pour les distributions basées sur Debian/Ubuntu.Q : Suis-je à l’abri de la NSA en utilisant votre script ?
R : Veuillez examiner vos modèles de menace. Même si ce script vise la sécurité et utilise un cryptage de pointe, vous ne devriez pas utiliser de VPN si vous souhaitez vous cacher de la NSA.
Q : Existe-t-il une documentation OpenVPN ?
R : Oui, veuillez consulter le manuel OpenVPN, qui fait référence à toutes les options.
Plus de questions et réponses dans FAQ.md.
Des solutions qui fournissent en une seule fois un serveur OpenVPN prêt à l'emploi basé sur ce script sont disponibles pour :
openvpn-terraform-install
openvpn-ephemeral
Veuillez ouvrir un problème avant de soumettre un PR si vous souhaitez discuter d'un changement, surtout s'il est important.
Nous utilisons shellcheck et shfmt pour appliquer les directives de style et les bonnes pratiques bash. Ils sont exécutés pour chaque commit/PR avec GitHub Actions, vous pouvez donc vérifier la configuration ici.
Avertissement Ceci n'a pas été mis à jour pour OpenVPN 2.5 et versions ultérieures.
Les paramètres par défaut d'OpenVPN sont assez faibles en matière de cryptage. Ce script vise à améliorer cela.
OpenVPN 2.4 était une excellente mise à jour concernant le cryptage. Il a ajouté la prise en charge d'ECDSA, ECDH, AES GCM, NCP et tls-crypt.
Si vous souhaitez plus d'informations sur une option mentionnée ci-dessous, consultez le manuel OpenVPN. C'est très complet.
La plupart des éléments liés au chiffrement d'OpenVPN sont gérés par Easy-RSA. Les paramètres par défaut se trouvent dans le fichier vars.example.
Par défaut, OpenVPN n'active pas la compression. Ce script prend en charge les algorithmes LZ0 et LZ4 (v1/v2), ces derniers étant plus efficaces.
Cependant, il est déconseillé d'utiliser la compression puisque l'attaque VORACLE l'utilise.
OpenVPN accepte TLS 1.0 par défaut, vieux de près de 20 ans.
Avec tls-version-min 1.2
nous appliquons TLS 1.2, qui est le meilleur protocole disponible actuellement pour OpenVPN.
TLS 1.2 est pris en charge depuis OpenVPN 2.3.3.
OpenVPN utilise par défaut un certificat RSA avec une clé de 2048 bits.
OpenVPN 2.4 a ajouté la prise en charge d'ECDSA. La cryptographie à courbe elliptique est plus rapide, plus légère et plus sécurisée.
Ce script fournit :
prime256v1
/ secp384r1
/ secp521r1
2048
/ 3072
/ 4096
bits La valeur par défaut est ECDSA avec prime256v1
.
OpenVPN utilise SHA-256
comme hachage de signature par défaut, tout comme le script. Il n’offre aucun autre choix pour l’instant.
Par défaut, OpenVPN utilise BF-CBC
comme chiffrement du canal de données. Blowfish est un algorithme ancien (1993) et faible. Même la documentation officielle d'OpenVPN l'admet.
La valeur par défaut est BF-CBC, une abréviation de Blowfish en mode Cipher Block Chaining.
L'utilisation de BF-CBC n'est plus recommandée en raison de sa taille de bloc de 64 bits. Cette petite taille de bloc permet des attaques basées sur des collisions, comme le démontre SWEET32. Voir https://community.openvpn.net/openvpn/wiki/SWEET32 pour plus de détails. Des chercheurs en sécurité de l'INRIA ont publié une attaque contre les chiffrements par blocs de 64 bits, tels que 3DES et Blowfish. Ils montrent qu'ils sont capables de récupérer du texte brut lorsque les mêmes données sont envoyées assez souvent, et montrent comment ils peuvent utiliser les vulnérabilités de cross-site scripting pour envoyer assez souvent des données intéressantes. Cela fonctionne sur HTTPS, mais fonctionne également pour HTTP sur OpenVPN. Voir https://sweet32.info/ pour une explication bien meilleure et plus élaborée.
Le chiffrement par défaut d'OpenVPN, BF-CBC, est affecté par cette attaque.
En effet, AES est le standard actuel. Il s’agit du chiffrement le plus rapide et le plus sécurisé disponible aujourd’hui. SEED et Camellia ne sont pas vulnérables à ce jour mais sont plus lents qu'AES et relativement moins fiables.
Parmi les chiffrements actuellement pris en charge, OpenVPN recommande actuellement d'utiliser AES-256-CBC ou AES-128-CBC. OpenVPN 2.4 et versions ultérieures prendront également en charge GCM. Pour la version 2.4+, nous vous recommandons d'utiliser AES-256-GCM ou AES-128-GCM.
AES-256 est 40 % plus lent qu'AES-128, et il n'y a aucune vraie raison d'utiliser une clé de 256 bits plutôt qu'une clé de 128 bits avec AES. (Source : 1,2). De plus, AES-256 est plus vulnérable aux attaques temporelles.
AES-GCM est un chiffrement AEAD, ce qui signifie qu'il fournit simultanément des garanties de confidentialité, d'intégrité et d'authenticité des données.
Le script prend en charge les chiffrements suivants :
AES-128-GCM
AES-192-GCM
AES-256-GCM
AES-128-CBC
AES-192-CBC
AES-256-CBC
Et la valeur par défaut est AES-128-GCM
.
OpenVPN 2.4 a ajouté une fonctionnalité appelée « NCP » : Paramètres cryptographiques négociables . Cela signifie que vous pouvez fournir une suite de chiffrement comme avec HTTPS. Il est défini par défaut sur AES-256-GCM:AES-128-GCM
et remplace le paramètre --cipher
lorsqu'il est utilisé avec un client OpenVPN 2.4. Par souci de simplicité, le script définit à la fois --cipher
et --ncp-cipher
sur le chiffre choisi ci-dessus.
OpenVPN 2.4 négociera le meilleur chiffrement disponible par défaut (par exemple ECDHE+AES-256-GCM)
Le script propose les options suivantes, selon le certificat :
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
La valeur par défaut est TLS-ECDHE-*-WITH-AES-128-GCM-SHA256
.
OpenVPN utilise par défaut une clé DH de 2048 bits.
OpenVPN 2.4 a ajouté la prise en charge des clés ECDH. La cryptographie à courbe elliptique est plus rapide, plus légère et plus sécurisée.
De plus, générer des clés DH classiques peut prendre très, très longtemps. Les clés ECDH sont éphémères : elles sont générées à la volée.
Le script propose les options suivantes :
prime256v1
/ secp384r1
/ secp521r1
2048
/ 3072
/ 4096
bits La valeur par défaut est prime256v1
.
Depuis le wiki OpenVPN, à propos de --auth
:
Authentifiez les paquets de canal de données et (si activé) les paquets de canal de contrôle tls-auth avec HMAC à l'aide de l'algorithme de résumé de message alg. (La valeur par défaut est SHA1 ). HMAC est un algorithme d'authentification de message (MAC) couramment utilisé qui utilise une chaîne de données, un algorithme de hachage sécurisé et une clé pour produire une signature numérique.
Si un mode de chiffrement AEAD (par exemple GCM) est choisi, l'algorithme --auth spécifié est ignoré pour le canal de données et la méthode d'authentification du chiffrement AEAD est utilisée à la place. Notez que alg spécifie toujours le résumé utilisé pour tls-auth.
Le script propose les choix suivants :
SHA256
SHA384
SHA512
La valeur par défaut est SHA256
.
tls-auth
et tls-crypt
Depuis le wiki OpenVPN, à propos de tls-auth
:
Ajoutez une couche supplémentaire d'authentification HMAC au-dessus du canal de contrôle TLS pour atténuer les attaques DoS et les attaques sur la pile TLS.
En un mot, --tls-auth active une sorte de « pare-feu HMAC » sur le port TCP/UDP d'OpenVPN, où les paquets du canal de contrôle TLS portant une signature HMAC incorrecte peuvent être immédiatement supprimés sans réponse.
À propos de tls-crypt
:
Cryptez et authentifiez tous les paquets du canal de contrôle avec la clé du fichier de clés. (Voir --tls-auth pour plus d'informations.)
Cryptage (et authentification) des paquets de canaux de contrôle :
- offre plus de confidentialité en masquant le certificat utilisé pour la connexion TLS,
- rend plus difficile l'identification du trafic OpenVPN en tant que tel,
- fournit une sécurité post-quantique « du pauvre », contre les attaquants qui ne connaîtront jamais la clé pré-partagée (c'est-à-dire pas de secret de transmission).
Les deux fournissent donc une couche de sécurité supplémentaire et atténuent les attaques DoS. Ils ne sont pas utilisés par défaut par OpenVPN.
tls-crypt
est une fonctionnalité OpenVPN 2.4 qui fournit un cryptage en plus de l'authentification (contrairement à tls-auth
). C’est plus respectueux de la vie privée.
Le script prend en charge les deux et utilise tls-crypt
par défaut.
Tu peux dire merci si tu veux !
Un grand merci aux contributeurs et au travail original de Nyr.
Ce projet est sous licence MIT