Inhaltsverzeichnis
Letzte Aktualisierung am 12.10.2024, 09:10:22 Uhr
Für den sicheren Zugriff von außen auf VMware Horizon gibt es seitens des Herstellers schon länger das Produkt Unified Access Gateway (UAG). Dieses ist aktuell kostenlos in den verschiedenen Edition von VMware Horizon enthalten.
Für die Bereitstellung unter VMware vSphere gibt es eine Dokumentation und auch weitere Blog Artikel, wo dies ausführlich beschrieben ist. Leider gibt es für die Bereitstellung unter Microsoft Hyper-V nicht wirklich Informationen durch den Hersteller. Daraus ist die Idee für diesen Beitrag entstanden.
Voraussetzungen
- Microsoft Hyper-V Server (Windows Server 2012R2 oder höher)
- Mindestens 2 Prozessor Cores
- Mindestens 4GB Arbeitsspeicher
- Mindestens 10GB Festplattenspeicher auf dem Hyper-V Server
Rahmenbedingungen
- Die Bereitstellung erfolgt in einer DMZ.
- Das UAG wird als Single NIC konfiguriert.
- Mindestens Windows PowerShell 5.1 auf dem Hyper-V Server.
Vorbereitungen
VMware stellt für die (automatisierte) Bereitstellung eine Sammlung von PowerShell Skripten bereit. Diese können über das VMware Customer Connect Portal heruntergeladen werden.
Die aktuelle Version (2106.2) des UAG kann hier heruntergeladen werden. Für die Bereitstellung unter Hyper-V Server gibt es keine dedizierte Installationsdatei. Daher greife ich auf die Datei „Unified Access Gateway (UAG) 2106.2 for Microsoft Azure“.
Dies kann auf der selben Internetseite wie oben verlinkt heruntergeladen werden. Nachdem alle Downloads abgeschlossen sind, beide ZIP Archive in ein gemeinsames Verzeichnis ablegen. In meinen Fall ist das „D:\uag“.
Anschlißend entpacke ich beide ZIP Archive mit Hilfe von 7-Zip.
Die Verzeichnis und Dateistruktur sollte wie folgt aussehen:
Bereitstellung
Für die Bereitstellung sind neben der PowerShell Skripte auch eine Initialisierungsdatei (Ini Datei) erforderlich. Darin werden Parameter definiert, welche bei der Bereitstellung an die Appliance übergeben werden.
Initialisierungsdatei
Wie bereits oben geschrieben, handelt es sich um eine Bereitstellung der UAG Appliance als SingleNIC. Nachstehend habe ich meine INI Datei (D:\uag\uag99-hyper-v.ini) in verschiedene Bereich aufgeteilt. Gerade in Hinblick auf Parameter welche erforderlich und optional sind. Der gesamte Inhalt steht auch auf GitHub zur Verfügung.
Basic
Die nachstehenden Parameter sind für den Betrieb des UAG aus meiner Sicht unerlässlich.
[General] # # UAG virtual appliance unique name (between 1 and 32 characters). # If name is not specified, the script will prompt for it. # name=uag2106.2 # # Full path filename of the UAG .ova virtual machine image # The file can be obtained from VMware # source="D:\uag\euc-unified-access-gateway-21.06.2.0-18528989_OVF10.vhd" # # Normally used for vSphere Data Store. In Hyper-V used for the virtual Disk Foldername # ds=D:\Hyper-V\uag2106.2\Virtual Hard Disks # # vSphere Network names. For pre 3.3 UAG versions, a vSphere Network Protocol Profile (NPP) must be associated with every referenced network name. This specifies # network settings such as IPv4 subnet mask, gateway etc. UAG 3.3 and newer no longer uses NPPs and so for static IPv4 addresses a netmask0, netmask1 and netmask2 # value must be specified for each NIC. Normally a defaultGateway setting is also required. # netInternet=Microsoft Network Adapter Multiplexor Driver #netManagementNetwork=VM Network #netBackendNetwork=VM Network defaultGateway=192.168.0.1 deploymentOption=onenic ip0=192.168.0.2 netmask0=255.255.255.0 routes0=0.0.0.0/0 192.168.0.1 dns=192.168.0.1 dnsSearch=domain.de # # SSH settings # sshEnabled=true sshPasswordAccessEnabled=true # # Gateway-Standort # gatewayLocation=DMZ
Bitte nicht vergessen die Pfade in Zeile 13 und 18 sowie den Namen für den vSwitch in Zeile 25 an eure Installation anzupassen. Damit verbunden auch die Netzwerkeinstellungen eurer Umgebung.
SSL Zertifikate
Das Deployment nutzt standardmäßig Self-Signed SSL Zertifikate sowohl für das Internet als auch Admin Interface. Selbstverständlich können auch (gekaufte) SSL Zertifikate für beide Interfaces angegeben werden.
Die aktuelle Version des PowerShell Skripts unterstützt auch die Nutzung des SSL-Zertifikats im Format pfx. Leider habe ich bei der Prüfung mit Qualys SSL Labs festgetellt, dass die Zertifikatskette (Chain issues) unvollständig ist. 🙁
Wichtig ist an dieser Stelle, dass das eigentliche Zertifikat und das der ausstellenden Zertifizierungsstelle in einer Datei (domain.de.chain.pem) gespeichert werden. Von der Reihenfolge her zuerst das Zertifikat der Domain und dahinter gleich das Zertifikat der Zertifizierungsstelle.
-----BEGIN CERTIFICATE----- MIICnjCCAgegAwIBAgIKA/G46EpG6ClSQzANBgkqhkiG9w0BAQUFADBaMQswCQYD VQQGEwJVUzETMBEGA1UEChMKQXBwbGUgSW5jLjEVMBMGA1UECxMMQXBwbGUgaVBo b25lMR8wHQYDVQQDExZBcHBsZSBpUGhvbmUgRGV2aWNlIENBMB4XDTE4MTAwNzEy ... OBroz8wij1tl1bnu3ul8XAX67doh7R1CFuWzJzsasEbRjpBhei1ApPqIZJ/yM4XY UEtI9OzZP/I6E5fBN5nSXVw0KuiN1Nbs3GEteafzCm4NwQyI0veauSrM7jlShfei Zro= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj ... G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== -----END CERTIFICATE-----
Der private Schlüssel (domain.de.key.pem) muss ebenfalls zur Verfügung gestellt werden. Anderenfalls kann das SSL-Zertifikat nicht importiert werden.
-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5 1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh ... X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ 37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0= -----END RSA PRIVATE KEY-----
Alle verwendeten Zertifikate und Schlüssel habe ich im PEM Format (Base64, X509) im Verzeichnis „D:\uag“ abgelegt werden.
Nachstehend die Konfiguration in der INI Datei für das Internet Interface des UAG.
[SSLCert] # # From UAG 3.0 and newer, you can specify the name of a .pfx or .12 format certificate file containing the required certificate and private key and # any required intermediate certificates. In this case there is no need to use openssl commands to convert the .pfx/.p12 file into the # associated PEM certificates file and PEM private key file. # pemCerts=domain.de.chain.pem pemPrivKey=domain.de.key.pem
Nachstehend die Konfiguration in der INI Datei für das Admin Interface des UAG.
[SSLCertAdmin] # # From UAG 3.0 and newer, you can specify the name of a .pfx or .12 format certificate file containing the required certificate and private key and # any required intermediate certificates. In this case there is no need to use openssl commands to convert the .pfx/.p12 file into the # associated PEM certificates file and PEM private key file. # pemCerts=domain.de.chain.pem pemPrivKey=domain.de.key.pem
Radius Server
Heutzutage erfolgt die Anmeldung über das Internet neben Benutzername und Passwort auch mit Hilfe von 2 Faktor Authentifizierung (2FA). In dem meisten mir bekannten Lösungen erfolgt dies mit Hilfe eines Radius Servers. Nachstehen ein Konfigurationsbeispiel für Gemalto SafeNet Authentication Service.
[RADIUSAuth] # # hostName is the name or IP address of the primary RADIUS server # hostName=server01.domain.de # # authtype must match the configuration of the RADIUS server. It is one of # PAP, CHAP, MSCHAP1, or MSCHAP2 # authType=CHAP # # authPort is the authentication destination UDP port configured on the RADIUS server. It is # usually 1812 # athPort=1812 # # radiusDisplayHint is a short string that will be included in the client prompt. # In this example, the user prompt will be "Enter your XXX Token username and passcode". # radiusDisplayHint=2FA
Die vollständige INI Datei habe ich in einem Git Repository bereitgestellt.
Deployment
Sind alle Parameter gesetzt, kann die Bereitstellung der UAG Appliance durchgeführt werden. Dazu eine PowerShell als Administrator auf dem Hyper-V Server starten. Anschließend in das Verzeichnis „D:\uag“ wechseln.
cd "d:\uag"
In der PowerShell Datei muss vor Beginn die Zeile 279 angepasst werden. Und zwar funktioniert die Konvertierung der Vorlage von .vhd in .vhdx nicht. Wird die Änderung nicht durchgeführt, kann die Festplatte nicht in die neue virtuelle Maschine (VM) eingebunden werden.
$vhdxFile+=".vhd"
Wer gerne noch den Pfad der neuen VM anpassen möchte, ergänzt im selben PowerShell Skript Zeile 279 um den Parameter -Path. Durchaus sinnvoll, wer nicht die Standardverzeichnisse für virtuelle Maschinen und Festplatten bei sich nutzt.
$out=New-VM -Name $VMName -MemoryStartupBytes $vRAM -VHDPath $vhdxFile -SwitchName $netInternet -Path "D:\Hyper-V" -ErrorVariable Error -ErrorAction SilentlyContinue Zeile 294
Bereitstellung starten
.\uagdeployhv.ps1 -iniFile .\uag99-hyper-v.ini -ceipEnabled "false"
Abfrage des Passworts für den Benutzer „root“. Dieser Zugang ist später notwendig, um sich an der Konsole oder per SSH an der UAG Appliance anmelden zu können.
Abfrage des Passworts für den Benutzer „admin“. Dieser Zugagn ist später notwendig, um sich an der Weboberfläche der UAG Appliance anmelden zu können.
Hinweis: Beide Passwörter dürfen nicht identisch sein. Das Passwort muss mindestens 8 Zeichen lang sein. Mindestens ein Groß- und Kleinbuchstaben, eine Zahl und Sonderzeichen. Folgende Sonderzeichen sind erlaubt: >>! @ # $% * (<<
Nach wenigen Minuten, wenn es zu keinen Probleme bei der Bereitstellung gekommen ist, ist das UAG einsatzbereit.
An der Stelle nicht ungeduldig werden. Das UAG selbst benötigt nach dem Start nochmals 1-2 Minuten, bis die Weboberfläche für die Administration erreichbar ist.
Fehlersuche
Sobald Fragen oder Rückmeldungen vorliegen, wird der Bereich mit Informationen gefüllt.