Network List Manager Policies — это раздел политик безопасности Windows, который управляет типом сетевого профиля (Public, Private, DomainAuthenticated) для обнаруженных и неопознанных сетей. «Фикс профиля Private» в серверной среде — это набор настроек, гарантирующих, что выбранные сетевые подключения сервера стабильно работают в профиле Private, даже при смене драйверов, обновлениях, переконфигурации NIC или неполном сетевом окружении.
🔒 Зачем фиксировать профиль Private на серверах
Профиль сети напрямую определяет активные правила брандмауэра. Для серверов профиль Private часто используется в периметрах без домена (DMZ, тестовые площадки, изолированные подсети) или для сервисных сетей (репликация, бэкапы), где необходимо открыть внутренние службы.
- Стабильная работа ролей и служб, зависящих от входящих соединений.
- Контролируемое поведение брандмауэра при смене сетевой «сигнатуры».
- Упрощение поддержки Core-серверов без GUI.
Важно: профиль Private не равен «безопасному по умолчанию» — он обычно разрешает больше входящих правил, чем Public.
📋 Основные способы фикса профиля Private
| Метод | Где настраивается | Назначение | Команда/Путь | Плюсы | Минусы | 
|---|---|---|---|---|---|
| GPO: Unidentified networks → Private | Доменная GPO | DMZ/изолированные сети без домена | Computer Config → Windows Settings → Security Settings → Network List Manager Policies | Централизованно, масштабируемо | Требуется AD/GPO | 
| GPO: All Networks + запрет смены | Доменная GPO | Исключить ручные изменения | Network List Manager Policies → All Networks | Жесткий контроль | Может мешать ад-хоку | 
| Local Security Policy | Локально (secpol.msc / LGPO) | Одиночные серверы, нет домена | Local Security Policy → Network List Manager Policies | Не нужен домен | Нет централизованности | 
| PowerShell: Set-NetConnectionProfile | Скрипт/стартовый таск | Быстрое применение на конкретном NIC | Set-NetConnectionProfile -InterfaceAlias “Ethernet” -NetworkCategory Private | Точно, быстро | Не предотвращает смену в будущем | 
| Реестр: Category=1 | HKLM…NetworkListProfiles{GUID} | Закрепить текущую «сигнатуру» сети | Category: 0=Public, 1=Private, 2=Domain | Детальный контроль | Чувствительно к смене GUID/сигнатуры | 
| Скрипт + Планировщик | Task Scheduler (At startup) | Автовосстановление после ребута | PowerShell + Scheduled Task | Самоисцеление | Требует сопровождения | 
| Intune/MDM Policy | Управление устройствами | Гибридные/облако | Custom CSP / скрипты | Подходит вне AD | Сложность внедрения | 
| GPO: Конкретные «Networks» | Доменная GPO | По именам NLA-сетей | Network List Manager Policies → Networks | Точечно по сигнатурам | Зависит от NLA-идентификатора | 
🛠️ Настройка через доменную GPO (рекомендуется)
- Откройте Group Policy Management (gpmc.msc) и создайте/выберите GPO, применяемую к OU с серверами.
- Перейдите: Computer Configuration → Windows Settings → Security Settings → Network List Manager Policies.
- Откройте Unidentified Networks: - Location type → Private.
- User permissions → User cannot change location.
 
- Откройте All Networks: - Network locations → Do not allow users to change location.
 
- При необходимости настройте Networks и выберите конкретные сети, выставив Location type → Private.
- Примените политику: на серверах выполните gpupdate /force или дождитесь репликации.
Если сервер член домена и доступна аутентификация к контроллеру, профиль DomainAuthenticated применяется автоматически и переопределит Private.
Настройка на одиночном сервере (без домена)
- Запустите secpol.msc → Network List Manager Policies.
- Откройте Unidentified Networks → Location type: Private → запретить смену пользователю.
- В All Networks запретите изменение профиля пользователями.
- Проверьте, что служба Network Location Awareness (NlaSvc) в состоянии Automatic и запущена.
Альтернатива без GUI: примените те же параметры через LGPO или PowerShell-скрипт, импортирующий локальные политики безопасности.
PowerShell-фиксация на конкретном интерфейсе
# Показать текущие профили
Get-NetConnectionProfile | Format-Table Name, InterfaceAlias, IPv4Connectivity, NetworkCategory
# Установить Private по имени
Set-NetConnectionProfile -Name "Network" -NetworkCategory Private
# Или по интерфейсу
Set-NetConnectionProfile -InterfaceAlias "Ethernet0" -NetworkCategory Private
Чтобы профиль не «откатывался» после перезагрузки или смены сети, создайте задачу Планировщика, запускающую команду при старте системы:
$A = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-NoProfile -WindowStyle Hidden -Command "Get-NetConnectionProfile | ? {$_.NetworkCategory -ne ''Private''} | % { Set-NetConnectionProfile -InterfaceIndex $_.InterfaceIndex -NetworkCategory Private }"'
$T = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName 'ForcePrivateProfile' -Action $A -Trigger $T -RunLevel Highest -User 'SYSTEM'
Не полагайтесь только на ручной Set-NetConnectionProfile на продуктивных серверах — закрепите политику через GPO/LGPO.
Политика для «неопознанных сетей»
На серверах без шлюза по умолчанию или без доступа к DNS/DHCP сеть может определяться как Unidentified. В таких случаях именно параметр Unidentified Networks → Private предотвращает падение в Public профиль.
Реестр и сигнатуры сетей
Текущие профили хранятся в HKLMSOFTWAREMicrosoftWindows NTCurrentVersionNetworkListProfiles{GUID}. Параметр Category определяет тип:
- 0 — Public
- 1 — Private
- 2 — DomainAuthenticated
Изменение Category на 1 закрепляет Private для конкретной сигнатуры сети. Однако при смене сетевой сигнатуры (новый VLAN, другой DHCP, замена NIC) появится новый GUID и потребуется переустановка. Поэтому чаще применяют GPO/скрипт.
Проверка и диагностика
- Профиль сети: Get-NetConnectionProfile
- Профили брандмауэра: Get-NetFirewallProfile | Format-Table Name, Enabled, DefaultInboundAction
- Журналы NLA: Applications and Services Logs → Microsoft → Windows → NlaSvc
- Служба NlaSvc: sc qc nlasvc; убедитесь в состоянии Automatic
Если профиль «прыгает» на Public:
 
— проверьте применение GPO (gpresult /h report.html).
 
— убедитесь, что нет сторонних агентских политик, меняющих профиль.
 
— проверьте наличие шлюза/DNS, влияющих на определение сети.
Лучшие практики
- Разделяйте интерфейсы по ролям: прод, бэкап, кластер — и применяйте политику точечно.
- Для кластерных, storage и репликационных сетей фиксируйте Private и добавляйте ровно те правила, которые нужны.
- Храните скрипты фикса в репозитории и внедряйте через конфигурационное управление (SCCM, Intune, Ansible, DSC).
FAQ по смежным темам
Q: Как проверить, какой профиль активен у конкретного интерфейса на Server Core?
 A: Выполните Get-NetConnectionProfile и ориентируйтесь по полям InterfaceAlias/InterfaceIndex и NetworkCategory. Для краткого вывода: (Get-NetConnectionProfile -InterfaceAlias ‘Ethernet0’).NetworkCategory.
Q: Профиль становится Public после обновления драйвера NIC. Что сделать, чтобы это не повторялось?
 A: Примените GPO/LGPO для Unidentified Networks → Private и запретите пользователям менять профиль. Дополнительно используйте задачу Планировщика, которая при старте принудительно ставит Private, если GPO временно недоступна.
Q: Влияет ли профиль на RDP и SMB?
 A: Да. В Public-профиле входящие правила для RDP/SMB обычно отключены. В Private они, как правило, разрешены политиками. Проверьте Get-NetFirewallRule -DisplayGroup ‘Remote Desktop’ и «File and Printer Sharing».
Q: Можно ли закрепить профиль Private только для определенного VLAN/сети?
 A: Да. Используйте «Networks» в Network List Manager Policies, где политика привязывается к сигнатуре сети (NLA). Для точности убедитесь, что сеть стабильно идентифицируется одинаковой сигнатурой.
Q: Нужен ли шлюз по умолчанию для корректного определения сети?
 A: Нет, но его отсутствие часто ведет к «Unidentified network». В таких случаях включайте правило: Unidentified Networks → Private, чтобы сервер не падал в Public.
Q: Нужно ли включать EnableActiveProbing?
 A: В большинстве серверных сред это не требуется. Дополнительное активное зондирование может менять поведение NLA. Оставляйте значение по умолчанию, если нет специфической необходимости.
