найти клиента, ответственного за ошибку schannel ldap

где-то в нашей сети клиент ldap запрашивает наши серверы AD без надлежащей информации CA. Это вызывает (на мой взгляд, бесполезное) критическое для системы (источник: schannel) событие с идентификатором 36887 в журнале событий контроллеров домена:

Получено следующее критическое предупреждение: 46.

Как я могу найти неправильно настроенного клиента?

8
задан 7 September 2016 в 16:31
4 ответа

Встроенный, вы не можете легко найти источник сообщения.

Вам понадобится tcpdump, сетевой монитор Microsoft или wirehark, чтобы найти машину, на которой возникла ошибка. (многие потоки говорили то же самое, там , там или там ​​(см. в комментарии ответ Джорджу о tcpdump))

8
ответ дан 2 December 2019 в 22:56

У меня очень мало опыта администрирования 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 или использования любого из упомянутых инструментов/методов, но, похоже, стоит попробовать.

Удачи

.
0
ответ дан 2 December 2019 в 22:56

Если вы можете перехватить трафик, идущий на DC для анализа, то вы можете использовать поиск пакетов Wireshark для поиска представляемых сертификатов.

Этот фильтр wireshark ищет обмен сертификатами и отфильтровывает все, что выдается "тестом LDAP SSL", это позволит вам найти сертификаты, не выданные вашим доменом.

(ssl.handshake.type == 11) && !(x509sat.uTF8String == "LDAP SSL test")

У меня нет примера для работы AD, так что это использование стандартного LDAP через TLS pcap со страницы wireshark samples page.

.
3
ответ дан 2 December 2019 в 22:56

Если вы не хотите прослушивать пакеты, я бы порекомендовал скрипт 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
}

Вывод удаленного выполнения версии (красные - оффлайн клиенты):

enter image description here

0
ответ дан 2 December 2019 в 22:56

Теги

Похожие вопросы