VPN mit Zertifikaten von iOS zu Windows RRAS mit Endpoint Manager (Intune) konfigurieren

Wir möchten erfolgreich eine VPN-Verbindung auf iOS-Endgeräte verteilen. Das „OnDemand“ VPN soll verwendet werden und daher muss der Nutzer mit Zertifikaten authentifiziert werden. die Authentifizierung am NPS (Radius) ist noch eine andere Sache, dieser Beitrag konzentriert sich auf das IKEv2 zwischen iOS und Windows Server RRAS.

Unsere iOS-VPN-Intune Checkliste

  • Microsoft Endpoint Manager (ehemals Intune) soll die VPN-Verbindung via Konfigurationsprofil verteilen
    • Die Devices sind schon im EPM angekommen und synchronisieren fröhlich Richtlinien
  • Microsoft Endpoint Manager soll den Nutzern (auf den Geräten) automatisch ein Zertifikat ausstellen (via „Certificate Connector“)
    • Funktioniert perfekt mit einer Microsoft CA
    • Die CA und NPS sind nicht Teil dieses Beitrages, aber mit Anleitung durchaus machbar
  • Die iPhone/iPads Geräte haben iOS 14.2 oder neuer (!)
  • Es wird IKEv2 verwendet
    • Denn das ist die einzige Möglichkeit, iOS mit RRAS unter der Verwendung von Zertifikaten zu verbinden
  • Der RRAS Server ist ein Windows Server 2019
  • RRAS ist korrekt konfiguriert (Ports, Erreichbarkeit, Radius …)
  • NPS ist korrekt konfiguriert (Verbindungsanforderungs- und die Verbindungsrichtlinie …)

Im Prinzip folgen wir dem brauchbaren „Deploy Always On VPN“ Guide von Microsoft unter https://docs.microsoft.com/en-us/windows-server/remote/remote-access/vpn/always-on-vpn/deploy/always-on-vpn-deploy-deployment

Der Trick ist eine funktionierende Kombination aus iOS IKEv2-Parametern und den zugehörigen Phase1/2 Parametern auf der RRAS-Gegenstelle zu erstellen. Denn das ist nicht Default und leider auch praktisch nirgends dokumentiert.

RRAS-Server

Um erfolgreich eine IKEv2 Verbindung von iOS zum RRAS Server herzustellen, ist dem RRAS-Server (und iOS) die richtige Kombination der Ciphersuits vorzugeben. Das geht am RRAS via CustomPolicy. Natürlich exklusiv an der PowerShell.

Viele Kombinationen funktionieren nicht. Diese hier funktioniert:

Set-VpnServerConfiguration -CustomPolicy -AuthenticationTransformConstants SHA256128 -CipherTransformConstants AES256 -DHGroup Group14 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -PfsGroup PFS2048 -SALifeTimeSeconds 28800 -MMSALifeTimeSeconds 86400 -SADataSizeForRenegotiationKilobytes 1024000

Dann muss man dem RRAS-Server in aller Regel erklären, das er auch fragmentierte IKE Pakete annehmen soll. Bei einer Schlüsselgröße von 2048bit mit Zertifikaten und einer MTU von 1492 oder 1500byte wird es oft knapp und Pakete fragmentieren:

New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\RemoteAccess\Parameters\Ikev2\" -Name EnableServerFragmentation -PropertyType DWORD -Value 1 -Force

Wenn beides geschehen ist, muss der RRAS neu starten:

Restart-Service RemoteAccess

Microsoft Endpoint Manager

Innerhalb der VPN-Richtlinie kommt es auf die IKEv2 Parameter an. Die sind in einer bestehenden Richtlinie erreichbar unter Devices > Richtlinie (Name) > Properties > Configuration settings > IKEv2 Settings. Dort gibt es ab etwa der Mitte die „wichtigen“ (und nicht offensichtlichen) Einstellungen:

Perfect forward secrecy: Enable

Certificate revocation check: Disable

Use IPv4/IPv6 internal subnet attributes: Disable

Mobility and multihoming (MOBIKE): Enable

Redirect: Enable

Security Association Parameters

Encryption algorithm: AES-256

Integrity algorithm: SHA2-256

Diffie-Hellman group: 14

Lifetime (minutes): 1440

Child Security Association Parameters

Encryption algorithm: AES-256

Integrity algorithm: SHA2-256

Diffie-Hellman group: 14

Lifetime (minutes): 480

… und schon geht’s. Also schon ging es bisher bei unseren Systemen 🙂

Vielleicht schreiben wir irgendwann noch einen großen Artikel mit allen Schritten, also von der Zertifizierungsstelle bis zum Endgerät … oder jemand anderes tut das. Oder, wenn ihr sowas braucht, ruft ihr uns an 😋

PrintNightmare: Drucker hinzufügen Fehler 0x0000011b

Nach der Installation von KB5005033 (und den folgenden Patches) kann es dazu kommen, dass Clients im Netzwerk nicht mehr zuverlässig drucken können:

  • Die Druckerliste ist (und bleibt) leer
  • Es passiert nach einem Druckauftrag nichts mehr
  • Alle Netzwerkdrucker sind verschwunden

Verbindet man einen so „verschwundenen“ Drucker von einem gepatchten Windows-Druckserver neu, erhält man statt eines neu verbundenen Druckers die Fehlermeldung 0x0000011b. Das betrifft in der Regel Maschinen, die eine ältere Version des zugehörigen Druckertreibers installiert hatten.

Nutzt man auch noch Drucker(treiber) die einen einem eigenen Porttyp mitbringen, bleibt auch die Liste der „Anschlüsse“ plötzlich leer.

Lösung

In die Registry importieren:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print]
"RestrictDriverInstallationToAdministrators"=dword:00000000

Nach einem Neustart des Druckerspoolers geht alles wieder.

In einigen Fällen kann auch dieser Registry Key auf dem Printserver die Lösung sein:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print]  "RpcAuthnLevelPrivacyEnabled"=dword:00000000

Hiernach ist ebenfalls ein Neustart des Spoolers (auf dem Printserver) erforderlich.

Nach Windows-Update können Point-and-Print Treiber nicht mehr von Nutzern installiert werden

Windows Updates nach dem 10.8.2021 erfordern standardmäßig Administratorrechte, um Druckertreiber installieren oder aktualisieren zu können. Bisher konnten Benutzer ohne Administratorrechte:

  • Neue Netzwerkdrucker mithilfe von Treibern auf einem Printserver installieren
  • Aktualisieren vorhandener Druckertreiber mit Treibern vom Printserver

Das geht jetzt nicht mehr. Stattdessen kommt die gute alte Vertrauensfrage und der Admin muss seine Credentials eingeben. Das ist auch unabhängig von den Einstellungen in der GPO.

Lösung

Ein Registry-Eintrag stellt das „alte“ Verhalten wieder her. Leider einschließlich der Sicherheitslücke bei der Installation von Druckertreiber, die es einem Hacker erlaubt weitere DLL-Dateien an einen Druckertreiber anzuhängen.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint]
"RestrictDriverInstallationToAdministrators"=dword:00000000

AzureAD Application App-Registrierungen mit Secret erstellen, das nicht abläuft

Microsoft hat zu Beginn des Jahres die Auswahl „niemals“ aus der Gültig-Bis Auswahl für geheime Clientschlüssel bei neuen AzureAD Apps entfernt. Hier ist im Azure WebGUI die Auswahl seither nur noch bis „2 Jahre“ möglich.

Die Auswahl ist auf bis zu 24 Monate eingeschränk

Die Limitierung beschränkt sich aber auf das GUI, die PowerShell kann weiterhin geheime Clientschlüssel erstellen, die deutlich länger gültig sind.

Lösung

Sofern die App selbst schon im WebGUI erstellt ist (Neue Registrierung > Name, URL > Registrieren) lässt sich für diese App schnell ein Secret erstellen.

AzureAD Anwendung geheimen Clientschlüssel via PowerShell hinzufügen, mit deutlich längerer Laufzeit

# Mit AAD Verbinden
Connect-AzureAD

# Apps auflisten, passende ObjectId kopieren
Get-AzureADApplication

# "Gültig von" und "bis" holen
$startDate = Get-Date
$endDate = $startDate.AddYears(99)

# Secret erstellen lassen
$aadAppsecret01 = New-AzureADApplicationPasswordCredential -ObjectId <ID> -StartDate $startDate -EndDate $endDate -CustomKeyIdentifier <ANZEIGENAME-DES-SECRETS>

# Secret anzeigen (um es zu kopieren und sicher zu verwahren)
echo $aadAppsecret01.Value

Dynamic Disks mit Windows RAID mit PowerShell verwalten

Wie kann man die Windows PowerShell verwenden, um dynamische Datenträger zu verwalten, wie zum Beispiel den Status eines RAID zu untersuchen?

Nicht.

Die „dynamischen Datenträger“, die seit Windows 2000 integraler Bestandteil von Windows und Windows Server, sind „veraltet“ und werden irgendwann entfernt. Obwohl die dynamischen Laufwerke weiterhin verfügbar sind und relativ viel genutzt werden, stellt Microsoft keine PowerShell-Cmdlets zum Verwalten der dynamischer Datenträger zur Verfügung.

Das einzige Cmdlet das helfen könnnte (das wir kennen) ist Get-Volume, das immerhin auch dynamische Volumes anzeigt. mit Get-PhysicalDisk und Get-StorageAdvancedProperty kann man dann noch den Status der Physischen Disks ansehen, aber damit war es das auch schon.

Hinweis: Das selbe geschieht auch im ServerManager. Der kann dynamische Laufwerke auch schon nicht mehr anzeigen.

Es bleibt wohl nur die Migration in Richtung StorageSpaces …

Schade 😑