ネットワークのどこかで、LDAPクライアントが適切なCA情報なしでADサーバーにクエリを実行しています。これにより、ドメインコントローラーのイベントログで、システムクリティカルな(ソース:schannel)イベントID 36887(私の見解では役に立たない)が呼び出されます。
次の致命的なアラートを受け取りました:46。
正しく構成されていないクライアントを見つけるにはどうすればよいですか?
ネットワークのどこかで、LDAPクライアントが適切なCA情報なしでADサーバーにクエリを実行しています。これにより、ドメインコントローラーのイベントログで、システムクリティカルな(ソース:schannel)イベントID 36887(私の見解では役に立たない)が呼び出されます。
次の致命的なアラートを受け取りました:46。
正しく構成されていないクライアントを見つけるにはどうすればよいですか?
回答:
組み込みでは、メッセージのソースを簡単に見つけることができません。
エラーの原因となっているマシンを見つけるには、tcpdump、microsoftネットワークモニター、またはWiresharkが必要です。(多くのスレッドが同じように、そこに、そこに、またはそこに(tcpdumpに関するGeorgeへの回答をコメントで参照してください))
DCに流れるトラフィックをキャプチャして分析できる場合は、Wiresharkのパケット検索を使用して、提示されている証明書を見つけることができます。
このWiresharkフィルターは、証明書の交換を探し、「LDAP SSLテスト」によって発行されたものをすべて除外します。これにより、ドメインによって発行されていない証明書を見つけることができます。
(ssl.handshake.type == 11) && !(x509sat.uTF8String == "LDAP SSL test")
作業するADの例がないので、wiresharkのサンプルページにある標準のLDAP over TLS pcapを使用しています。
私はWindows / AD管理の経験はほとんどありませんが、Linuxには慣れています。トレースやパケットキャプチャを実行したり、プログラムをデバッグモードで実行したりするなど、同様のLinuxの状況で...と思ったので、これを見つけました。
Active Directoryに対してLDAP接続をどのように追跡/デバッグしますか?
この:
https://technet.microsoft.com/en-us/library/cc961809.aspx
レベルを上げると、メッセージの詳細と出力されるメッセージの数が増えます。Diagnosticsサブキーのエントリの値を3より大きい値に設定すると、サーバーのパフォーマンスが低下する可能性があるため、お勧めしません。ロギングレベルを上げると、アプリケーションイベントログがすぐにいっぱいになります。
そしてこれは多分:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd815339(v=vs.85).aspx
トレースでは、Windowsのイベントトレース(ETW)を使用します。Windows Server 2008 R2で使用可能なトレースツールを利用するには、MSDNダウンロードサイトからMicrosoft Windows SDKをインストールします。
グーグル検索はまた、Windowsサービス上でトレースなどを実行した結果を表示しますが、繰り返しますが、私はそのいずれにも詳しくありません。ネットワークトラフィックだけを監視することは非常に難しいと思います。トラフィックしか表示されておらず、何を調べればよいかわからないため、サービス内で何が起こっているのか実際には分からないからです。
LDAPでトレースを実行したり、前述のツールやメソッドを使用したりするとどのような出力が期待できるかわかりませんが、試してみる価値はあるようです。
幸運を
パケットスニッフィングが不要な場合は、すべてのコンピューターでpowershellスクリプトを使用して、安全なLDAP接続をテストし、失敗したユーザーを記録することをお勧めします。ドメインコントローラーからクライアントにリモートで接続することも、ファイルサーバーに障害を記録するクライアント側スクリプトを作成することもできます。
スクリプトのアイデアは、安全なLDAP接続をシミュレートすることです。Windows 7 sp1以降でネイティブに付属する.netフレームワークを使用します。
DCからリモートで実行する場合、スクリプトは次のようになります(リモートPowerShellの権限が必要です。この記事https://www.briantist.com/how-to/powershell-remoting-group-に従って実行できます。ポリシー/):
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
}
リモートバージョン実行の出力(赤いバージョンはオフラインクライアントです):