где-то в нашей сети клиент ldap запрашивает наши серверы AD без надлежащей информации CA. Это вызывает (на мой взгляд, бесполезное) критическое для системы (источник: schannel) событие с идентификатором 36887 в журнале событий контроллеров домена:
Получено следующее критическое предупреждение: 46.
Как я могу найти неправильно настроенного клиента?
У меня очень мало опыта администрирования Windows/AD, однако мне удобно работать в Linux. Я решил сделать трассировку и/или перехват пакетов, запустить программу в отладочном режиме и т.д... в похожей ситуации с Linux... так что я нашел следующее:
Как вы отслеживаете/отлаживаете LDAP соединения с Active Directory?
А это:
https://technet.microsoft.com/en-us/library/cc961809.aspx
Повышение уровня увеличивает детализацию сообщений и количество отправленных сообщений. Установка значения записей в Подключение диагностики более 3 может ухудшить производительность сервера. и не рекомендуется. Журнал событий приложения быстро заполняется когда уровень лесозаготовок повышается.
И это возможно:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd815339(v=vs.85).aspx
Трассировка использует Event Tracing for Windows (ETW). Чтобы воспользоваться инструменты трассировки, доступные в Windows Server 2008 R2, установите Microsoft Windows SDK с сайта MSDN Downloads.
Поиск в Google также выдает результаты по выполнению трасс и тому подобного в службах Windows, но опять же, я не знаком ни с одним из них. Я бы представил, что наблюдать за сетевым трафиком в одиночку может быть очень сложно, потому что вы видите только трафик и, вероятно, не знаете, что искать, и на самом деле не видите, что происходит внутри службы.
Я понятия не имею, какого результата ожидать от выполнения трассировки на ldap или использования любого из упомянутых инструментов/методов, но, похоже, стоит попробовать.
Удачи
.Если вы можете перехватить трафик, идущий на DC для анализа, то вы можете использовать поиск пакетов Wireshark для поиска представляемых сертификатов.
Этот фильтр wireshark ищет обмен сертификатами и отфильтровывает все, что выдается "тестом LDAP SSL", это позволит вам найти сертификаты, не выданные вашим доменом.
(ssl.handshake.type == 11) && !(x509sat.uTF8String == "LDAP SSL test")
У меня нет примера для работы AD, так что это использование стандартного LDAP через TLS pcap со страницы wireshark samples page.
.Если вы не хотите прослушивать пакеты, я бы порекомендовал скрипт Powerhell на всех компьютерах, которые тестируют защищенное ldap соединение и ведут лог, который дает сбой. Можно удаленно подключаться к клиентам с контроллера домена или создавать сценарий на стороне клиента, который ведет журнал сбоев на файловом сервере.
Идеей этого сценария является имитация защищенного ldap соединения. Он использует .net framework, который поставляется в Windows 7 sp1 или выше.
Если вы хотите выполнить сценарий удаленно с контроллера домена, он будет выглядеть следующим образом (требуется разрешение для удаленной оболочки powershell, которое можно получить, следуя этой статье https://www.briantist. com/how-to/powershell-remoting-group-policy/):
Import-Module ActiveDirectory
$domain = "contoso.com"
$user = "Administrator"
$password = "P@ssw0rd"
$IPFilter = "192.168.1.*"
$scriptblock = {
write-host "$(hostname) - " -NoNewLine
try {
$LDAPS = New-Object adsi ("LDAP://$($args[0]):636",$args[1],$args[2],'SecureSocketsLayer')
Write-Host "Secure LDAP Connection succeeded."
} Catch {
Write-Host "Secure LDAP Connection failed." -foregroundcolor red
}
}
$Computers = Get-ADComputer -filter * -Properties IPv4Address | Where{ $_.IPv4Address -like $IPFilter}
foreach($Computer in $Computers)
{
try {
$session = New-PSSession $Computer.Name -ErrorAction Stop
Invoke-Command -Session $session -ScriptBlock $scriptblock -ArgumentList $domain,$user,$password
}catch{
Write-Host "Connection to $($Computer.Name) failed." -foregroundcolor red
}
}
Или если вам нужен локальный скрипт, который входит на удаленный сервер:
$domain = "contoso.com"
$user = "Administrator"
$password = "P@ssw0rd"
$LogFile = "\\fileserver\logs\ldapconnection.log"
try {
$LDAPS = New-Object adsi ("LDAP://$domain:636",$user,$password,'SecureSocketsLayer')
"$(hostname) - Secure LDAP Connection succeeded." | Out-File $LogFile -Append
} Catch {
"$(hostname) - Secure LDAP Connection failed." | Out-File $LogFile -Append
}
Вывод удаленного выполнения версии (красные - оффлайн клиенты):