Dieses Repository enthaelt PowerShell-Skripte zur Automatisierung der Bereitstellung und Haertung von Windows Server 2025, insbesondere fuer die Erstellung eines Domain Controllers.
1. VM_Basic.ps1
Zweck: Grundlegende Optimierung und Haertung eines nackten Windows Servers.
-
Schritt 1: Initialisierung
- Lokalen Administrator umbenennen und Zufaelliges Admin-Passwort setzen (Sicherheitsmassnahme: verhindert Anmeldung waehrend des gesamten Setups)
- Statische IP-Konfiguration (wird in Azure uebersprungen)
- RDP-Zugriff ermoeglichen
- Erstellt eine geplante Aufgabe fuer den automatischen Neustart
-
Schritt 2: Server optimieren
- Powerplan auf "Hoechstleistung" setzen
- Zeitsynchronisation (NTP) konfigurieren
- Deutsche Lokalisierung (Sprache, Region, Tastatur)
- Deaktivierung von unnoetigen Diensten (Sicherheit & Performance):
Spooler(Druckwarteschlange β PrintNightmare-Sicherheitsrisiko)DiagTrack(Telemetrie β Datenschutzrisiko)dmwappushservice(WAP-Push-Nachrichten β Teil der Telemetrie)RemoteRegistry(Remoteregistrierung β Privilege Escalation Risiko)WSearch(Windows Search β I/O-Last und Angriffsflaeche)SysMain(SuperFetch β Speicherverschwendung auf Servern)lfsvc(Standortdienst β Sicherheitsrisiko im Rechenzentrum)lmhosts(NetBIOS-Hilfsdienst β Anfaellig fuer Spoofing/Angriffe)XboxGipSvc(Xbox-Dienste β Unnoetig auf Servern)XblAuthManager(Xbox-Authentifizierung β Unnoetig auf Servern)
- SMB1 deaktivieren (Sicherheitsrisiko)
- Temp-Bereinigung
-
Schritt 3: Aufraeumen
- Admin-Passwort auf gewuenschten Wert setzen (letzter Schritt)
- Plante Aufgabe entfernen
- Fortschrittsdatei loeschen
Zweck: Hochstufen des Servers zum Domain Controller und Befuellen der Domaene mit Tiering-Struktur und GPOs.
Das Administrator-Konto (SID-500) wird zu Beginn mit einem zufaelligen Kennwort gesichert, damit waehrend des gesamten Setups keine Anmeldung am DC moeglich ist. Erst im letzten Schritt (Step-Cleanup) wird das gewuenschte Kennwort gesetzt (Parameter -AdminPassword).
Tritt waehrend des Setups ein Fehler / eine Exception auf, wird das gewuenschte Kennwort automatisch sofort gesetzt, damit der Server nicht mit dem zufaelligen Kennwort gesperrt bleibt.
-
Schritt 1: Domain Controller hochstufen
- Sicherheitsmassnahme: Zufaelliges Admin-Kennwort setzen (Login gesperrt)
- Pruefung auf ausstehende Neustarts (maximal 1 Neustart vor der Rolleninstallation):
- Pruefe zu Beginn ob Neustarts ausstehen
- Falls JA: Sofortiger Neustart β
Step-PromoteCheck - Pruefe nach Neustart erneut
- Falls JA: Bereinigung der Flags (
Clear-PendingReboot) - Fahre mit der AD-Rolleninstallation fort (keine Endlosschleife)
RemoteRegistrytemporaer aktivieren (erforderlich fuer AD-Promotion)- AD DS und DNS Rollen installieren
- Neue Gesamtstruktur erstellen (
Install-ADDSForest) - Nach der Promotion: Domain-Admin mit zufaelligem Kennwort sichern
RemoteRegistrynach der Promotion wieder deaktivieren
-
Schritt 1b: Neustart-Pruefung (
Step-PromoteCheck)- Zufaelliges Admin-Kennwort setzen (falls nach Neustart noetig)
- Prueft nach dem Neustart erneut auf ausstehende Neustarts
- Falls ja: Bereinigung der Flags (
Clear-PendingReboot) - Fuehrt direkt die Rolleninstallation aus (kein erneuter Aufruf von
Step-Promote)
-
Schritt 2: Domain Controller haerten
- OSConfig DC-Security-Baseline anwenden (Windows Server 2025)
- Windows Defender Ausschluesse fuer AD-Verzeichnisse (NTDS, SYSVOL, ntds.dit) β erst hier, da DC-spezifisch
-
Schritt 3: Domaene mit Tiering-Struktur befuellen
- Tiering-Struktur OUs (alle OUs direkt am Domain-Root):
Domain Root (DC=dev,DC=lab) βββ Tier0 β βββ T0-Admins (Benutzer) β βββ T0-Servers (DCs, PKI) β βββ T0-Service Accounts β βββ T0-Gruppen βββ Tier1 β βββ T1-Admins (Server-Admins, Helpdesk Level 2) β βββ T1-Servers (SQL, Exchange, etc.) β βββ T1-Service Accounts β βββ T1-Gruppen βββ Tier2 βββ T2-Users (Normale Mitarbeiter) βββ T2-Admins (Helpdesk Level 1) βββ T2-Clients (Windows Laptops/PCs) βββ T2-Service Accounts βββ T2-Gruppen - Sicherheitsgruppen erstellen:
- T0-Admins (Tier 0 Administratoren)
- T1-Admins (Tier 1 Administratoren)
- T2-Admins (Tier 2 Administratoren)
- T2-Users (Tier 2 Benutzer)
- Administrator (SID-500) in T0-Admins aufnehmen (verhindert, dass ihn die Logon-Restriktionen aussperren)
- GPOs mit Zugriffsbeschraenkungen:
- Tier0-Admin-Zugriff:
- T0-Admins duerfen sich nur an T0-Servern (inkl. Domain Controllers) anmelden
- T0-Admins sind lokale Admins auf T0-Servern
- GPO ist an
OU=T0-Serversund an dieDomain ControllersOU verknuepft - Alle Admins duerfen kein RDP nutzen
- Tier1-Admin-Zugriff:
- T1-Admins duerfen sich nur an T1-Servern anmelden
- T1-Admins sind lokale Admins auf T1-Servern
- Alle Admins duerfen kein RDP nutzen
- Tier2-Zugriff-Kontrolle:
- T2-Admins/T2-Users duerfen sich nur an T2-Clients anmelden
- T2-Admins sind lokale Admins auf T2-Clients
- T2-Users haben Standard-Benutzerrechte
- Alle Admins duerfen kein RDP nutzen
- Tier0-Admin-Zugriff:
- Tiering-Struktur OUs (alle OUs direkt am Domain-Root):
-
Schritt 4: Aufraeumen
- Admin-Kennwort auf gewuenschten Wert setzen (
-AdminPassword, Login wieder moeglich) - Plante Aufgabe entfernen
- Gruppenrichtlinien aktualisieren
- Admin-Kennwort auf gewuenschten Wert setzen (
Zweck: Befuellt die Domaene mit Musterbenutzern, Gruppen und Computerkonten.
- Sicherheitsgruppen erstellen (in T2-Gruppen):
- GG_IT_Admin, GG_Helpdesk, GG_Mitarbeiter, GG_Finanzen, GG_Entwicklung, GG_ServerAdmin
- Musterbenutzer anlegen (in T2-Users):
- 25 Demo-Benutzer (Demo.User01 bis Demo.User25)
- Zuordnung zu Abteilungen (IT, Helpdesk, Finanzen, Entwicklung, Vertrieb, HR)
- Service-Accounts erstellen (in T2-Service Accounts):
- svc_backup, svc_monitoring, svc_join, svc_print
- Computerkonten anlegen:
- 10 Client-Computer (CL-WS001 bis CL-WS010) in T2-Clients OU
- 5 Server-Computer (SRV-APP01 bis SRV-APP05) in T1-Servers OU
powershell.exe -ExecutionPolicy Bypass -File .\VM_Basic.ps1 -StaticIP "192.168.10.10" -DefaultGateway "192.168.10.1" -DnsServer "127.0.0.1" -LocalAdminName "LokalAdmin" -LocalAdminPwd "P@ssw0rd!2025"- Achtung:
RemoteRegistrywird deaktiviert. Fuer die AD-Promotion wird dieser Dienst imCreate_AD.ps1temporaer wieder aktiviert.
powershell.exe -ExecutionPolicy Bypass -File .\Create_AD.ps1 -DomainName "corp.example.com" -NetBiosName "CORP" -DsrmPassword "P@ssw0rd!2025" -AdminPassword "P@ssw0rd!2025"powershell.exe -ExecutionPolicy Bypass -File .\Create_DemoData.ps1 -DomainName "corp.example.com" -NetBiosName "CORP" -DemoUserCount 25- Windows Server 2025 (Desktop Experience oder Server Core)
- Ausfuehrung als SYSTEM (z. B. ueber geplante Aufgabe mit
RunLevel Highest) - PowerShell 5.1 oder hoeher
- Fuer
Create_AD.ps1:- Vorheriger Durchlauf von
VM_Basic.ps1 - Modul
Microsoft.OSConfigmuss installiert sein (fuer DC-Haertung)
- Vorheriger Durchlauf von
- Wird in
VM_Basic.ps1deaktiviert (Sicherheitsmassnahme). - Wird in
Create_AD.ps1temporaer aktiviert (erforderlich fuer AD-Promotion). - Wird nach der Promotion wieder deaktiviert.
- Maximal 1 Neustart vor der Rolleninstallation.
- Ablauf:
- Pruefe zu Beginn ob Neustarts ausstehen β Falls JA: Neustart
- Pruefe nach Neustart erneut β Falls JA: Clearing der Flags
- Fahre mit der AD-Rolleninstallation fort (keine Endlosschleife).
Die Domaene wird mit einer 3-stufigen Sicherheitsarchitektur (Tiering-Modell) eingerichtet:
| Tier | Beschreibung | Zugangsbeschraenkung | Berechtigung |
|---|---|---|---|
| Tier 0 | Hochsensible Systeme (DCs, PKI) | Nur T0-Admins | Admin-Rechte |
| Tier 1 | Server-Systeme (SQL, Exchange) | Nur T1-Admins | Admin-Rechte |
| Tier 2 | Client-Systeme (Arbeitsstationen) | T2-Admins & T2-Users | Admins: Admin, Users: Standard |
- Alle Administratoren (T0, T1, T2) duerfen kein RDP nutzen
- Dies gilt fuer lokale Anmeldung und Remote-Desktop
- Erzwungen durch GPOs mit
DenyLogOnThroughRemoteDesktopServices
Die folgende Liste von Diensten wird in VM_Basic.ps1 deaktiviert, um Sicherheit und Performance zu verbessern:
| Dienstname | Anzeigename | Empfehlung | Grund |
|---|---|---|---|
| Spooler | Druckwarteschlange | Deaktivieren | Historisch anfaellig fuer kritische Sicherheitsluecken (PrintNightmare) |
| DiagTrack | Benutzererfahrungen und Telemetrie | Deaktivieren | Sendet Telemetrie- und Diagnosedaten an Microsoft |
| dmwappushservice | WAP-Push-Nachrichtendienst | Deaktivieren | Gehoert zur Telemetrie-Infrastruktur; auf Servern nutzlos |
| RemoteRegistry | Remoteregistrierung | Deaktivieren* | Erlaubt Remotebenutzern das Aendern der Registrierung (Privilege Escalation Risiko) |
| WSearch | Windows Search | Deaktivieren | Indizierungsdienst; I/O-Last und Angriffsflaeche |
| SysMain | SysMain (SuperFetch) | Deaktivieren | Optimiert Caching fuer Desktops; auf Servern Speicherverschwendung |
| lfsvc | Standortdienst | Deaktivieren | Ermittelt geografischen Standort; Sicherheitsrisiko im Rechenzentrum |
| lmhosts | TCP/IP-NetBIOS-Hilfsdienst | Deaktivieren | Unterstuetzt NetBIOS ueber TCP/IP; anfaellig fuer Spoofing/Angriffe |
| XboxGipSvc | Xbox-Dienste | Deaktivieren | Gaming-Komponenten; auf Servern unnoetig |
| XblAuthManager | Xbox-Authentifizierung | Deaktivieren | Gaming-Komponenten; auf Servern unnoetig |
*RemoteRegistry muss fuer die AD-Promotion temporaer aktiviert werden (wird in Create_AD.ps1 automatisch gehandhabt).
Problem: "The request to add or remove features on the specified server failed. The operation cannot be completed, because the server that you specified requires a restart"
- Loesung: Das Skript erkennt ausstehende Neustarts automatisch und fuehrt diese durch. Falls das Problem weiterhin besteht:
- Manuell pruefen, ob ein Neustart aussteht (z. B. ueber
Get-WindowsFeatureoder Registry-Eintraege). - Server manuell neu starten und
Create_AD.ps1erneut ausfuehren.
- Manuell pruefen, ob ein Neustart aussteht (z. B. ueber
- Ursache: Die OUs oder Gruppen existieren noch nicht.
- Loesung:
Create_AD.ps1muss zuerst ausgefuehrt werden, da es die benoetigte OU-Struktur erstellt.
-
VM_Basic.ps1 & Create_AD.ps1:
- Fehler-Handling: Bei einem Fehler / einer Exception waehrend des Setups wird das gewuenschte Admin-Kennwort automatisch sofort gesetzt, damit der Server nicht mit dem zufaelligen Kennwort gesperrt bleibt
- Abruchskriterien verschaerft: Kritische Fehler brechen das Setup jetzt ab, statt sie nur zu protokollieren: Zufaelliges Admin-Kennwort konnte nicht gesetzt werden (beide Skripte), OU- und Gruppen-Anlage schlaegt fehl (alle OUs/Gruppen), Administrator wird nicht in 'T0-Admins' aufgenommen, lokaler Administrator kann nicht umbenannt/gesichert werden. So wird ein unvollstaendiger, defekter Zustand verhindert, der erst am auffaellt, wenn man ausgesperrt ist.
-
Create_AD.ps1:
- Neue Sicherheitsmassnahme: Admin-Konto (SID-500) wird waehrend des Setups mit zufaelligem Kennwort gesperrt, erst am Ende wird das gewuenschte Kennwort gesetzt (
-AdminPasswordParameter) - OU-Struktur angepasst: Jeder Tier erhaelt eigene 'Service Accounts'- und 'Gruppen'-OUs (T0/T1/T2); globale OUs (Gruppen, ServiceAccounts, Benutzer) entfernt; Tiering-Gruppen liegen in den jeweiligen T*-Gruppen-OUs
- Splatting-Refactoring:
Install-ADDSForestnutzt jetzt Parameter-Hashtables statt Backtick-Notation (robuster, lesbarer) - Korrigierte Neustart-Logik: Maximal 1 Neustart vor der Rolleninstallation
Step-PromoteCheckfuehrt direkt die Rolleninstallation aus (keine Endlosschleife mehr)- Robustere Pruefung auf ausstehende Neustarts (CBS, Windows Update, DISM, etc.)
- Neue Tiering-Struktur: 3-stufiges Sicherheitsmodell (Tier0, Tier1, Tier2)
- GPOs mit Zugriffsbeschraenkungen:
- User Rights Assignment fuer lokale Anmeldung
- DenyLogOnThroughRemoteDesktopServices fuer alle Admins
- RestrictedGroups fuer lokale Administratoren
- Neue Sicherheitsmassnahme: Admin-Konto (SID-500) wird waehrend des Setups mit zufaelligem Kennwort gesperrt, erst am Ende wird das gewuenschte Kennwort gesetzt (
-
VM_Basic.ps1:
- Aktualisierte Liste der zu deaktivierenden Dienste (gemaess Sicherheitsanforderungen)
- Hinweis zu
RemoteRegistry(wird fuer AD-Promotion temporaer aktiviert)
-
Create_DemoData.ps1:
- Neue Datei: Demo-Daten in separate Datei ausgegliedert
- Computerkonten werden in den korrekten Tiering-OUs angelegt
- Erstellt benoetigte OUs falls nicht vorhanden
Dieses Projekt steht unter der MIT-Lizenz. Siehe LICENSE fuer weitere Informationen.