Recommended Security GPOs for Active Directory –
Harden Active Directory by importing the Microsoft Security Baseline GPOs from the Security Compliance Toolkit (SCT), linking each to the correct domain or OU, and adding a few custom GPOs the baseline does not cover (LAPS, admin tiering, NTLM/SMB/LDAP hardening).
Applies to: Windows Server 2016, 2019, 2022 and 2025 domain controllers and member servers; Windows 10 and 11 domain-joined clients.
Audience: AD and Group Policy administrators with Domain Admin (or delegated GPO create/link) rights.
Out of scope: Entra ID / Intune baselines, Defender for Identity deployment, and forest recovery.
Prerequisites
- Group Policy Management Console (GPMC) and the GroupPolicy PowerShell module (RSAT) on an admin workstation or DC.
- Domain Admin rights, or delegated rights to create GPOs and link them to the target OUs.
- A full GPO backup taken before changes:
Backup-GPO -All -Path C:\GPOBackup\Pre-Baseline. - An OU structure that separates Domain Controllers, member servers and workstations (baselines are linked by role).
- A test OU for each role with a few representative machines.
- A change window and a rollback plan (unlink the GPO, then
gpupdate /force).
Recommended GPOs and where to link them
Create one GPO per baseline file and link it by role. Keep the Microsoft GPOs unedited and put your exceptions in a separate override GPO with higher precedence. Version numbers in the names (for example v2602, 25H2) change with each release.
| GPO name | Source | Link to | Purpose |
|---|---|---|---|
| MSFT Windows Server <ver> – Domain Security | SCT baseline | Domain root | Password and account lockout policy |
| MSFT Windows Server <ver> – Domain Controller | SCT baseline | Domain Controllers OU | DC user rights, LDAP signing and channel binding, DC audit policy |
| MSFT Windows Server <ver> – Domain Controller Virtualization Based Security | SCT baseline | Domain Controllers OU | VBS and HVCI on DCs (no Credential Guard) |
| MSFT Windows Server <ver> – Member Server | SCT baseline | Servers OU(s) | Member server hardening, audit, SMB and NTLM settings |
| MSFT Windows Server <ver> – Member Server Credential Guard | SCT baseline | Servers OU(s) | Credential Guard on member servers (test first) |
| MSFT Windows 11 <ver> – Computer | SCT baseline | Workstations OU | Client OS hardening |
| MSFT Windows 11 <ver> – User | SCT baseline | Users OU(s) | User-side hardening |
| MSFT Windows 11 <ver> – Credential Guard | SCT baseline | Workstations OU | Credential Guard on clients |
| MSFT Windows 11 <ver> – BitLocker | SCT baseline | Workstations OU | Drive encryption settings |
| MSFT Windows <ver> – Defender Antivirus | SCT baseline | Servers and Workstations OUs | Cloud protection, PUA blocking, ASR rules |
| SEC – LAPS | Custom | Servers and Workstations OUs | Windows LAPS local admin password rotation |
| SEC – Tier 0 Logon Restrictions | Custom | Servers and Workstations OUs | Block Domain/Enterprise Admins from logging on to lower tiers |
| SEC – Baseline Overrides | Custom | Each OU, highest link order | Your documented exceptions to the baseline |
If you have one OU for all servers and clients, filter the role GPOs with WMI filters on ProductType (1 = client, 2 = DC, 3 = member server).
Step 1: Download the baseline and update the Central Store
- Go to the Microsoft Security Compliance Toolkit download page (aka.ms/SCT).
- Download the baseline zip for each OS you run (for example Windows Server 2025 Security Baseline and Windows 11 version 25H2 Security Baseline), plus PolicyAnalyzer.zip and LGPO.zip.
- Unblock and extract each zip to a working folder, for example
C:\SecurityBaselines\WS2025. - Review the folder contents:
GPOs– GPO backups you will import.GP Reports– HTML report of every GPO’s settings.Documentation– Excel spreadsheet of all settings and the release announcement.Templates– ADMX/ADML files the baseline needs (for example SecGuide.admx and MSS-legacy.admx).Scripts– local-install scripts for testing on standalone machines.
- Copy the files from
Templatesto the Central Store so GPMC can display the custom settings:
$store = "\\$env:USERDNSDOMAIN\SYSVOL\$env:USERDNSDOMAIN\Policies\PolicyDefinitions"
Copy-Item C:\SecurityBaselines\WS2025\Templates\*.admx $store
Copy-Item C:\SecurityBaselines\WS2025\Templates\en-US\*.adml "$store\en-US"If the PolicyDefinitions folder does not exist yet, create it first by copying C:\Windows\PolicyDefinitions from an up-to-date machine.
Step 2: Create the GPOs and import the baseline settings
Import creates the GPOs unlinked, so nothing changes on any machine until Step 5.
Option A: GPMC (one GPO at a time)
- Open Group Policy Management (
gpmc.msc). - Expand Forest > Domains > yourdomain > Group Policy Objects.
- Right-click Group Policy Objects > New. Name it exactly as the baseline GPO (for example
MSFT Windows Server 2025 v2602 - Domain Controller). - Right-click the new GPO > Import Settings > Next.
- Skip the backup of the empty GPO, then Browse to the baseline’s
GPOsfolder. - Select the matching backup from the list (tick Show only the latest version) > Next.
- On Migrating References, choose Copying them identically from the source > Next > Finish.
- Repeat for each GPO in the table above.
Option B: PowerShell (all GPOs at once)
The baseline’s Scripts folder includes Baseline-ADImport.ps1, which creates and imports every GPO in the zip. Run it from an elevated PowerShell on a machine with GPMC:
cd C:\SecurityBaselines\WS2025\Scripts
.\Baseline-ADImport.ps1To import a single GPO yourself:
Import-Module GroupPolicy
$path = 'C:\SecurityBaselines\WS2025\GPOs'
$name = 'MSFT Windows Server 2025 v2602 - Domain Controller'
Import-GPO -Path $path -BackupGpoName $name -TargetName $name -CreateIfNeededCreate the custom GPOs
Create the custom GPOs empty now; Step 4 lists what goes in them.
'SEC - LAPS','SEC - Tier 0 Logon Restrictions','SEC - Baseline Overrides' |
ForEach-Object { New-GPO -Name $_ -Comment 'Security hardening - see KB' }Step 3: Review the key settings before linking
The settings below are the ones most likely to affect applications or users. Confirm exact values in the Documentation spreadsheet of your release, since they change between versions.
| GPO | Key settings | What can break |
|---|---|---|
| Domain Security | Minimum password length 14; password history 24; complexity on; reversible encryption off; account lockout threshold 10 with 10-minute duration and reset | Users with short passwords are forced to change at next expiry; service accounts that lock out |
| Domain Controller | LDAP server signing required; LDAP channel binding always; SMB signing required; NTLMv2 only (refuse LM and NTLM); Print Spooler not accepting client connections; advanced audit (DS Access, logon, account management) | Apps using simple LDAP binds on port 389; old NAS or printers using NTLMv1 or unsigned SMB |
| Domain Controller VBS | Virtualization-based security and HVCI (memory integrity) | Old or unsigned drivers on physical DCs; hypervisors without nested virtualization |
| Member Server | SMB signing required; LAN Manager level NTLMv2 only; WDigest off; LSA protection (RunAsPPL); local admin accounts denied network and RDP logon; restricted anonymous access; advanced audit policy | Scripts or tools using a local admin over the network; third-party LSA plug-ins |
| Windows 11 Computer | Same credential protections as member servers plus SmartScreen, Office/Edge hardening, removable-media and RPC restrictions | Legacy line-of-business apps; unsigned drivers |
| Defender Antivirus | Cloud-delivered protection, PUA blocking, attack surface reduction (ASR) rules in block mode | Macros, scripts and installers flagged by ASR rules |
Tip: before linking, compare the baseline with your current GPOs in Policy Analyzer. Add your existing GPO backups and the baseline’s .PolicyRules file, then click View / Compare to see every conflict.
Step 4: Configure the custom GPOs
The Microsoft baseline does not manage local admin passwords or admin logon boundaries, so add these two GPOs.
SEC – LAPS (Windows LAPS)
- Extend the schema and grant computers permission to write their own password (once per forest/OU):
Update-LapsADSchema
Set-LapsADComputerSelfPermission -Identity 'OU=Servers,DC=contoso,DC=com'
Set-LapsADComputerSelfPermission -Identity 'OU=Workstations,DC=contoso,DC=com'- Edit the GPO: Computer Configuration > Policies > Administrative Templates > System > LAPS.
- Configure password backup directory: Enabled, Active Directory.
- Password Settings: Enabled, large letters + small letters + numbers + specials, length 15 or more, age 30 days.
- Enable password encryption: Enabled (requires Windows Server 2016 domain functional level).
- Post-authentication actions: Reset the password and log off the managed account.
- Read a password to confirm it works:
Get-LapsADPassword -Identity PC01 -AsPlainText.
SEC – Tier 0 Logon Restrictions
Stops domain admin credentials from being exposed on servers and workstations. Link it to server and workstation OUs only, never to the Domain Controllers OU.
Edit Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > User Rights Assignment and add Domain Admins, Enterprise Admins and Schema Admins to:
- Deny access to this computer from the network
- Deny log on as a batch job
- Deny log on as a service
- Deny log on locally
- Deny log on through Remote Desktop Services
Before linking, move any service or scheduled task that runs as a Domain Admin to a dedicated, least-privilege account. Also add admin accounts to the Protected Users group (a group, not a GPO setting).
SEC – Baseline Overrides
Put every exception to the baseline here, with a comment explaining why. Link it to each OU above the baseline GPOs (link order 1) so it wins. This keeps the MSFT GPOs untouched and makes the next baseline upgrade a simple swap.
Step 5: Test, then link in production
- Audit first (DCs). Before enforcing LDAP signing and NTLM restrictions, turn on auditing and watch for 1–2 weeks:
- LDAP: Directory Service log events 2887/2889 list clients doing unsigned or simple binds.
- NTLM: set Network security: Restrict NTLM: Audit NTLM authentication in this domain to Enable all and review the NTLM Operational log (event 8004).
- Link to test OUs. Link each baseline GPO to its test OU, then run
gpupdate /forceon the test machines and reboot (VBS and Credential Guard need a restart).
New-GPLink -Name 'MSFT Windows Server 2025 v2602 - Member Server' -Target 'OU=Test-Servers,DC=contoso,DC=com' -LinkEnabled Yes- Test the business apps on each role: logons, file shares, printing, backups, monitoring agents, LOB apps. Put any required exception in SEC – Baseline Overrides.
- Roll out in waves: workstations pilot group, then all workstations, then member servers, then the Domain Controllers OU, then Domain Security at the domain root last.
- Set link order so SEC – Baseline Overrides is 1 on each OU:
Set-GPLink -Name 'SEC - Baseline Overrides' -Target 'OU=Servers,DC=contoso,DC=com' -Order 1Rollback: disable the link (Set-GPLink -LinkEnabled No) and run gpupdate /force. Note that some security settings remain on the machine after the GPO is removed (“tattooing”) and must be reset by an opposite setting in a GPO.
Verification and troubleshooting
| Check | How |
|---|---|
| GPOs applied to a machine | gpresult /h C:\Temp\gp.html and open the report; confirm each MSFT and SEC GPO is under Applied GPOs |
| Machine matches the baseline | Policy Analyzer: load the baseline .PolicyRules and click Compare to Effective State on the target machine |
| GPO processing errors | Event Viewer > Applications and Services Logs > Microsoft > Windows > GroupPolicy > Operational |
| Settings show as “Extra Registry Settings” in GPMC | The baseline’s ADMX/ADML files are missing from the Central Store; repeat Step 1.5 |
| VBS / Credential Guard running | msinfo32 > Virtualization-based security Services Running |
| LAPS working | Get-LapsADPassword -Identity <computer> returns a password; Event Viewer > Microsoft > Windows > LAPS > Operational |
| App fails after rollout | Run gpresult on an affected machine, find the setting with Policy Analyzer, add the exception to SEC – Baseline Overrides |
Repeat this procedure for each new baseline release: import the new GPOs next to the old ones (names include the version), test, then swap the links.