encontre o cliente responsável pelo erro schannel ldap

8

em algum lugar da rede, um cliente LDAP está consultando nossos servidores AD sem as informações apropriadas da CA. Isso provoca o ID de evento crítico do sistema (na minha opinião, inútil) (fonte: schannel) 36887 no log de eventos dos controladores de domínio:

O seguinte alerta fatal foi recebido: 46.

Como localizo o cliente configurado incorretamente?

natxo asenjo
fonte
Esse erro continua acontecendo? Ou isso aconteceu apenas uma vez?
Felipe Donda
1
isso continua acontecendo com os servidores ldap no primeiro site padrão, para que o cliente esteja contido nesses intervalos de IP.
Natxo asenjo

Respostas:

8

Integrado, você não consegue encontrar facilmente a fonte da mensagem.

Você precisa do tcpdump, do microsoft network monitor ou do wireshark para encontrar a máquina que está causando o erro. (muitos tópicos disseram o mesmo, , ali ou ali (veja no comentário a resposta para George sobre o tcpdump))

yagmoth555
fonte
2
Eu tendo a concordar, e é uma merda ;-) (não é o seu comentário, a situação). Outra solução seria desativar completamente o registro do canal, mas isso pode ter efeitos inesperados.
Natxo asenjo
@natxoasenjo Outra coisa que vi é para o ldap. Vejo referência de que o log é feito via iis, talvez para verificar o diretório de log do iis para encontrar o ip / request feito para poder encontrá-lo mais rapidamente. (que irá permitir comparar o carimbo de tempo de ambos log)
yagmoth555
essa foi uma boa sugestão, mas a função de servidor da web não está instalada nesses controladores de domínio (2008r2).
Natxo asenjo
3

Se você conseguir capturar o tráfego que flui para o DC para análise, poderá usar a pesquisa de pacotes do Wireshark para encontrar os certificados que estão sendo apresentados.

Esse filtro do wireshark procura a troca de certificados e filtra tudo o que é emitido pelo "teste SSL LDAP", permitindo encontrar documentos não emitidos pelo seu domínio.

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

Não tenho um exemplo do AD para trabalhar, portanto, use um pcap LDAP sobre TLS padrão na página de amostras do wireshark.

Tim Fletcher
fonte
0

Tenho muito pouca experiência com a administração do Windows / AD, mas sou confortável com o Linux. Eu pensei em fazer um rastreamento e / ou captura de pacotes, executar o programa no modo de depuração, etc ... em uma situação semelhante do Linux ... então encontrei o seguinte:

Como você rastreia / depura conexões LDAP no Active Directory?

E isto:

https://technet.microsoft.com/en-us/library/cc961809.aspx

Aumentar o nível aumenta os detalhes das mensagens e o número de mensagens emitidas. Definir o valor das entradas na subchave Diagnostics para maior que 3 pode prejudicar o desempenho do servidor e não é recomendado. O log de eventos do aplicativo é preenchido rapidamente quando o nível de log é aumentado.

E isso talvez:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd815339(v=vs.85).aspx

O rastreamento usa o rastreamento de eventos para Windows (ETW). Para aproveitar as ferramentas de rastreamento disponíveis no Windows Server 2008 R2, instale o Microsoft Windows SDK no site de downloads do MSDN.

Uma pesquisa no google também mostra resultados na execução de rastreamentos e serviços do Windows, mas, novamente, não estou familiarizado com nada disso. Eu imagino que assistir o tráfego de rede sozinho poderia ser muito difícil, porque você está vendo apenas o tráfego e provavelmente não sabe o que procurar e realmente não está vendo o que está acontecendo no serviço.

Não tenho idéia de que tipo de saída esperar ao executar um rastreamento no ldap ou usar qualquer uma das ferramentas / métodos mencionados, mas parece que vale a pena tentar.

Boa sorte

Ryan Babchishin
fonte
0

Se você não deseja farejar pacotes, recomendo um script do PowerShell em todos os computadores que testam uma conexão LDAP segura e registram quem falha. Você pode conectar-se remotamente aos clientes a partir do controlador de domínio ou criar um script do lado do cliente que registre falhas em um servidor de arquivos.

A ideia do script é simular uma conexão ldap segura. Ele usa a estrutura .net que vem nativamente no Windows 7 SP1 ou superior.

Caso você queira executar remotamente a partir do controlador de domínio, o script será semelhante a este (requer permissão para o PowerShell remoto, que pode ser obtido após este artigo https://www.briantist.com/how-to/powershell-remoting-group- política / ):

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
   }
}

Ou se você deseja um script local que efetue login em um servidor remoto:

$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
}

Saída de uma versão remota de execução (as vermelhas são clientes offline):

insira a descrição da imagem aqui

Felipe Donda
fonte
obrigado pelo script. Nossa infraestrutura é uma mistura de clientes Windows e Linux, portanto, isso cobriria apenas uma parte dela. Boa ideia, no entanto.
Natxo asenjo