HTML5 statt Terminalserver

Wer ärgert sich nicht über die Abzockerei bei Windows Terminalservern mit CALs etc? Es geht aber auch billiger und besser mit HTML5.

Guacamole

Das in der IT Öffentlichkeit kaum wahrgenommene Apache Guacamole ist hier eine sehr schöne Lösung, mit der man auch sehr viele Probleme mit störrischen Anwendungen, die nicht auf Terminalserver laufen wollen, lösen kann. Quasi kostenlos dazu gibt es auch die Beseitigung der üblichen Security Probleme mit RDP und sonstigem Security Gefrickel made by Microsoft.

Security Überlegungen

Wir machen jetzt hier aus Windows eine Web Anwendung, daher werden sich die Security Maßnahmen zunächst auch mit Web Security befassen. Die beteiligten Komponenten:

  • Windows mit aktuellem Patchstand - Bei Windows sollten Security Updates spätestens binnen 24h getestet und installiert sein, egal ob Microsoft sagr, ob es dafür Exploit public available sagt oder nicht. Auch was nicht public available ist, ist gefährlich.
  • Active-Directory Infrastruktur, kann man aber muss man nicht für die Authentifizierung mit Guacamole nutzen.
  • Evtl. OpenID/Connect Server für die Authentifizierung in Guacamole (wird hier nicht behandelt)
  • Apache Guacamole
  • Postgres Datenbank für Guacamole
  • Web Application Firewall oder zumindest Reverse Proxy

Als Web Application Firewall kommen z.B. Bunkerized Nginx oder für größere Unternehmen eine F5-Big Lösung in Betracht. In beiden Fällen sollten zumindest die OWASP Rulesets installiert werden, wobei speziell zunächst Rulesets zu Injection Angriffen aktiviert sein sollten. Weiterhin ist eine MFA Pflicht, dabei sind Smartcard HSM oder Yubikey zu empfehlen, beides wird von OpenSC unterstützt. Wer keine (DSGVO) Probleme bei der Nutzung von US Anbietern von Cloud Services sieht, kann z.B. via Cloudflare Access auch einen Zugriff über einen solchen Service aus dem Internet ermöglichen.

Guacamole

Am besten nutzt man dafür die Docker Images, die Apache dafür bereitstellt. Mit Docker Compose bekommt man die Komponenten in ein zentrales Config File.

version: '3.7'

services:
guacd:
image: guacamole/guacd
logging:
driver: json-file
restart: unless-stopped
guacamole:
environment:
- GUACD_HOSTNAME=guacd
- GUACD_PORT=4822
- POSTGRES_HOSTNAME=postgres
- POSTGRES_PORT=5432
- POSTGRES_DATABASE=guacamole
- POSTGRES_USER=guacamole
- POSTGRES_PASSWORD=***
extra_hosts:
- "postgres:192.168.54.32"
image: guacamole/guacamole
ports:
- 172.17.0.1:8080:8080
volumes:
- ./build:/usr/src/guacamole
logging:
driver: json-file
restart: unless-stopped

Es wird hier eine externe Postgresql Datenbank verwendet.

Sinnvollerweise sollte im Netzsegment von Guacamole eine DNS Auflösung gegen die Active Directory Domain möglich sein, dann muss man sich nicht mit dynamischen IP-Adressen herumschlagen.

Konfiguration

Für einen ersten Versuch müssen unter Guacamole Verbindungen und User angelegt werden.

Wichtig sind bei den Verbindungen zunächst Netzwerk und Authentifizierung. Unte Netzwerk sollte der im Active Directory bekannte Hostname für jeden Windows Host, der über Guacamole genutzt werden soll, angegeben werden. Zu jedem Windows Host gehört genau eine Verbindung. Unter User werden die Accounts vergeben, die über HTML5 Windows nutzen sollen. Dort erfolgt auch die Zuordnung User ↔ Verbindung.

Das Durchreichen der Smartcard via RDP zu Windows wird von Guacamole derzeit (noch) nicht unterstützt (Stand Guacamole Version 1.4.0).

Nginx

Bei der Konfiguration von Nginx muss nur beachtet werden, dass Websockets unterstützt werden und am besten X.509 Clientzertifikate erzwungen werden. Damit bekommt man eine wirksame 2F Authentifizierung, wenn der private Schlüssel auf einer Smartcard liegt.

Showtime

Aus dem Internet ist jetzt ein Zugriff auf die persönliche Windows Instanz möglich.

Die Performance unterscheidet sich je nach Leistung der Internet Anbindung. Im LAN ist praktisch kein Unterschied zu direktem RDP zu bemerken. Hier ist Window 11 im Chromium Browser zu sehen. Die Verbindung bleibt allerdings nur bestehen, wenn die Smartcard gesteckt ist. Wird die Smartcard herausgezogen, dann wird die Verbindung nach wenigen Minuten unterbrochen.

Zurück