AADConnect Kennwort eines Benutzers neu in das Azure AD synchronisieren

Problem

Nach der „Kennwort zurücksetzen“ Aktion der Administrators einer lokalen Domäne wird das neue Kennwort eines Benutzes nicht automatisch in das Azure AD (Office 365) synchronisiert.

Der Benutzer kann sich zwar in dem lokalen AD mit seinem neuen Kennwort anmelden, in Office 365 aber weiterhin nur mit dem alten.

Ändert ein Benutzer selbser sein Kennwort (STRG+ALT+ENTF), wird das neue Kennwort sofort (max 120 Sekunden) synchronisiert.

Lösung

Von manuellen Datenbank-Änderungen an der Client-API „vorbei“ bekommt AADConnect (ADsync) nichts mit. Da es (ohne weiteres) nicht möglich ist, Kennworthashes aus dem AzureAD für einen Vergleich zu exportieren, bleiben die Kennwörter bis zur nächsten Änderung unterschiedlich.

Das Kennwort kann aber einfach manuell (nachträglich) neu synchronisiert werden.

  • PowerShell auf der AADConnect Maschine öffnen („Als Administrator“, mit ExecutionPolicy auf mindestens „RemoteSigned“)
  • Distinguished Name (DN) des Benutzers besorgen:
    • Get-ADUser NAME | select D*
  • Assistenten zur Synchronisation des Kennworthashes des DNs starten:
    • Invoke-ADSyncDiagnostics
  • Dem Assistenten folgen (2 > 3 …)

Schon fertig 🙂

Zusätzliche Neztwerke via Windows VPN erreichen, ohne „Standartgateway für das Remote Netzwerk verwenden“

Problem

Über einen Windows RRAS Server soll, beispielsweise über SSTP, nicht nur der Standort des VPN Routing und Ras Servers erreicht werden, sondern zusätzliche ein oder mehrere Netzwerke über andere Router.

Das ist, nachdem man die betreffenden Routen im VPN-Server eingetragen hat, auch kein Problem. Jedenfalls bis die Funktion „Standartgateway für das Remote Netzwerk verwenden“ auf dem Client deaktiviert wird.

Die Entfernung des Hakens sorgt zwar für einen direkten Internet-Zugang auf dem Client, verhindert aber den Zugang zu den weiteren Unternehmensnetzwerken.

Lösung

Seit Windows 8 kann man via PowerShell zusätzliche Routen außer der Einwahl-Standartroute weitere Routen für jede VPN-Verbindung hinzufügen.

Add-VpnConnectionRoute -ConnectionName "MEINE VPN VERBINDUNG" -DestinationPrefix 10.42.42.0/24

Beim Herstellen einer Verbindung wird die Route mit der selben Metrik wie die VPN „Standardroute“ aktiviert.

Solche neuen Routen lassen sich mit dem Befehl Remove-VpnConnectionRoute auch wieder entfernen. Leider kann man die Routen nicht auflisten, außer durch „route print“ nach dem Herstellen einer Verbindung.
Auflisten lassen sich die Routen mit

(Get-VpnConnection "MEINE VPN VERBINDUNG").Routes

oder auch

Get-VpnConnection "MEINE VPN VERBINDUNG" | Select-Object -ExpandProperty Routes

Aktivierung des ’sa‘ Benutzers auf SQL Server Express Edition

Problem

Auf neuen SQL Express Edition Installationen ist der sa-Benutzer meist noch nicht aktiviert. Per Default ist nur die Windows-Authentifizierung eingeschaltet, was die Nutzugn des SQL-Benutzer ’sa‘ verhindert.

Lösung

Zuerst aktivert man im SQL-Server die ‚gemischte Authentifizierung‘.

So ändert man den Authentifizierungsmodus des SQL Server (SQL-Authentifizierung zulassen)

  1. Ausführen des SQL Management Studio „Als Administrator“
  2. Verbindung mit der Instanz herstellen (Windows-Authentifizierung)
  3. Im Objekt-Explorer ganz oben auf das Wurzelelement (die SQL-Server Instanz) mit der rechten Maustaste die Eigenschaften öffnen
  4. Link unter dem Punkt Sicherheit unter der Serverauthentifizierung den neuen gemischten Serverauthentifizierungsmodus auswählen und mit OK bestätigen
  5. SQL-Dienst neu starten (Im Objekt-Explorer mit der rechten Maustaste auf den Server ganz oben und dann auf Neu starten)

SA-Benutzer einschalten

An der SQL-Konsole, sofern man als Administrator vernbunde ist, reichen diese beiden schnellen Befehle:

ALTER LOGIN sa ENABLE ;  
GO  
ALTER LOGIN sa WITH PASSWORD = '123NEUES_SA_KENNWORT12343' ;  
GO  

IIS reverse Proyxy HTTP-Header setzen zeigt nur „Fehler 500“ Seiten

Problem

Eine Webanwendung beötigt bestimmt Header aus dem IIS (URL-Rewrite) Revese-Proxy. Oft gesehene Kandidaten sind beispielsweise:

  • HTTP_X_FORWARDED_HOST
  • HTTP_X_FORWARDED_PROTO
  • HTTP_X_FORWARDED_FOR

Konfiguriert man das nur innerhalb der URL-Rewrite-Regel, ist die Site sofort mit einem Serverfehler 500 nicht mehr erreichbar. Kann der IIS etwa keine Header hinzufügen oder ersetzen?

Lösung

Die Servervariablen, oder auch HTTP-Header, müssen vorher im IIS, beispielsweise auf Serverebene oder Siteebene, definiert werden. Nicht-Definierte Servervariablen können durch Regeln im nachhinein nicht ge- oder ersetzt werden. Das ist aus Sicherheitsgründen ja auch sinnvoll, nur vielleicht etwas irritierend umgesetzt.

1. Servervariablen definieren

Beispiel: Links die höchste Ebene (<SERNAME>) auswählen und im rechten Fenster doppelt auf „URL Rewrite“ klicken. Das ist natürlich auch auf Site-Ebene möglich, wir definieren dieses Beispiel aber im Server, damit die Variablen für alle Sites des Server gelten können. Danach gibt es rechts in der „Action Pane“ einen Link „Servervariablen anzeigen …“

… und schlussendlich kann man dort über „Hinzufügen“ die Variablen die man nutzen oder ändern möchte hinzufügen. Der Titel der pane „Zulässige Servervariablen“ weist auch deutlich in die richtige Richtung. Was hier nicht definiert ist, ist Serverseitig nicht zulässig. Serverseitig, weil eine Anwendung selbst natürlich Header senden und setzen kann, wie sie das möchte.

2. Servervariablen setzen oder ersetzen

Danach kann man in jeder Rewrite-Regel besagte Variablen (=Header) setzen oder ersetzen, ohne das der Server über einen „Error 500“ stolpert.

Exchange Abwesenheitsbenachrichtigung (Out of office reply) nur an bekannte Absender zuslassen

Problem

Exchange-Absenheitsbenachrichtigungen (Out of Office replys) sind traditionell ein schwerwiegender Punkt interessanter Diskussionen. Technisch simpel umgesetzt, birgt das Konzept viele Gefahren für schweren Mißbrauch (Amplification-Attack, Spam, Datenschutz, Überwachung, Einbruch …).

Ein oft eingesetzer Kompromiss ist der Versand nur an „bekannte“ Absender. Da dem Exchange aber nicht alle Absender „bekannt“ sind (Exchange kann nachvollziehbarerweise nicht in Echtzeit alle Kontakte in allen Mailboxen durchsuchen) muss das pro Mailbox passieren. Outlook sieht diese Möglichkeit sinnvollerweise auch (als Mailboxsetting) vor. Leider bleibt die Auswahl weiterhin dem „fehleranfälligen“ Benutzer überlassen.

Nur in Outlook: „Jeder außerhalb meiner Organisation“ ist weiterhin anwählbar

Lösung

Die die Einstellung Serverseitig, also pro Mailbox, definiert ist, hilft hier eine Gruppenrichtlinie (GPO) nicht weiter. Diese würde vielleicht Outlook betreffen, aber von OWA und allen anderen E-Mail-Clients ignoriert werden.

Da diese Einstellung aber Pro-Exchange-Mailbox gesetzt wird, kann man via Powershell die gesetzte Einstellung relativ einfach „korrigieren“. Wir haben dazu dieses Script erstellt, das nebenbei auch den „Powershell state: busy“ Fehler umgeht, der auftritt wenn man zu viele Requests an die Exchange-API gleichzeitig sendet (foreach statt einfach |set).

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://MEINSERVER.MEINFQDN/PowerShell/ -Authentication Kerberos
Import-PSSession $Session -AllowClobber
Import-Module ActiveDirectory -ErrorAction STOP

Function ChangeMailboxListWithExternalAudience {
    $MailboxListWithExternalAudience = Get-Mailbox | Get-MailboxAutoReplyConfiguration | where { ($_.AutoReplyState -eq "Enabled") -AND ($_.ExternalAudience -eq "All") }

    foreach ($eintrag in $MailboxListWithExternalAudience) { 
        Set-MailboxAutoReplyConfiguration $eintrag.Identity -ExternalAudience "Known"
    }
}

ChangeMailboxListWithExternalAudience

Das Script wird einfach regelmäßig via „Geplante Aufgaben“ ausgeführt und rediziert so die Angriffsfläche auf einen (relativ) kleinen zeitlichen Versatz.

Bein Einsatz des Scripts auf die ExecutionPolicy achten!

Taskmanager zeigt keine CPU-Last Graphen mehr an

Problem

Der Windows Taskmanager zeigt keine CPU-Last Graphen mehr an. Es gibt zwar pro Kern eine Box, aber es wird keine Last (keine „Linie“) mehr angezeigt.

Die Graph-Anzeige bleibt leer (nicht wie hier im Bild)

Lösung

Sowohl der Windows Client (Windows 10) als auch Windows Server (2016/2019) scheinen Schwierigkeiten mit der Ermittlung der CPU-Last für den Taskmanager zu haben, wenn eine externe Lastverwaltung die Leistungsaufnahme der CPU regelt. Mit „extern“ sind hier Hardwareseitige Systeme wie das BIOS (EFI-Controller) gemeint.

In HP-Servern ist das schnell gefixt: Im BIOS einfach dem Betriebssystem die Kontrolle über die CPU-Performance/CPU-Last zurückgeben.

HPE ProLiant Server öffnen mit F9 ihr Bios, dort unter „Power Profiles“ den „HP Power Regulator“ abschalten und auf „OS Control Mode“ zurückstellen.

Negative Folgen wie eine Performanceänderung, andere Leistungsaufnahme oder instabile Systeme konnten wir nicht beobachten. Aber der Taskmanager funktioniert sofort wieder und liefert dem grapen schicke neue Werte.

WSUS Clients Fehler 0x80244010 (WU_E_PT_EXCEEDED_MAX_SERVER_TRIPS)

Problem

Fehler 0x80244010

Windows 7 Clients bekommen „auf einmal“ keine Updates mehr von einem WSUS-Server. Andere Windows-Clients und Server hingegen scheinen Fehlerfrei zu funktionieren.

Der Angegebene Fehlercode lautet 0x80244010

Im WindowsUpdate-log findet man den Eintrag:

WARNING: Exceeded max server round trips: 0x80244010 

Lösung

Dieser Fehler hat zwei mögliche Ursachen, die erste Clientseitig und die andere (WSUS-) Serverseitig.

Serverseitig ist der WSUS auf 200 „Trips“ beschränkt, also 200 Anfragen eines Clients für alle Updates pro Ziel. Das kann ab einem bestimmten Patchlevel etwas knapp werden. Hier hilft eigentlich nur „nochmal klicken“. Nach 5-7 Versuchen klappt das dann plötzlich.

Serverseitig hilft es auch oft, das Größenlimit der zurückgelieferten Updateliste (XML) zu enfernen. Standartmäßig sind das 5Mbyte, was bei Windws 7 schon mal etwas knapp werden kann. Den Konfigurationseintrag im WSUS bearbeitet man in der SQL-Konsole (SQL Management Stusio) wie folgt:

USE SUSDB
GO
UPDATE tbConfigurationC SET MaxXMLPerRequest = 0

Clientseitig hilft dann meist der Klassiker: Das Windows-Update einmal komplett und gründlich zurücksetzen. Hier die Befehle für die (CMD) Shell.

net stop Bits
net stop WuAuServ 
net stop CryptSvc
rd /s /q %windir%\SoftwareDistribution 
reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v SusClientId /f
reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v SusClientIdValidation /f
net start Bits
net start WuAuServ 
net start CryptSvc 
wuauclt /resetauthorization /detectnow 
Und schon funktioniert Windows Update wieder