Windows ServerでDNSクエリログを有効にしてログファイルを分析する方法

Windows ServerでDNSログを有効にして分析する方法

どのデバイスがまだDNSサーバーにpingを送信しているのか、あるいは不審なアクティビティが潜んでいるのかを把握しようとすると、このプロセス全体が少々面倒になることがあります。Wiresharkのキャプチャに溺れたり、サードパーティ製ツールに頼ったりすることなく、DNSクエリをリアルタイムで確認する方法が必要な場合もあります。DNSデバッグログを有効にしてログを解析すれば、特に古いサーバーの廃止や不正なデバイスの追跡時に、多くの手間を省くことができます。このアプローチは実際には非常に簡単です。少なくとも初期設定さえ済めば。

DNSデバッグログを有効にする方法

DNSログはデフォルトで有効になっていないことを忘れている人が多いですが、クエリを追跡したい場合、これでは本来の目的を果たせません。ログが有効になっていると、すべてのDNSトランザクション(誰がいつ何を問い合わせたか)の詳細な記録が得られるため、役立ちます。DNSの問題のトラブルシューティング、不正なDNSアクティビティの追跡、サーバーの廃止準備など、あらゆる場面で役立ちます。テキストベースのわかりやすいログが生成され、後から簡単に検索・分析できます。ただし、一部のサーバーでは、ログを有効にするとCPU負荷がわずかに増加する場合があるので、サーバーに負荷がかかっている場合は、ログを有効にするかどうかに注意してください。

  • を実行するか、 Server Manager > Tools > DNSからDNS マネージャーを開きます。dnsmgmt.msc
  • DNS サーバーを右クリックし、[プロパティ]を選択します。
  • デバッグ ログタブに移動します。
  • デバッグ用にログパケットをチェックします。これはログ記録をオンにするトグルです。
  • 設定を構成します: DNS プロトコル (UDP/TCP)、パケット タイプ (単純なクエリ、更新、通知など) を選択します。
  • ログを特定のクライアントに制限する場合は、「IP アドレスによるパケットのフィルタリング」を使用します。
  • ログファイルのパスと名前でログファイルの場所を設定します。通常は のような形式になりますC:\DNSLogs\dns_debug.log。ログファイルのサイズは大きくなる可能性があるので(Windows のデフォルトは 500MB に制限されています)、ディスク容量に余裕を持たせるようにしてください。

DNSログファイルの確認と管理

nslookup有効にすると、やPowerShell のResolve-DnsNameのように、任意のマシンから DNS クエリを生成できるようになります。DNS サーバーの IP アドレスが192.168.13.10だとします。nslookup woshub.com 192.168.13.10またはを実行すると、Resolve-DnsName -Name woshub.com -Server 192.168.13.10ログファイルにクエリを示すログが返されるはずです。

ログに記録されていることを確認するには、ログファイルを検索するだけです。例えば、PowerShell を使用する場合は次のようにします。

get-content "C:\DNSLogs\dns_debug.log" | Out-String | Select-String "192.168.13.130"

これにより、クライアント IP が特定され、時間、クエリの種類などのリクエストの詳細が表示されます。設定によっては、ログのサイズ、サーバーの負荷などによって、これが即座に行われない場合があります。ログ エントリは通常、次のようになります。

11/17/2021 6:00:00 AM 0D0C PACKET 00000272D98DD0B0 UDP Rcv 192.168.13.130 0002 Q [0001 D NOERROR] A (8)woshub(2)com(0)

かなり技術的な見た目ですが、必要な情報(誰が何を尋ねたのか、そして回答状況)が網羅されています。手動で読み解くのが面倒だと感じる場合は、これらのログを解析したり、より分かりやすい形式に変換したりするスクリプトが存在します。

DNSログの変換と分析

ここからが少し面倒です。パターンや不正なログを見つけようとすると、ログを読むのは悪夢のようです。Get -DNSDebugLog.ps1のようなスクリプトを使います。これは基本的に、生のログを構造化された表やCSVに変換して分析しやすくするスクリプトです。このスクリプトをマシンにコピーし、Set-ExecutionPolicy -Scope Process Unrestrictedスクリプトを許可して実行し、.C:\ps\Get-DNSDebugLog.ps1次のようにインポートしてログをパイプ処理します。

Get-DNSDebugLog -DNSLog C:\DNSLogs\dns_debug.log | format-table

出力をCSVにエクスポートしてExcelで分析することもできます。こちらの方がはるかにユーザーフレンドリーです。Export-Csvの代わりにを使用してくださいformat-table。こうすることで、誰がDNSにクエリを発行しているか、どのくらいの頻度でクエリを発行しているか、そしてどのようなホスト名を要求しているかを簡単に確認できます。これは、不審なアクティビティや古いデバイスがまだDNSにコールバックしているのを見つけるのに驚くほど役立ちます。

もう一つの非常に堅牢な選択肢は、Log Parser 2.2 を使うことです。DNSログを解析し、どのクライアントが最も頻繁にクエリを実行しているか、どのドメインが最も人気があるかといった詳細な統計情報を提供します。ある設定ではうまく動作しましたが、少し扱いに​​くいので、試行錯誤が必要になることを覚悟してください。

大規模な環境では、Splunk、ELK、Azure Log Analyticsなどのツールを使用してDNSログを一元管理することを検討してください。これにより、継続的な監視が簡素化され、複数のDNSサーバーを管理する際にも整理された状態を保つことができます。

まとめ

DNSデバッグログを有効にしてログを分析するのは、それほど魅力的な技術作業ではありませんが、舞台裏で何が起こっているかを把握するための最速の方法となることがよくあります。古いインフラの廃止、不審なアクティビティの追跡、あるいは単に整理整頓する場合でも、この方法は非常に明確な情報を提供します。

まとめ

  • 詳細なオプションを使用して DNS マネージャー経由でデバッグ ログを有効にします。
  • PowerShell またはメモ帳を使用してログを確認し、クエリを確認します。
  • Get-DNSDebugLog.ps1などのスクリプトを使用して、ログを管理しやすい形式に変換します。
  • オプションで、高度な分析のために Log Parser 2.2 を使用してログを解析します。
  • より大規模なセットアップの場合は、集中ログ管理ツールを検討してください。

このアプローチが、次にどのデバイスがまだDNSと通信しているかを追跡しようとするときに、多少の手間を省いてくれることを願っています。私の経験では、正しく設定すればかなり信頼性が高く、Wiresharkをあまりいじらなくても十分な情報が得られます。