Intro
La demande accrue pour les lettres magiques VPN et leurs raisons, loin des technologies de réseau, n'est même pas intéressante à plaisanter.
Salut, tu es bon en informatique? m'aider sur vpn?
En fait, je suis même heureux que les gens commencent à apprendre les bases des réseaux informatiques (qu'est-ce que vpn, que se passe-t-il, et pourquoi différents sites commencent-ils à s'ouvrir avec lui?), Et, si possible, aide. J'essaie de pousser pour les processus d'auto-configuration de mes propres serveurs VPN, mais je comprends que tout le monde ne devrait pas être un administrateur système , donc certains amis suggèrent simplement d'acheter un serveur et de me le donner pour la configuration.
Mais tout programmeur doit être paresseux pour ne pas répéter la même chose à plusieurs reprises. Exécuter les mêmes actions encore et encore affine les compétences, mais tue tout l'intérêt du développement et de la créativité (et du temps).
Et donc, en installant le troisième serveur VPN, j'ai réalisé qu'il était nécessaire d'automatiser tout cela et de rendre l' utilisateur convivial , afin qu'après une courte instruction, même l'utilisateur le plus ordinaire puisse partager la clé ovpn avec un ami ou un parent. Et encore mieux - pour installer le système, l'utilisateur pourrait indépendamment avec un minimum de compétences et de connaissances.
Le projet VPNFace est donc né - un ensemble de scripts de serveur pour gérer les clés utilisateur des serveurs OpenVPN, et un panneau de contrôle Web pour eux. Et après quelques jours de développement, je me suis surpris à penser que quelque part environ 25% des fonctionnalités à définir ne seront jamais revendiquées par ce même "utilisateur ordinaire", et le préfixe Lite a été ajouté au nom, et le concept principal du projet est passé d' un concepteur général à un concept étroit. qui , en même temps, a également considérablement réduit le temps de développement avant la sortie.
Bien sûr - eh bien, ça ne s'est jamais passé comme ça - pourquoi un autre gestionnaire OpenVPN? Pour être honnête - la pensée d'autres projets de gestionnaires de VPN est venue à l'esprit lorsque le noyau principal fonctionnait déjà, et j'ai vu toutes sortes de petites choses. Au début, j'étais bouleversé d'être si stupide et je n'ai même pas fait d'étude minimale (parce que je n'aime pas produire de vélos), mais après avoir étudié les projets ci-dessus, j'ai réalisé que le mien avait aussi sa propre niche.
Caractéristiques clés:
- Minimalisme fonctionnel: un utilisateur ordinaire, lorsqu'il interagit avec vpn en tant qu'administrateur, n'a besoin que de quelques fonctions - créer une clé, verrouiller et déverrouiller. Il est peu probable qu'il pense à créer un autre serveur VPN s'il en a un ou à grimper pour modifier les données du centre de certification. Peu de gens auront besoin de beaux graphiques de trafic et des fonctionnalités du serveur d'entreprise pour utiliser calmement un télégramme .
- Minimalisme logiciel: le seul programme dont l'utilisateur a besoin est le client officiel OpenVPN, disponible sur tous les systèmes et appareils. Le panneau de contrôle des touches est une application Web exécutée dans un navigateur. L'autorisation administrative est effectuée par la clé vpn.
- Configuration semi-fixe: 80% des utilisateurs ont besoin de la même chose, et ils ne se soucient pas des adresses IP à l'intérieur des réseaux (ils ne savent même pas qu'ils sont là), 15% supplémentaires nécessitent un peu plus, mais, de même, une seule et même chose De plus, les 5% restants écrivent eux-mêmes des choses similaires, mettant en œuvre tout ce dont ils ont besoin, vous ne pouvez donc pas vous en soucier. Néanmoins, le panneau peut être connecté manuellement aux serveurs déjà openvpn, ou corriger les données du certificat avant l'installation standard.
- Détachement absolu aux sociétés d'hébergement ou à d'autres services tiers - il y a pas mal de copies cassées dans les litiges concernant l'hébergement le plus magique, cela reste entièrement au choix de l'utilisateur. Le système d'exploitation du serveur est plus important pour le script - il est écrit sous les systèmes Ubuntu / Debian, mais tous les hébergeurs en ont. Le système se tiendra calmement à la fois dans le réseau domestique interne et dans le réseau d'entreprise.
- le processus d'installation le plus simplifié sur un serveur propre fraîchement acheté: si quelque chose peut être fait sans la participation de l'utilisateur, cela se fait en utilisant un code dur. Parce que Lite. Oui, il n'a pas été possible de réaliser l'installateur comme Google Outline, il nécessite une connexion utilisateur via ssh pour démarrer l'installation, et un achat indépendant du serveur, mais il a été possible d'acquérir cette connaissance de «comment se connecter via ssh» était l'une des plus difficiles. Avec le "réglage par défaut", l'utilisateur est configuré avec une configuration "standard" sans aucune question.
Panneau de contrôle des touches
Lors d'une installation par défaut, trois serveurs VPN sont créés: administrateur, Internet et sombre - il n'est pas difficile de deviner à partir des noms, le premier sert à l'accès administrateur au serveur et au panneau de contrôle des clés (et ssh, si nécessaire), le second - libère immédiatement les utilisateurs sur Internet, et le troisième achemine de manière transparente tout le trafic possible vers le réseau tor (le trafic udp sauf DNS ne va nulle part et DNS va vers tor)

Le panneau de contrôle a été décidé pour être fait sur un sixième AngularJS frais ( pendant l'installation, une version compilée du panneau est téléchargée, donc les bibliothèques angulaires ne sont pas nécessaires pour le travail ). J'aime le concept des applications web, et j'essaie d'évoluer dans ce sens, si possible. Je voulais également étudier les matériaux angulaires depuis longtemps pour créer des panneaux d'administration Google dans divers projets.
La gestion des clés, comme déjà indiqué, est simplifiée au minimum:
Nouvelle clé:

Verrouillage des touches:

Déverrouillage par clé:

Le bouton de téléchargement donne le fichier ovpn terminé pour la connexion.
L'aide utilisateur minimale est intégrée dans le panneau:

Et la documentation compilée est incluse dans le projet, qui augmente par défaut pour le sous-réseau administratif au port 81:

Le sens de la version Lite a également limité la prise en charge des langues - pour le moment, le projet entier n'existe qu'en russe, et le multilinguisme n'est même pas défini dans le noyau.
Côté serveur
Le côté serveur s'exécute sur nodejs et les scripts bash. Pourquoi un nœud? Je l'aime bien et j'ai beaucoup de projets sur elle. Avoir une collection vpn-manager me semblait une bonne idée. Le script d'installation extrait le gestionnaire de version du nœud , installe le nœud v10 à travers lui et crée un lien vers le dossier à l'échelle du système pour que les services écrits sous nodejs fonctionnent.
Les packages installés dans le nœud sont également minimes - forever, forever-service pour démarrer un projet en tant que service système, express - pour web api, shelljs - pour exécuter les commandes de la console, ip - calculatrice d'adresse et de sous-réseau, craie - sortie couleur vers la console. Bien sûr, cette liste peut être raccourcie avec le perfectionnisme du minimalisme, mais la deuxième loi d'Akin est clairement née de nulle part (la même loi peut être appliquée à la question "pourquoi nodejs?" Et quelques autres) et malgré le désir de minimalisme dans d'autres questions, ici J'ai décidé de ne pas aller en profondeur.
Le script serveur gère les serveurs openvpn via un ensemble de scripts bash et nécessite une structure de fichier de répertoire racine et une configuration de fichier openvpn spécifiques. Deux fichiers json sont utilisés comme base de données, ce qui permet:
- se débarrasser de l'interaction avec les bases de données comme mongo / sql et les dépendances et complications connexes
- sans problèmes particuliers, préparez les "bases" (et la structure des répertoires et des fichiers) manuellement ou par script, lors de l'installation sur un serveur de travail configuré, lorsque l'installateur inclus dans le kit peut même être nuisible et que le processus d'installation par défaut doit être évité (le besoin d'installation est vérifié précisément pour la présence et le contenu de json fichiers de base de données)
Un avantage distinct du panneau de contrôle en tant qu'application Web indépendante était la séparation de la fonctionnalité du serveur dans un ensemble distinct de points de terminaison api http, ce qui ouvre la possibilité pour des programmes tiers de gérer les clés utilisateur via des requêtes http régulières.
Installation facile (par défaut)
Il est supposé qu'une telle installation s'exécutera sur de nouveaux serveurs propres. Si le serveur est déjà configuré pour certaines tâches - il est préférable de se référer à l'installation manuelle (afin de ne pas endommager les fonctionnalités existantes).
J'aime l'installation de nvm (gestionnaire de version de nœud) dans lequel l'utilisateur n'a besoin d'exécuter qu'une seule commande dans le terminal, qu'il copie à partir du site du projet, de sorte que le programme d'installation par défaut fonctionne de la même manière. Pendant que le script bash d'installation de démarrage est en cours d'exécution, le paquet persistant iptables demandera à l'utilisateur de sauvegarder les règles iptables actuelles.

Le choix de l'utilisateur ne fait aucune différence, car à la fin de l'installation, la dernière action reconfigurera le pare-feu et le nouvel ensemble de règles écrasera la sélection actuelle. À la fin du travail, le script vous demandera de terminer l'installation via l'interface Web.

L'installation Web commence par la confirmation de l'adresse IP publique du serveur. Par défaut, le script Web prend les données de l'url de chaîne du navigateur. En se concentrant sur cette adresse IP, le code du serveur recherche l'interface d'adresse réseau pour la future configuration du pare-feu et des serveurs openvpn.

Après avoir reçu les données du réseau, le programme d'installation crée un serveur VPN administrateur. La génération de clés cryptographiques lors de la configuration du répertoire racine prend un certain temps, et pendant le développement, sur la même machine, ce temps varie de 1 à 15 minutes.
Lorsque le serveur est créé et démarré, le programme d'installation passe à la deuxième étape, où il invite l'utilisateur à créer une clé d'administrateur.

Ensuite, il passe en mode veille pour connecter l'administrateur VPN. Il est prévu que vpn soit connecté sur le même périphérique à partir duquel l'installation est effectuée.

Lorsqu'un utilisateur se connecte au serveur VPN administrateur, il devient disponible à l'adresse 10.1.0.1 et une demande jsonp de la page d'installation y passe avec succès, ce qui devient un signal pour rediriger la page vers l'adresse interne et terminer l'installation.

Au stade final de l'installation, les deux serveurs vpn restants sont créés et configurés (temps pour générer la cryptographie * 2), tor, nginx et iptalbles. À la réception d'un signal pour terminer l'installation du côté serveur, le script redirige la page vers le panneau de contrôle principal.
Installation manuelle
L'installation manuelle du panneau de contrôle sur la structure de travail des serveurs OpenVPN nécessite plusieurs étapes et est techniquement réalisable par l'administrateur linux (et je ne pense pas que quelqu'un d'autre qu'eux puisse avoir besoin d'une installation manuelle):
- préparation de l'environnement nodejs selon les exigences de la sécurité actuelle du serveur et organisation du script sous la forme requise (service, manuel, etc.)
- préparation de la structure de fichiers des répertoires de données et de serveurs, création de "bases de données" json
- configuration du proxy nginx sur le panneau de commande et documentation, si nécessaire
Les détails et les détails techniques se trouvent dans la documentation en ligne .
En conclusion
J'espère que le projet sera utile pour quelqu'un.
Dépôt de projets
Dépôt de code source du panneau Web angulaire
Le projet est distribué sous licence MIT et publié en soutien au mouvement DIGITAL RESITANCE.
Des idées de développement PS au-dessus du toit - et fixez le multilinguisme, et débarrassez-vous des moments codés en dur dans le code, et ajoutez des fonctionnalités pour créer des serveurs, gérer le routage et un pare-feu, transformer le système en concepteur universel , etc. etc., mais comment et quand tout cela sera-t-il mis en œuvre? Sans indice, l'avenir se montrera.