Mise à jour de mon script OpenVPN
Cela fait bientôt 9 mois que j’ai publié mon script pour installer facilement un serveur OpenVPN, et j’ai depuis fais beaucoup de changements, notamment ces derniers jours comme le montre ce petit graphique :
Du coup, j’ai réécris en partie l’article original, mais je vais m’expliquer un peu plus en détail ici.
Un utilisateur m’avais demandé s’il était possible d’ajouter le support de Arch Linux, et en parallèle l’a aussi demandé à Nyr, puisque je le rappelle mon script en est un fork. Nyr ne veut pas supporter Arch Linux, puisqu’il dit qu’il y a peu d’utilisateurs. C’est faux sur desktop, mais vrai sur serveur, il y a vraiment très très peu de gens qui l’utilisent. HLFH, l’utilisateur en question, dit qu’il verra alors pour ajouter le support de Arch Linux sur mon script.
Et là, paf pif pof, la bombe explose, Nyr lâche toute sa haine contre moi :
I strongly suggest you to stay away from the @Angristan fork: it is buggy, insecure and badly maintained. He’s putting users at risk and he either can’t or don’t want to see it. I’m honestly ashamed that my work has been vandalized like that by someone who claims to have « improved » it.
Les mots sont un peu durs, non ?
Peu importe, j’ai envie de vous dire, comme pour tout autre chose, tout autre critique constructive est la bienvenue, je demande donc à Nyr de développer un peu plus sa pensée. Ce qu’il a fait, et je l’en remercie puisque ça m’a permis de corriger de grosses erreurs que j’avais commises.
C’est mieux que rien, on va dire, puisque Nyr a ensuite continué de me dénigrer moi et mon travail. Des fois, on ferait mieux de pas trop se venter :
That’s wrong, I obviously want my script to deploy a secure configuration. And it does.
[…]
Then, read the goddamn OpenVPN manual which either you haven’t read or you haven’t understood
On lui dit ou pas, que même la documentation de OpenVPN dis que ses paramètres par défaut sont vulnérables ?
Nyr a fait un super travail avec ce script, mais faut peut être pas se prendre pour un dieu dès que l’on a 3000 étoiles sur Github.
Bref.
J’ai pris en compte ses critiques, j’ai créé un nouveau dépôt (pour que mon travail immonde ne soit plus qu’un simple fork) et j’ai bien travaillé sur le script comme vous pouvez le voir sur l’historique des commits. Mon script n’a plus grand chose de l’original. 😉
Merci à TheKinrar qui a proposé une pull request pour ajouter le support d’Arch Linux, qui est, après plusieurs tests, bien fonctionnel ! On peut encore améliorer certaines choses, comme par exemple utiliser un service systemd pour les règles iptables au reboot au lieu d’un script rc.local qu’on doit installer manuellement.
Voici les autres changements :
- Retravail de la partie résolveurs DNS, en étant plus précis sur les serveurs utilisés. Je prévoie d’ailleurs ajouter la possibilité d’utiliser un résolveur local, basé sur mes scripts pour installer unbound.
- Suppression de OpenNIC, toutes les explications sont ici.
- Ajout du choix d’utiliser TCP, pour certains utilisateurs qui veulent un « Stealth VPN », ou qui utilisent un réseau bof.
- Réajout des logs, ça peut être utile pour le débogage et puis ça sert à rien de les supprimer sur son propre serveur. 😉
- Suppression du support de UFW et de MASQUERADE, qui étaient mal implémentés et qui n’avaient pas lieu d’être.
Et surtout le plus gros commit, qui m’a demandé pas mal de travail c’est The crypto update ?. J’ai supprimé les modes « fast » et « slow » qui vous disent peut-être quelques chose si vous connaissiez déjà le script, et à la place j’ai mis certains paramètres par défaut, et pour d’autres comme la taillé de clé RSA, DH, ou encore la cipher, j’ai laissé le choix. Et grâce à Nyr j’ai bien corrigé la confusion qu’il y avait entre la cipher de la control channel et la data channel.
Le commit dont je suis vraiment fier c’est The crypto update ?, mais pour le Readme. En effet j’ai réécrit un peu le tout pour que ce soit plus propre, mais surtout pour justifier tous mes choix sur le chiffrement.
Je ne suis pas un cryto-noob, ni un crypto-expert, mais le chiffrement ne m’est pas inconnu comme vous pouvez le voir avec cet article sur HTTPS.
Ainsi, dans toute la partie #encryption, j’expose un à un les différents paramètres et algorithmes utilisés, ce que OpenVPN (et donc Nyr, hum) utilise par défaut, les différentes vulnérabilités qui existent, et ce que j’a choisi d’utiliser.
Sa lecture n’est pas forcément destiné à tout le monde, mais ça m’a demandé plusieurs heures de boulot.
À peu près tout ce que j’ai dit est justifié par des sources et donc je peux désormais clamer haut et fort : oui, mon script est une amélioration du script de Nyr, et oui OpenVPN utilise des paramètres dangereux par défaut pour le chiffrement.
N’hésitez pas cependant, à m’insulter dans les commentaires pour me corriger si jamais vous doutez de ce que j’ai affirmé dans ce long readme. Plus de 2000 mots quand même, c’est presque un mini-audit de OpenVPN 😛
Bref, moi ce que je veux surtout c’est avoir un script propre qui fonctionne bien et qui installe un serveur OpenVPN sécurisé en quelques minutes. Comme toujours il faut bien avoir en tête son modèle de menace, utiliser un VPN pour échapper à la NSA, c’est pas la meilleure solution, mais ça peut embêter Cazeneuve 😆
https://twitter.com/benjaltf4_/status/805507565065039880
J’ai encore pas mal d’autres idées d’amélioration en tête, donc n’oubliez pas de check de temps en temps si vous utilisez le script. 🙂
Dernière modification le 5 décembre 2016.
Salut,
Pulseheberg ne fait plus parti des hébergeurs recommandés ?
Ils ont des serveurs en suisse maintenant
Salut !
je souhaite savoir si il faut mettre à jour quelque chose quand tu sors une nouvelle version de ton script ?
Et comment faire si c’est le cas ?
Merci
Salut,
Non il n’y a rien à faires, les updates ne sont pas supportées. Si tu veux profiter de nouvelles fonctionnalités du script, soit tu bidouille et tu backport les modifs toi-même, soit tu réinstalle tout 🙂
Merci de ta réponse, est-ce que du coup ça pose un soucis de sécurité si il y a une nouvelle version d’openvpn ? Ou bien, en faisant un apt-get update/upgrade la nouvelle version sera installée ?
Oui tu peux mettre à jour OpenVPN via APT sans souci 🙂
Merci beaucoup 😉
Hello !
Ma table de routage n’est pas bonne avec mon server openvpn…
En effet je vois que mon traffic passe toujours par la passerelle de me mon routeur, même si en faisant un test d’ip j’ai bien celle du vpn…
j’ai essayé de coller cette fonction: push « redirect-gateway local def1 », après une vérification je ne vois plus ma passerelle, mais je n’ai plus de connexion au net…
Merci !
Bonjour Angristan,
Tout marche parfaitement sur Debian 8, mais avec Debian 9 j’ai du mal.
Ton script est-il compatible avec cette dernière version de Debian ?
Merci d’avance de prendre du temps pour me répondre,
Oui, il l’est. Peux-tu m’en dire plus sur ton problème ?
Debian 9 for me is working and stable. here in the philippines.. Thank you @Angristan…
Salut! Je viens de découvrir ton script d’install.
Puisque la plupart de mes installations d’OVPN sont sur des environnements full Windows, est ce que ton script est utilisable sur des OS MS?
Merci d’avance de ta réponse!
Salut, non ce n’est pas compatible Windows. Tu peux utiliser un client Windows par contre 🙂
salut,
j’ai un drôle de problème je pense que c’est plutôt lié a mon « pc » mais bon …
Quand je run la connexion au VPN depuis mon W7 j’obtiens bien le petit poup « Connexion établie …. » et là pc totalement freez même un ctrl alt sup ne répond pas …
Si jamais quelqu’un à déjà eu ou attendu se genre de pb.
Dit je voudrai réussir a voir mon réseau local et aller sur internet car je peut pas faire les deux a la fois si je désactive bypass DHCP j’ai pas internet mais je j’ai accès a mon réseau local si le le desactive j’ai internet mais je voix pas les machine local je peut même pas me co en ssh dessus
Si ta une idée pour le configuré
Salut,
j’ai découvert ton script aujourd’hui ; un véritable bonheur, merci beaucoup ! ! !
bonjour esque y a moyen que se soit executée par un utilisateur openvpn et non par nobody car bon je trouve sa pas safe je prefere que se soit un user dédier car nobody peut être exécuté par n’importe quel user non
est même si c’est pas le cas l’utilisateur qui l’execute se nomme nobody
je sais pas sa m’inspire pas confiant ps chui le jor de personne qui a générer des certificat en 4096
non chui pas parano XD
yo j’ai changer les paramétré des user group dans server.conf et c’est bon c’est openvpn qui l’exécute maintenant
j’ai mi openvpn dit moi si sa peut deranger ou pas le ton script normalement non car j’arrive a me connecté
A OK un nobody un un utilisateur sans droit mais qui peut avoir une grande importance pour que certain programme s’exécute (daemond) service tu me conseil de remettre en nobody du coup
Salut, je te conseille de te renseigner sur l’utilisateur nobody et son utilité… 🙂
A OK mais eu sa dérange si je remplace l’utilisateur par default car la tous marche j’ai même reboot le serveur et sa marche
Non mais aucun intérêt ^^
A OK je croyer que sa pouvait créé des faille le nobody enfaite peut mais c’est aussi pour une certaines organisation quand je fais htop comme sa je comprend mieux PS désoler pour le spam sur l’espace commentaires
Re a toi j’ai vérifier qui était nobody il semble avoir aucun droit mais semble important pour certain programme/daemond/service
Faut til que je le remette comme c’était au niveau de la conf ou sa gène pas
Sorry I don’t speak French ! 🙁
I’ve been using your script for quite some time. used it debian, ubuntu and even centos distros and it works fine.
Toda I tried it on Arch linux and it doesn’t work
the error:
cp: cannot stat ‘dh.pem’: No such file or directory
2012
Failed to restart [email protected]: Unit [email protected] not found.
Failed to enable unit: File [email protected]: No such file or directory
Finished!
would be great if you could fix it.
Thanks.
J.
Hello,
dh.pem
is created during the installation, did you keep the installation log ?where is the instalation log located? i’m a bit of newbie here…learning! 🙂
this is what it did
https://pastebin.com/EiaZfhF4
Strange, the dh.pem is generated but not copied. Seems to be a bug then
seems so… hope you can fix it! 🙂 thanks! and congrats for the great work on this! it’s amazingly handy!
Fixed (hopefully) https://github.com/Angristan/OpenVPN-install/issues/64 🙂
Bonjour deja un grand bravo pour ton travail, j’ai besoin d’aide svp j’arrive a installer ton script sur un vps ubuntu 14.04 tous se passe bien mais impossible de se connecter au vpn avec les fichier client generer, vous avez une idée
Bonjour,
J’ai installé votre script sur un VPS sous Debian chez PulseHeberg sans soucis.
Mais je n’ai pas compris comment obtenir l’identifiant/mot de passe, certificat, fichier .ovpn.. (c’est la première fois que j’utilise un VPS)
C’est écrit à la fin du script :
Your client config is available at ~/$CLIENT.ovpn
Bonjour,
J’ai installer votre scirpt sur un vps tout fonctionne impecablement.
Mais je me demande comment rediriger les visiteur de mon vps sur mon pc a la maison connecté en vpn ?
en gros
http://www.mondomaine.tld > ip mon vps > VPN > serveur @home(apache) (a la manière des connexion VPN offert par les membres FDN)
une idée ?
Je suppose que tu vas devoir jouer avec IPtables et rediriger les ports.
Bonjour,
Je voulais savoir si ce script permettait que les utilisateurs se partagent 1 même fichier ovpn pour être utilisé par plusieurs personnes/plusieurs appareils simultanément ?
Si non, comment je pourrais faire cela ?
Non, tu dois créer un client pour chaque utilisateur.
Article exceptionnel. Talent immense. Et merci TheKinrar.
Merci à toi pour ton soutien 🙂
Merci pour cette maj 😉
J’ai vaguement regardé le code mais sans plus tu gère comment les iptables après un reboot ?
PS: Quand on désinstalle les regles iptables reste.
De rien 🙂
C’est avec
rc.local
Je vais voir ça merci de l’info
Vu que tu demandes qu’on t’insulte, allons-y ;-D
Pour les histoires de hash des certificats, il y a des imprécisions sur wikipedia (que je viens de corriger) car SHA-2 que ce soit SHA-256, SHA-386 ou les autres, sont tous similaires et basés sur un schéma de Merkle–Damgård et donc vulnérables aux attaques de type length extension (et http://netifera.com/research/flickr_api_signature_forgery.pdf confirme en parlant de SHA-0-SHA-2).
Pour la suite, tout ce que je dis n’engage que moi 🙂 (donc ça mériterait d’être vérifié, mais je laisse l’exercice au lecteur, car je n’ai pas trouvé rapidement toutes les preuves que j’aurais aimé avoir).
Puisqu’on parle de signature d’un certificat, je ne vois pas en quoi signer un truc qui commence par le certificat (ce qui est le principe des attaques de type length extension) permettrait à l’attaquant de faire quoi que ce soit. Et si c’était le cas, ça voudrait dire a minima qu’une partie des certificats TLS est cassée (ce qui ferait probablement un peu plus de bruit que juste une page sur wikipedia…)
Vu le format des certificats, il suffit d’avoir une extension (par exemple un SAN) pour qu’on ne puisse que rajouter des extensions au mieux, ce qui ne ferait pas grand chose vu que la clef publique ne serait pas modifiable (sans la moindre extension, je ne sais pas si c’est possible d’être dans ce cas avec openVPN, j’ai l’impression qu’on pourrait essayer de rallonger l’exposant, mais je ne suis pas du tout convaincu que ce soit exploitable…)
Enfin, vu que les recommandations de mozilla proposent d’utiliser SHA-256 pour la signature de certificat en mode moderne (sha256WithRSAEncryption qui est, je pense (oui, ça veut dire qu’il faudrait vérifier) équivalent à EASYRSA_DIGEST = « sha256 », car on ne fait pas à ma connaissance de signature publique sans un algorithme de chiffrement asymétrique), je doute qu’il y ait un gros problème de sécurité avec (ils sont en général sérieux sur leurs recommandations de sécurité). Pour les recommandations, voir : https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility
Merci beaucoup. Du coup au intérêt d’utiliser une fonction de hash plutôt qu’un autre dans la famille SHA-2 ?
En termes de sécurité, il me semble que SHA-256 est considéré comme suffisamment sûr pour le moment et pour l’avenir pour encore un moment. Et dans le cas dont on parle, le hash ne sert qu’à prouver que le certificat du serveur est bien le bon. La signature du certificat est en réalité celle de son hash, car on signe toujours des petits messages, pour des raisons de performances (faire du RSA, c’est du calcul de puissances de nombres, c’est très coûteux pour de très grands nombres) et peut-être de sécurité car signer des messages de taille variable aurait peut-être des conséquences que je ne vois pas ce soir… Donc si on casse la signature (c’est à dire qu’on est capable de forger un nouveau certificat de même hash et avec des informations qui nous intéressent pour que l’identifiant du serveur soit le même) alors que le certificat de l’autorité de certification n’est plus valide (normalement, une CA n’a pas un certif valable 50 ans, 10 étant déjà plutôt long), on ne peut rien en faire… Si, par contre, on y arrive à temps, la seule utilisation possible est de se faire passer pour le serveur, mais ça nécessite de pouvoir détourner le traffic car ça ne peut être utilisé que pour une attaque active.
Après, en termes de performances, la différence entre SHA-512 et SHA-256 sera très probablement invisible pour les utilisateurs (sauf peut-être sur des pentium 1 ;-)) car on ne vérifie le certificat qu’une fois par connexion.
Pour ceux qui aiment lire 😀 l’ANSSI a sorti un document il y a quelques temps pour donner des bases de sécurité que toutes les administrations doivent suivre (il doit pouvoir y avoir des exceptions, ce serait trop simple sinon ;-D) et en particulier, l’annexe B1 parle de cryptographie : https://www.ssi.gouv.fr/administration/reglementation/confiance-numerique/le-referentiel-general-de-securite-rgs/liste-des-documents-constitutifs-du-rgs-v-2-0/ C’est long, mais c’est bien fait globalement.
Bon du coup j’ai tout remis en SHA-256, je ne manquerai pas de mettre à jour si il y a une meilleure possibilité (SHA3 peut-être bientôt) ^^
L’ANSSI semble ok avec SHA-256, le seul doc que j’avais vu privilégiant SHA-384 c’était celui de la NSA (https://cryptome.org/2016/01/CNSA-Suite-and-Quantum-Computing-FAQ.pdf) mais c’est par rapport à l’informatique quantique ^^
Merci pour tes commentaires ! 😀
Merci pour ce script et merci surtout pour les explications dans le readme sur l’encryption, tout est bien détaillé, de mon côté je n’ai pas vu d’aberation (même si personnellement je préfère le sha-512 au sha-384, prendre un hash plus long edt négligeable en terme de ressources /perf)
Je vais jeter un oeil aux sources quand j’aurais le temps
J’en connais plus d’un qui vont être intéressés par ce script ?
Au début je voulais prendre SHA512, mais je n’ai rien trouvé le privilégiant face à SHA384, cf http://stackoverflow.com/questions/10061532/why-chose-sha512-over-sha384, donc ça ne sert à rien de gaspiller des ressources pour le moment. D’ailleurs on pourrait même utiliser SHA224, mais bon ^^
Tip top merci o/
Je vais regarder ça 🙂
Bon boulot
Merci !