
Érase una vez, cuando los árboles eran altos, y yo era un administrador de sistemas joven y verde, tuve la oportunidad de implementar un servidor de terminal en Windows 2000. Luego pensé que sería bueno si no se necesitara un cliente separado para conectarse al servidor. Con el paso del tiempo, los árboles crecieron, los ciervos del suéter soltaron los cuernos y yo, la barba, las soluciones para trabajar en la terminal a través del navegador comenzaron a aparecer en el mercado. Pero eran inestables o caras, y las implementaciones de prueba fueron muy útiles.
Pasó un poco más de tiempo, aparecieron canas en la barba y había muchas más soluciones basadas en HTML5. Y quería hacer una breve descripción de las opciones gratuitas, tanto para los administradores de sistemas principiantes como para aquellos que se perdieron este punto, como yo.
Entonces, ¿desea permitir que los empleados terminalki a través de un navegador o administrar servidores a través de él? Bienvenido a cat.
La conveniencia de conectarse sin un cliente individual apenas se puede sobreestimar: hay un navegador en casi cualquier dispositivo de usuario. Además de la comodidad del usuario, hay un aspecto de seguridad: dado que dicho cliente es un servicio web, es mucho más fácil protegerlo. De hecho, destacar un RDP clásico con vulnerabilidades interesantes es bastante peligroso, trabajar a través de una VPN no siempre es conveniente, y los servicios de fail2ban y un puerto no estándar, aunque ayudan, no brindan una protección del 100%. Si bien el servicio web puede protegerse mediante autorización de certificado y otros métodos de autenticación de dos factores.
Se cree que usar RDS-Gateway con envolver el tráfico RDP a través de HTTPS e instalar certificados en los clientes es una buena protección. De hecho, esto no es así: la instalación de certificados para RDS-Gateway es necesaria para autenticar no al cliente, sino al servidor. Puede verificar esto intentando conectarse a clientes RDP de terceros. Por supuesto, algunos de los bots que buscan RDP abierto eliminarán de esta manera. Pero las soluciones fail2ban también son necesarias en este caso.
Dejaré la configuración de seguridad fuera del alcance de este artículo y pasaré a ejemplos de implementación específicos. Probaremos en un servidor de terminal basado en Windows Server 2019, usaremos 1C 7.7 como una aplicación para verificar RemoteApp. Porque podemos
No hace mucho tiempo, Microsoft finalmente lanzó su solución para conectarse a RDP a través de un navegador. Comencemos con él.
Cliente web de escritorio remoto de Microsoft
La instalación y configuración del cliente se describe en detalle en la documentación , daré los pasos básicos debajo del spoiler.
Instalación del cliente desde MS.Preparación Los roles de Remote Desktop Gateway y / o el agente de conexión deben tener asignado un certificado en el que los clientes confiarían. Sí, casi lo mismo que durante el funcionamiento normal del cliente RDP a través de https. Puede tener un certificado público de confianza, puede usar una CA interna y, para fines de prueba, puede usar uno autofirmado.
Es posible que primero deba actualizar el módulo PowerShellGet.
Esto se hace mediante el comando:
Install-Module -Name PowerShellGet -Force
Después de eso, debe reiniciar la consola e instalar el cliente será suficiente para ejecutar los comandos:
Install-Module -Name RDWebClientManagement Install-RDWebClientPackage
En el proceso, Nuget se puede descargar para instalar módulos desde el repositorio, el servidor debe estar conectado a Internet. Sí, Windows ya está maduro y puede repositorio.
Ahora necesita configurar el certificado para este cliente. Esto se hace mediante el comando:
Import-RDWebClientBrokerCert cert.cer
Donde cert.cer es la ruta al certificado de agente de escritorio remoto en formato cer.
Ahora puede publicar el cliente con el comando:
Publish-RDWebClientPackage -Type Production -Latest
Después de la instalación, el cliente estará disponible a través de un enlace del formulario:
https://trm.contoso.com/RDWeb/webclient/index.html
Después de un inicio de sesión exitoso, todas las aplicaciones RemoteApp publicadas en la colección son visibles.

Aplicaciones publicadas en el navegador.
Intentemos iniciar 1C conectando Firefox con Kubuntu .

Kubuntu, Firefox, 1C 7.7.
Puede ejecutar otras aplicaciones publicadas. En este caso, funcionarán en una ventana, y el panel superior será algo así como una barra de tareas.

1C, Paint y WordPad.
En general, todo se ve bien y conveniente, también se admite un escritorio completo. La impresión funciona en forma de envío a una impresora virtual de PDF y luego descarga el archivo por el navegador. El portapapeles para texto también funciona, aunque la necesidad de confirmar el acceso del navegador al portapapeles es un poco molesta.

Confirmación de copia desde escritorio remoto.
Pero lo que aún no está disponible es la transferencia de archivos del servidor al servidor, y esta es una mosca significativa en la pomada. Para resumir.
Pros:
- Configuración relativamente simple.
- La instalación en un servidor de Windows se puede hacer directamente en la puerta de enlace del escritorio.
- Operación transparente y conveniente de RemoteApp.
- Soporte de impresión y portapapeles para texto.
Contras:
- Es necesario tratar con certificados.
- Falta de soporte para compartir archivos.
Bueno, veamos qué nos ofrece el mundo de código abierto.
Apache guacamole
Quizás una de las soluciones más famosas. Pero la versión 1.0 apareció relativamente recientemente. Sus desventajas incluyen la falta de soporte oficial de Windows como punto de instalación: necesita una máquina Linux o una imagen Docker por separado. La documentación está disponible, como de costumbre, en el sitio web oficial. Vale la pena señalar que, además de RDP, la solución admite el acceso del navegador a servidores ssh, telnet y vnc.
Si no desea crear una versión nueva desde el origen y tratar con las dependencias, puede usar scripts de instalación listos para usar, como el script guac-install . Pero, como de costumbre, los editores no son responsables de los scripts de terceros.
Después de la instalación, de acuerdo con la documentación, debe crear usuarios y configurar conexiones de alguna manera. Solía trabajar con MySQL como un repositorio de usuarios y sus configuraciones y configuré todo esto a través de una interfaz web. A través de él, puede crear y configurar usuarios, conexiones y grupos que le permiten hacer conexiones comunes para diferentes usuarios.

Configurar una conexión RDP simple.
Vale la pena señalar que si queremos conectarnos de manera transparente iniciando sesión solo a través de la interfaz web, tendremos que crear manualmente una conexión para cada usuario ingresando su contraseña (!), O hacer una instalación más complicada. Por ejemplo, use Active Directory para almacenar configuraciones y autorizar la base de datos, lo que requerirá la modificación del esquema AD. O configure la autorización a través de LDAP, creando también usuarios en una base de datos clásica como MySql .
Sin instalaciones complejas, tendrá que crear usuarios de interfaz web separados o hacer algo en común. En este caso, si no especifica un nombre de usuario y contraseña en la configuración de conexión, debe deshabilitar la seguridad de NLA en el servidor. No muy conveniente
Además de un escritorio completo, también hay soporte para RemoteApp. Un matiz importante es que debe registrar el nombre del programa en la configuración de la misma manera que en el archivo RDP.

Configurar RemoteApp.
Y si todo se hizo correctamente, nuestros "siete" se abrirán en el navegador.

Y nuevamente 1C 7.7 en el navegador.
La impresión funciona de la misma manera: se descarga el PDF, pero, a diferencia de la solución de MS, existe la posibilidad de intercambio de archivos con el servidor.
De hecho, Apache Guacamole lanza freerdp y puede explorar carpetas desde su máquina Linux a un servidor Windows.

Disco redirigido en 1C.
A su vez, puede descargar o descargar un archivo desde un navegador a través de un menú especial. En este menú, también puede configurar la emulación del mouse y el teclado en pantalla. Es llamado por el atajo de teclado Ctrl + Alt + Shift.

Trabaja con archivos.
El portapapeles de texto también funciona, pero un poco inconveniente (enfurece mucho más que la solución de MS). Los navegadores modernos combinados con Apache Guacamole facilitan la copia de texto desde una aplicación remota usando Ctrl + C, pero para pegar texto desde una máquina local necesitará usar el menú Ctrl + Alt + Shift.
Pero casi "fuera de la caja" implementó la autenticación de dos factores (especialmente si realiza la instalación con un script de terceros). Por ejemplo, usando el algoritmo TOTP .
Permítanme recordar brevemente: TOTP (Algoritmo de contraseña de un solo uso basado en el tiempo) es un algoritmo para generar contraseñas de un solo uso basado en el tiempo. En el primer inicio de sesión, se le pedirá al usuario que lea un código de barras bidimensional o escriba un conjunto de caracteres y los "alimente" a la aplicación (por ejemplo, Google Authenticator ). Y en base a este conjunto de caracteres (cadena de seguridad), la aplicación generará un nuevo número de código para ingresar cada 30 segundos.
En general, la solución dio la impresión de ser más reflexiva y completa, si no fuera por alguna dificultad en la configuración para el funcionamiento normal. Para resumir.
Pros:
- Soporte para portapapeles de texto e impresión.
- Soporte para compartir archivos.
- Soporte para pantallas táctiles en forma de emulación personalizada del mouse y el teclado.
- Posibilidad de grabar una sesión en un archivo de video.
Contras:
- La necesidad de una máquina o contenedor separado.
- Difícil de configurar, especialmente para un especialista que no está familiarizado con Linux.
- Operación no muy conveniente del portapapeles de texto.
En los espacios abiertos de la red, encontré otro proyecto poco conocido que lanza freerdp y muestra el resultado a través de un navegador. Probémoslo también.
Myrtille
El proyecto con toda la documentación se encuentra en el github del autor. A diferencia de Guacamole, Myrtille está instalado en Windows, e incluso prácticamente en el modo "Siguiente - Siguiente - OK". Instalar, inicie el navegador.

Windows en el navegador.
Además de RDP, se admiten SSH y la conexión a la máquina virtual Hyper-V. El menú de administración de la conexión se activa mediante un botón con tres puntos en la esquina superior izquierda.

Menú de gestión de conexión.
El trabajo con archivos se realiza a través de la interfaz web: el botón Archivos permite acceder a la carpeta Mis documentos del usuario para cargar y descargar archivos. Sin embargo, si Myrtille no está instalado en un servidor terminal, deberá configurar la redirección de carpetas. La impresión, a diferencia de las otras dos soluciones, abre inmediatamente una ventana con un cuadro de diálogo de impresión PDF.
Las cosas son un poco peores con RemoteApp cuando la aplicación se ejecuta en modo normal. Para ejecutar el desafortunado 1C, debe formar un enlace del formulario:
https: // myserver / Myrtille /? __EVENTTARGET = & __ EVENTARGUMENT = & server = server & domain = domain & user = user & passwordHash = passwordHash & program = program
En el que debe especificar explícitamente el usuario y su contraseña (o hash de contraseña). El programa debe estar escrito de la misma manera que en el archivo RDP; en el caso de nuestro 1C, será || 1cv7l . Todos los parámetros deben estar codificados en URL .

Y la tercera vez 1C en el navegador.
Para obtener el hash de contraseña, también puede usar myrtille simplemente siguiendo el enlace (ejecutando una solicitud GET):
https: //server/myrtille/GetHash.aspx? contraseña = contraseña
La autenticación de dos factores también está disponible "fuera de la caja" y se basa en oliveinnovations.com .
Para trabajar en un entorno de dominio, la aplicación tiene un modo de operación separado: modo Enterprise. Para habilitarlo, debe especificar el nombre de dominio y el grupo de administradores (usuarios que pueden configurar conexiones) durante la instalación (o posterior, en los archivos de configuración). Luego, al iniciar sesión, solo se solicitará un nombre de usuario y una contraseña, y el administrador puede crear configuraciones de conexión predefinidas para grupos de usuarios. Esto nos permitirá hacer un atajo conveniente para lanzar 1C.

Crear una conexión en el panel de control del modo Enterprise.
Ahora el usuario en la entrada verá las conexiones disponibles para él y lanzará 1C por botón, y no por un enlace extraño con una contraseña.

La interfaz cuando un usuario normal inicia sesión.
Desafortunadamente, en este momento no pude hacer que el portapapeles de texto funcionara en los navegadores modernos: el trabajo solo está en el botón del portapapeles y solo al lado del servidor a la PC local.
Total
Pros:
- Fácil instalación en Windows.
- Soporte para casi todo lo que necesita, como impresión y transferencia de archivos.
- La capacidad de conectarse a la aplicación o al escritorio de inmediato a través del enlace.
- Es posible trabajar en modo de compatibilidad (HTML4).
Contras:
- Mientras que el portapapeles de texto no funciona normalmente.
- Trabajar con archivos es conveniente solo si el servicio se instala directamente en el servidor terminal.
En lugar de un epílogo
Por supuesto, hay otras soluciones, incluidas las pagas. Estos son algunos de los más populares sin tocar monstruos como Xen Desktop:
Ya tienen soporte para impresoras y trabajan con archivos, pero en principio, las soluciones gratuitas alcanzaron más o menos un nivel similar.
Según los resultados del estudio, decidí detenerme en una solución de MS, ya que la transferencia de archivos en mi caso no era necesaria (más precisamente, categóricamente no era necesaria).