Administrador web Llaves de cliente OpenVPN VPNFace Lite

Introducción


La creciente demanda de las letras mágicas VPN y sus razones, lejos de las tecnologías de red, ni siquiera es interesante para bromear.


Hola, eres bueno en computadoras? ayudarme sobre vpn?

De hecho, incluso me alegra que las personas comiencen a aprender los conceptos básicos de las redes de computadoras (¿qué es vpn, qué sucede y por qué comienzan a abrirse diferentes sitios con él?), Y, si es posible, ayuda. Intento impulsar los procesos de autoconfiguración de mis propios servidores VPN, pero entiendo que no todos son administradores de sistemas , por lo que algunos amigos solo sugieren comprar un servidor y dármelo para la configuración.


Pero cualquier programador debe ser flojo para no repetir lo mismo repetidamente. Realizar las mismas acciones una y otra vez perfecciona las habilidades, pero mata todo el interés del desarrollo y la creatividad (y el tiempo).


Y así, al configurar el tercer servidor VPN, me di cuenta de que era necesario automatizar todo esto y hacer que el usuario sea fácil , de modo que después de una breve instrucción, incluso el usuario más común podría compartir la clave ovpn con un amigo o familiar. Y aún mejor: para instalar el sistema, el usuario podría independientemente con un mínimo de habilidades y conocimientos.


Así nació el proyecto VPNFace: un conjunto de scripts de servidor para administrar las claves de usuario de los servidores OpenVPN y un panel de control web para ellos. Y después de unos días de desarrollo, me sorprendí pensando que en algún lugar alrededor del 25% de la funcionalidad que se establecerá nunca será reclamada por este mismo "usuario ordinario", y el prefijo Lite se agregó al nombre, y el concepto principal del proyecto cambió de un diseñador de propósito general a un de mente estrecha herramienta , que al mismo tiempo también redujo significativamente el tiempo de desarrollo antes del lanzamiento.


Por supuesto, bueno, nunca sucedió así , ¿por qué otro gerente de OpenVPN? Para ser honesto, la idea de otros proyectos de gerentes vpn me vino a la mente cuando el núcleo principal ya estaba funcionando, y vi todo tipo de pequeñas cosas. Al principio estaba molesto porque era tan estúpido y ni siquiera hice un estudio mínimo (porque no me gusta producir bicicletas), pero después de estudiar los proyectos anteriores, me di cuenta de que el mío también tiene su propio nicho.


Características clave


  1. Minimalismo funcional: un usuario común, cuando interactúa con vpn como administrador, requiere solo unas pocas funciones: crear una llave, bloquear y desbloquear. Es poco probable que piense en crear otro servidor VPN si tiene uno que funcione o en escalar para cambiar los datos del centro de certificados. Pocas personas necesitarán hermosos gráficos de tráfico y la funcionalidad del servidor de la empresa, con el fin de utilizar con calma un telegrama .
  2. Minimalismo de software: el único programa que necesita el usuario es el cliente oficial de OpenVPN, disponible en todos los sistemas y dispositivos. El panel de control de teclas es una aplicación web que se ejecuta en un navegador. La autorización administrativa se realiza mediante la clave vpn.
  3. Configuración semi-fija: el 80 por ciento de los usuarios necesitan lo mismo, y no les importa qué direcciones IP están dentro de las redes (ni siquiera saben que están allí), otro 15% requiere un poco más, pero, de manera similar, una y la misma Además, el 5% restante escribe cosas similares ellos mismos, implementando todo lo que necesitan en ellos, por lo que no puede preocuparse por ellos. Sin embargo, el panel se puede conectar manualmente a los servidores ya abiertos vpn, o corregir los datos del certificado antes de la instalación estándar.
  4. Desprendimiento absoluto a las empresas de alojamiento u otros servicios de terceros: hay bastantes copias rotas en disputas sobre el alojamiento más mágico, esto queda completamente a elección del usuario. El sistema operativo del servidor es más importante para el script: está escrito en los sistemas Ubuntu / Debian, pero todos los servidores los tienen. El sistema se mantendrá tranquilo tanto en la red doméstica interna como en la corporativa.
  5. El proceso de instalación más simplificado en un servidor limpio recién comprado: si se puede hacer algo sin la participación del usuario, esto se hace mediante código duro. Porque Lite Sí, no fue posible lograr el instalador como Google Outline, requiere una conexión de usuario a través de ssh para comenzar la instalación y una compra independiente del servidor, pero fue posible lograr ese conocimiento de "cómo conectarse a través de ssh". Con la "configuración predeterminada", el usuario se configura con una configuración "estándar" sin ninguna pregunta.

Panel de control clave


Durante una instalación predeterminada, se crean tres servidores VPN: administrador, Internet y oscuro: no es difícil adivinar los nombres, el primero sirve para el acceso del administrador al servidor y el panel de control de teclas (y ssh, si es necesario), el segundo libera a los usuarios inmediatamente a Internet, y el tercero lleva transparentemente todo el tráfico posible a la red tor (el tráfico udp excepto DNS no va a ninguna parte, y DNS va a tor)



Se decidió que el panel de control se hiciera en un sexto AngularJS nuevo ( durante la instalación, se descarga una versión compilada del panel, por lo que las bibliotecas angulares no son necesarias para el trabajo ). Me gusta el concepto de aplicaciones web, e intento desarrollar en esta dirección, si es posible. También quería estudiar materiales angulares durante mucho tiempo para crear paneles de administración de Google en varios proyectos.


La gestión de claves, como ya se indicó, se simplifica al mínimo:


Nueva clave:



Bloqueo de teclas:



Desbloqueo clave:



El botón de descarga proporciona el archivo ovpn terminado para la conexión.


La ayuda mínima para el usuario está integrada en el panel:



Y la documentación compilada se incluye en el proyecto, que por defecto aumenta para la subred administrativa en el puerto 81:



El significado de la versión Lite también limita el soporte de idiomas: en este momento, todo el proyecto existe solo en ruso, y el multilingüismo ni siquiera está establecido en el núcleo.


Lado del servidor


El lado del servidor se ejecuta en los scripts nodejs y bash. ¿Por qué un nodo? Me gusta y tengo muchos proyectos sobre ella. Tener una colección vpn-manager me pareció una buena idea. La secuencia de comandos de instalación extrae el administrador de versiones de nodo , instala el nodo v10 a través de él y crea un enlace a la carpeta de todo el sistema para que funcionen los servicios escritos en nodejs.


Los paquetes instalados en el nodo también son mínimos: servicio para siempre, para siempre, para iniciar el proyecto como un servicio del sistema, express, para API web, shelljs, para ejecutar comandos de consola, dirección IP y calculadora de subred, salida de color de tiza a la consola. Por supuesto, esta lista se puede acortar con el perfeccionismo del minimalismo, pero la segunda ley de Akin nació claramente de la nada (la misma ley se puede aplicar a la pregunta "¿por qué nodejs?" Y algunas otras) y a pesar del deseo de minimalismo en otros temas, aquí Decidí no profundizar.


La secuencia de comandos del servidor gestiona los servidores openvpn a través de un conjunto de secuencias de comandos bash y requiere una estructura de archivo de directorio raíz específica y una configuración de archivo openvpn. Se utilizan dos archivos json como base de datos, lo que permite:


  1. deshacerse de la interacción con bases de datos como mongo / sql y las dependencias y complicaciones relacionadas
  2. sin ningún problema, prepare las "bases" (y la estructura de directorios y archivos) manualmente o mediante script, cuando instale en un servidor de trabajo configurado, cuando el instalador incluido en el kit pueda incluso ser dañino y deba evitarse el proceso de instalación predeterminado (la necesidad de instalación se verifica precisamente por la presencia y el contenido de json archivos de base de datos)

Una ventaja adicional del panel de control como una aplicación web independiente fue la separación de la funcionalidad del servidor en un conjunto separado de puntos finales http api, lo que abre la posibilidad de que los programas de terceros administren claves de usuario a través de solicitudes http regulares.


Instalación fácil (por defecto)


Se supone que dicha instalación se ejecutará en servidores nuevos y limpios. Si el servidor ya está configurado para algunas tareas, es mejor consultar la instalación manual (para no dañar la funcionalidad existente).


Me gusta la instalación de nvm (administrador de versiones de nodo) en el que el usuario necesita ejecutar solo un comando en el terminal, que copia desde el sitio del proyecto, por lo que el instalador predeterminado funciona de la misma manera. Mientras se ejecuta el script bash de instalación de inicio, el paquete iptables-persistent le pedirá al usuario que guarde las reglas actuales de iptables.



La elección del usuario no hace ninguna diferencia, ya que al finalizar la instalación, la última acción reconfigurará el firewall y el nuevo conjunto de reglas sobrescribirá la selección actual. Al final del trabajo, el script le pedirá que complete la instalación a través de la interfaz web.



La instalación web comienza con la confirmación de la dirección IP pública del servidor. Por defecto, el script web toma datos de la url de la cadena del navegador. Centrándose en esta ip, el código del servidor busca la interfaz de dirección de red para la configuración futura del firewall y los servidores openvpn.



Después de recibir los datos de la red, el instalador crea un servidor vpn de administrador. La generación de claves criptográficas durante la configuración del directorio raíz lleva algún tiempo, y durante el desarrollo, en la misma máquina, este tiempo varió de 1 a 15 minutos.


Cuando se crea e inicia el servidor, el instalador continúa con el segundo paso, donde solicita al usuario que cree una clave de administrador.



Luego pasa al modo de espera para conectar el administrador vpn. Se espera que vpn se conecte en el mismo dispositivo desde el que se realiza la instalación.



Cuando un usuario se conecta al servidor vpn de administrador, está disponible en la dirección 10.1.0.1, y una solicitud jsonp de la página del instalador pasa con éxito allí, lo que se convierte en una señal para redirigir la página a la dirección interna y completar la instalación.



En la etapa final de la instalación, se crean y configuran los dos servidores vpn restantes (tiempo para generar criptografía * 2), tor, nginx e iptalbles. Al recibir una señal para completar la instalación del lado del servidor, el script redirigirá la página al panel de control principal.


Instalación manual


La instalación manual del panel de control en la estructura de trabajo de los servidores OpenVPN requiere varios pasos y es técnicamente factible por el administrador de Linux (y no creo que alguien más que ellos pueda necesitar la instalación manual):


  1. preparación del entorno de nodejs de acuerdo con los requisitos de seguridad del servidor actual y organización del script en la forma requerida (servicio, manual, etc.)
  2. preparando la estructura de archivos de datos y directorios del servidor, creando "bases de datos" json
  3. configurar el proxy nginx en el panel de control y la documentación, si es necesario

Los detalles y detalles técnicos se pueden encontrar en la documentación en línea .


En conclusión


Espero que el proyecto sea útil para alguien.


Repositorio de proyectos
Repositorio de código fuente del panel web angular
El proyecto se distribuye bajo la licencia MIT y se publica en apoyo del movimiento DIGITAL RESITANCE.


PD: desarrolle ideas por encima del techo, y fije el multilingüismo, y elimine los momentos codificados en el código, y agregue funcionalidad para crear servidores, administrar enrutamiento y firewall, convertir el sistema en un diseñador universal , etc. etc., pero ¿cómo y cuándo se implementará todo esto? Sin una pista, el futuro se mostrará.

Source: https://habr.com/ru/post/es412815/


All Articles