Schritt für Schritt: Windows Server 2019 (IIS 10) als Reverse Proxy mit SSL-Offloading installieren

Windows Server mit dem IIS ist ein ausgezeichneter reverse Proxy und eigentlich auch schnell eingerichtet.

Diese Anleitung geht davon aus das …

  • Es einen installierten Windows Server 2019 gibt
  • Ein passendes SSL-Zertifikat mit korrektem CN existiert
    • Wenn der Webserver im Internet erreichbar ist, tut es natürlich auch Let’s Encrypt
  • Ein Webserver der über diesen reverse Proxy erreichbar sein soll existiert und auch wirklich von diesem Server erreichbar ist

IIS mit passenden Features installieren

Server Manager > Rollen und Features hinzufügen > „Rollenbasierte oder featurebasierte Installation“ > Server auswählen > „Webserver (IIS)“ und die gewünschten Funktionen hinzufügen. Obligatorisch ist die „IIS-Verwaltungskonsole“

Oder (als Minimalinstallation) an der PowerShell:

Install-WindowsFeature -name Web-Server –IncludeManagementTools

IIS ARR 3.0 (Application Request Routing) installieren

ARR 3.0 (mit URLRewrite) herunterladen und installieren: https://www.iis.net/downloads/microsoft/application-request-routing

Zertifikat im Windows Zertifikatsspeicher installieren

Doppeklick auf das *.pfx > Lokaler Computer > Weiter > Speicher automatisch auswählen / Kennwort eingeben > Weiter > Fertigstellen

IIS Proxy Dienste einschalten

„Internetinformationsdienste (IIS)-Manager“ (IIS-Konsole) öffnen > Links erster Punkt „Servername“ > Rechte Hälfte „Applicatin Request Routing Cache“ öffnen

In der Taskpane unter „Proxy“ > „Server Proxy Settings“ > Enable Proxy. Ganz unten sollte „Enable SSL Offloading“ eingeschaltet sein.

Tipp: Der X-Forwarded-For Header ist für viele Anwendungen (vor allem Java-Apps) wichtig. Der IIS verbietet im ARR standardmäßig aber alle Header, für die es keine Serverweite Erlaubnis gibt. Wie man eigene Header, zum Beispiel X-Forward-For, im IIS zulässt steht in diesem Artikel: https://www.ugg.li/iis-reverse-proyxy-http-header-setzen-zeigt-nur-fehler-500-seiten/ Wir raten dazu, den Header für Reverse Proxies zu erlauben.

IIS Site anlegen

Es ist zwar zwingend nötig eine neue Site anzulegen, wir raten aber als „best Practice“ dazu, für jede Bindung eine eigene Site mit eigener Konfiguration anzulegen. Die Default Site (ID #1) wird nämlich gerne von Drittsoftware verwendet oder verändert.

„Internetinformationsdienste (IIS)-Manager“ (IIS-Konsole) öffnen > Servername > Sites > Website hinzufügen

  • Sitename: <www.example.com> (Anzeigename)
  • Physischer Pfad: <c:\inetpub\www.example.com> (Pfad zur Konfiguration, exklusiv für jede Site anlegen)
  • Typ: https
  • IP-Adresse: „Keine zugewiesen“
  • Hostname: <www.example.com> (URL, muss zum CN im Zertifikat passen)

IIS Site zum Reverse Proxy umstellen

„Internetinformationsdienste (IIS)-Manager“ (IIS-Konsole) öffnen > Servername > Sites > <www.example.com> > „URL Rewrite“ > Regeln hinzufügen > „Reverseproxy“ > Ziel eingeben (hier im Beispiel ein Webserver auf dem localhost auf Port 8080

Optional: HTTPS Redirect Regel erstellen

Um HTTP-Anfragen nun automatisch auf HTTPS weiterzuleiten (via HTTP 30x), kann man nun eine weitere Regel zur Site hinzufügen.

„Internetinformationsdienste (IIS)-Manager“ (IIS-Konsole) öffnen > Servername > Sites > <www.example.com> > „URL Rewrite“ > Regeln hinzufügen > Leere Regel

  • Name: HTTPS-Redirect
  • Übereinstimmung mit URL
    • Angeforderte URL: „Entspricht dem Muster“
    • Unter verwendung von: „Reguläre Ausdrücke“
    • Muster: (.*)
    • Groß-/Kleinschreibung ignorieren
  • Bedingungen > Hinzufügen
    • Bedingungseingabe: {HTTPS}
    • Überprüfen, ob die Eingabezeichenfolge: „Entspricht dem Muster“
    • Muster: ^OFF$
    • Groß-/Kleinschreibung ignorieren
  • Aktionen
    • Aktionstyp: Umleiten
    • Aktionseigenschaften > „URL Umleiten“: https://{HTTP_HOST}/{REQUEST_URI}
    • Abfragezeichenfolge anhängen
    • Umleitungstyp: Dauerhaft
    • … ✔ Übernehmen

Windows Server 2016/2019 Eval auf Vollversion Upgrade mit GLVK Keys

Da ist JEDESMAL anfange zu googeln wenn ich einen neuen Windows Server in den Produktivbetrieb nehmen muss, hier die aktuelle Liste der Upgrade-Keys. Ja, das ist legal, nur blöderweise etwas umständlich.

Dazu trägt man einfach einen GVLK (Generic Volume License Key) Key in die Ziel-Edition vonm DISM ein, lässt das Eval-Paket damit automatisch entfernen und hat schon einen „vollen“ Windows Server.

Dieser braucht natürlich immernoch einen korrekten Lizenzkey und eine Aktivierung, aber die Umstellung ist nur via GLKV möglich, sonst bekommt man den Fehler 0x8a010001 („Der angegebene Product Key konnte nicht überprüft werden.“).

Windows Server 2016 Standard

dism /online /set-edition:ServerStandard /productkey:WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY /accepteula

Windows Server 2016 Datacenter

DISM /online /Set-Edition:ServerDatacenter /ProductKey:CB7KF-BWN84-R7R2Y-793K2-8XDDG /AcceptEula

Windows Server 2019 Standard

dism /online /set-edition:ServerStandard /productkey:N69G4-B89J2-4G8F4-WWYCC-J464C /accepteula

Windows Server 2019 Datacenter

dism /online /set-edition:ServerDatacenter /productkey:WMDGN-G9PQG-XVVXX-R3X43-63DFG /accepteula

Veeam Backup 365 Failed, wegen gelöschtem Benutzer „Failed to process site: https://TENANT-my.sharepoint.com/personal/USER“

Löscht man in Microsoft 365 einen Benutzer mit persönlicher Sharepoint-Site, erhält man in Veeam Backup for Office 365 beim sichern diese Fehlermeldung:

Failed to process site: https://<TENANT>-my.sharepoint.com/personal/<USER>. Cannot contact site at the specified URL https://<TENANT>-my.sharepoint.com/personal/<USER>. Access to this Web site has been blocked. Please contact the administrator to resolve this problem.

Der „System Administrator“ kann den gelöschten Nutzer aber nicht mehr sehen, auch in der Veeam-Objektliste nicht.

Das liegt daran, das Microsoft die Site und deren Daten noch 90 Tage lang aufbewahrt, die Site aber den Status „locked“ bekommt. Die Fehlermeldung ist also technisch korrekt, aber wenig hilfreich.

Löschen der Sharepoint-Site

Man kann die Site, sofern nicht mehr benötigt (ist ja gesichert …), einfach „richtig“ löschen, dann verschwindet auch der Fehler sofort.

  1. PowerShell „Als Administrator“ öffnen und das SharePoint Online (SPO) Module installieren: Install-Module -Name Microsoft.Online.SharePoint.PowerShell
  2. Im Tenant als Global Admin bei SPO-Admin anmelden: Connect-SPOService -Url "https://TENANT-admin.sharepoint.com"
  3. Prüfen ob der SPO Nutzer noch vorhanden ist: Get-SPOUser -site "https://TENANT-my.sharepoint.com"
  4. Wenn der Benutzer noch da ist, diesen löschen Remove-SPOUser -Site "https://TENANT-my.sharepoint.com" -LoginName <UPN>
  5. Jetzt kann man nachsehen, ob die persönliche SharePoint Site von diesem Nutzer noch da ist (was vermutlich der Fall ist). Die genaue URL zur Benutzer-Site kann man aus der Veeam-Fehlermeldung kopieren Get-SPOSite "https://TENANT-my.sharepoint.com/personal/USER" | select *
  6. Wenn der Befehl einen Eintrag zurückgibt, auf den „LockState“ schauen. Dieser sollte „Unlock“ sein. Wenn das nicht der Fall ist, Lockstate zurücksetzen: Set-SPOSite "https://<TENANT>-my.sharepoint.com/personal/<USER>" -LockState Unlock
  7. Dann kann man die verweiste Site einfach entfernen: Remove-SPOSite "https://TENANT-my.sharepoint.com/personal/USER"

Wir würden uns wünschen, das Veeam hier eingreift. v5.0.1.252 fixt den Fehler leider nicht nicht, Backup-Jobs aus vorhergehenden Versionen stoppen bei diesem Fehler einfach. Wenn der Standard „Ignore this Object“ wäre, wäre das alles halb so schlimm …

Microsoft 365 „MyAnalytics‎“ Abschalten (Tenantweit für alle Benutzer)

Das „MyAnalytics‎“ Tool ist ja nett gemeint, aber aufgrund seiner „Opt Out“ Konfiguration in den meisten Fällen sehr nervig und was den Datenschutz betrifft ser „anfällig“. Wir können auch nicht nachvollziehen, wiso Microsoft so ein Tool für alle Nutzer Standartmäßig einschaltet.

Abschalten von MyAnalytics für den ganzen Tenant

  1. Als Globaler Admin einloggen. Mit der „Delegierten Administration“ ist die Konfiguration nicht möglich.
  2. Links unter (Alle anzeigen) Einstellungen > Einstellungen der Organisation > MyAnalytics‎ öffnen
  3. Die drei Haken entfernen, Speicher, fertig.

AADConnect Objekte ausschliessen (z.B. Einen Benutzer nicht synchronisieren)

Manchmal muss der Admin genau ein einziges Objekt, oder nur wenige ganz bestimmte Objekte von der Synchronisation vom lokalen AD in das Microsoft 365 Azure AD ausschließen.

Das geht überraschend einfach, mann kann exclude-Regeln einfach im „Synchronization Rule Editor“ hinzufügen.

Schritt für Schritt Anleitung um ein Objekt nicht mehr zu synchroniseren

  1. Zeitplan für die Synchronisation abschalten, damit keine automatischen Aufgaben die Änderungen durcheinander bringen:
Set-ADSyncScheduler -SyncCycleEnabled $False

Der Status des ADSyncSchedulers lässt sich jeder überprüfen mittels:

Get-ADSyncScheduler | Format-List SyncCycleEnabled

2. „Synchronization Rules Editor“ starten (als Administrator)

3. In der „View and manage …“ Liste die „Direction“ auf „Inbound“ stellen und eine freie Nummer unterhalb der bestehenden „Precedence“ Regeln finden (und merken). In der Regel ist das irgendetwas <100.

4. Oben rechts „Add New rule“

5. Den „Create inbound synchronization rule“ Assistenten nun ausfüllen:

  • Name: Ein beschreibender Name, z.B. „In from AD – Bernd auslassen“
  • Connected System: Der lokale AD Forest
  • Connected System Object Type: user
  • Metaverse Object Type: Person
  • Link Type: join
  • Precedence: Die gemerkte Nummer von oben (z.B. „90“)
  • „Tag“, „Enable Password Sync“ oder „Disabled“ nicht verändern
  • Next > …

6. „Add group“ > dann > „Add clause“

7. Als „Attribut“ ein zu filterned Attribut wählen, zum Beispiel den „name“ oder ein anderes Attribut. Bei größeren Mengen an Objekten nutzen wir hier gerne die „Extended Attributes“, die normalerweise solange ungenutzt und leer sind. Der Operator ist im Beispiel „equal“, der „Value“ der zu matchende Inhalt.

8. „Next >“, an den nun angezeigten „Add join Rules“ nichts ändern > „Next >“

9. Bei den „Add join rules“ eine Transformation hinzufügen:

  • „Add transformation“ >
  • FlowType: Constant
  • Target Attribute: cloudFiltered
  • Source: True
  • Apply Once: leer lassen
  • Merge Type: Update
  • Unten auf „Add“

10. „Synchronization Rules Editor“ schliessen, „Synchronization Service“ öffnen

11. „Connectors“ > Actions > Run > Full Synchronization > OK

12. „Operations“ Den Zyklus abwarten, Full dauert immer einen Moment …

13. Den Synchronization Schedule wieder einschalten:

Set-ADSyncScheduler -SyncCycleEnabled $True

14. Und einmal die Initial-Synchronisation laufen lassen:

Start-ADSyncSyncCycle -PolicyType Initial