Короткий ответ
Hardening Windows Server — это проверяемый эталон: Microsoft Security Baseline (Security Compliance Toolkit) или CIS Benchmark под вашу версию (2019 ≠ 2022 ≠ 2025), пилот, сравнение с ролью (DC ≠ IIS ≠ SQL), исключения с обоснованием. Не импортируйте чужой LGPO с GitHub на DC01. Не отключайте firewall, Defender, WinRM и SMB «чтобы соответствовало пункту», который вы не читали. Сначала чеклист рисков, потом пакет политик.
Windows 11 23H2/24H2 имеет свой baseline — не вешайте Server Member GPO на рабочие станции без отдельного эталона.
Симптомы и как отличить
- Аудит: 200 CIS fail, нет владельца исключений.
- После «hardening скрипта» нет RDP/LDAP/backup.
- Firewall off или Defender off как «пункт выполнен наоборот».
- На всех серверах одна GPO, включая DC и print-сервер.
| Задача | Отдельная статья, не весь CIS |
|---|---|
| LAPS | локальный админ |
| SMBv1 | SMBv1 |
| TLS/шифры | TLS, cipher |
| WinRM | WinRM |
Возможные причины
- Нет эталона, каждый админ крутит Local Security Policy.
- Импорт MS Security Guide на DC без DC-специфичного baseline.
- CIS Level 2 на файловый сервер в первый день.
- Скрипт выключает службы, которые нужны DFS/backup.
- Нет отката: GPO Enforced поверх, backup не снимали.
Диагностика
На пилоте SRV-APP01 / WS-042 если hardening станций:
New-Item C:\Temp\baseline-before -ItemType Directory -Force
Get-NetFirewallProfile | Format-Table | Out-File C:\Temp\baseline-before\fw.txt
Get-MpComputerStatus | Out-File C:\Temp\baseline-before\mp.txt
Get-SmbServerConfiguration | Out-File C:\Temp\baseline-before\smb.txt
auditpol /get /category:* > C:\Temp\baseline-before\auditpol.txt
Get-LocalGroupMember Administrators | Out-File C:\Temp\baseline-before\admins.txt
Get-TlsCipherSuite | Select-Object Name | Out-File C:\Temp\baseline-before\ciphers.txt
secedit /export /cfg C:\Temp\baseline-before\secpol.inf
gpresult /h C:\Temp\baseline-before\gp.html /fРоли: Get-WindowsFeature | Where Installed. Консоль гипервизора открыта. Снимок VM.
Решение
Пакет 0. Организационный
- Скачайте Microsoft Security Compliance Toolkit для вашей ОС (GPOs Baseline) с сайта Microsoft, не зеркало 2018 года.
- Либо CIS Build Kit, если лицензия CIS есть — всё равно читайте описание каждого правила.
- Разделите GPO: Member Server / Domain Controller / Windows 11. Не одна.
- Пилот: 1 member server с типичной ролью.
Пакет 1. Защита, которую нельзя выключать
- Все профили firewall on + точечные allow ролей.
- Defender on, базы живые.
- Нет SMBv1, подпись SMB по совместимости.
- LAPS, нет общего локального пароля.
- RDP не на WAN.
Это «обязательный минимум» даже если CIS ещё не импортирован.
Пакет 2. Импорт baseline на пилот OU
Backup GPO:
Backup-GPO -Name 'MS-Baseline-Member-Pilot' -Path '\\fs01.contoso.example\gpo-backup' -ErrorAction SilentlyContinueЕсли GPO ещё нет — создайте, импортируйте из SCT (LGPO.exe / Import-GPO из пакета). Линк на OU пилота, не на domain root.
Пакет 3. Исключения ролей
DC: используйте DC baseline, не member. SQL: не отключайте SeLockMemory если это осознанная настройка SQL, сверяйте. IIS: TLS/cipher пакеты отдельно. Print: драйверы и Point-and-Print — не Level 2 в первый день.
Запишите: Rule ID → Exclude → почему → дата пересмотра.
Пакет 4. Аудит и админ-контур
Включите логоны, группы, PowerShell, WinRM HTTPS, admin shares. User Rights: Debug не Domain Users. Deny DA логон на workstation OU.
Пакет 5. Расширение
Когда пилот прожил неделю: следующие 5 серверов той же роли. Другая роль — новый пилот. CIS Level 2 — только если Level 1 стабилен.
Зафиксируйте в contoso.example матрицу: роль сервера → какая GPO baseline → какие исключения. Без матрицы через полгода никто не знает, почему на print-сервере NTLM deny, а на FS — нет. Пилот держите в отдельной OU, не Enforced на domain root. После импорта SCT прогоните тот же срез, что в статье про базовые риски: firewall, Defender, 3389, SMBv1, LAPS. Если baseline выключил WinRM HTTP, сразу должен быть готов HTTPS с jump. На DC01 применяйте только DC-пакет и только после member-пилота. Документ исключений без даты пересмотра — это вечное ослабление.
Снимок C:\Temp\baseline-before на пилоте сравните с after по firewall, Defender, SMB1 и auditpol — это критерий приёмки пакета, не «GPO прилинкована». Если diff пустой, baseline не применился.
Как проверить, что проблема устранена
Повторите съёмку baseline-after. Скрипт сравнения (хотя бы diff файлов). Функциональные тесты: логон, шара, backup job, мониторинг, RDP с jump. Сканер: критичные находки периметра закрыты; остаток — документированные исключения, не «не смотрели».
Get-NetFirewallProfile Enabled True, RealTimeProtectionEnabled True.
Если не помогло
- Сервис отвалился: найдите правило в gpresult/rsop, исключите, не снимайте весь baseline.
- LGPO из другой build (21H2 на 24H2) — возьмите пакет под версию.
- Конфликт двух baseline GPO Enforced.
- Сторонний «optimizer» снова выключает службы — удалите его.
Профилактика
- Эталон в git/backup GPO с датой.
- Новые серверы сразу в OU с member baseline после роли.
- Квартальный review исключений.
- SCT обновляется — планируйте дельту, не «импорт раз в 2019».
- Мониторинг отклонений: firewall/Defender/SMBv1.
FAQ
CIS или Microsoft Baseline?
Microsoft ближе к продукту и ADMX. CIS строже и с платным артефактом. Для SMB часто SCT + наш минимум. Главное — один выбранный эталон.
Можно ли hardening без GPO, только Local Policy?
Для 3 серверов. Для contoso.example — GPO, иначе рассинхрон.
Level 1 vs Level 2 CIS
Level 1 — практичный старт. Level 2 ломает удобства (часто RDP/общие ресурсы). Не начинайте с 2.
Нужен ли AppLocker/WDAC в «базовом»?
Это уже следующий уровень. В базовый пакет не тащите WDAC на ERP без проекта.
Hardening DC первым?
Нет. Member pilot, потом DC baseline на вторичном DC, потом PDC-эмулятор.
Windows 11 в той же GPO, что Server?
Нет. Разные шаблоны SCT. Станции — своя OU.