当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在 Windows Server 上启用 DNS 查询日志记录和解析日志文件?

作者:精品下载站 日期:2024-12-14 23:12:31 浏览:17 分类:玩电脑

如何在 Windows Server 上启用 DNS 查询日志记录和解析日志文件?


在本文中,我们将展示如何为运行 Windows Server 的 DNS 服务器上的所有用户查询启用 DNS 日志记录,以及如何解析和分析 DNS 日志。当我必须停用分支机构中的旧 Active Directory 域控制器并且需要了解哪些设备仍在使用 DNS 服务器时,我面临着这项任务。启用 DNS 日志并对其进行分析后,我能够找到设备并将它们重新配置为使用其他 DNS 服务器。此外,此方法将帮助您查找 Active Directory 网络中存在可疑活动的主机(访问恶意 URL、僵尸网络主机等)。

当然,您可以在 DNS 主机上安装 Wireshark、Microsoft Network Monitor 或 pktmon 来捕获端口 53 上的流量,但使用 Windows Server 上内置的 DNS 查询日志记录会更容易。

默认情况下,Windows Server 上禁用 DNS 日志记录。要启用它:

  1. 打开 DNS 管理器管理单元 (

    dnsmgmt.msc

    ) 并连接到您想要的 DNS 服务器;

  2. 打开其属性并转到调试日志记录选项卡;

  3. 启用记录数据包以进行调试选项;

  4. 然后,您可以配置日志记录选项:选择 DNS 数据包方向、协议(UDP 和/或 TCP)、数据包类型(简单 DNS 查询、更新或通知);

  5. 使用按 IP 地址过滤数据包选项,您可以指定记录传入或传出数据包的 IP 地址(它可以显着减小日志大小);

    [玩转系统] 如何在 Windows Server 上启用 DNS 查询日志记录和解析日志文件?

  6. 日志文件路径和名称框中,指定要将所有事件记录到的文本文件的名称。默认情况下,DNS 日志的大小限制为 500MB。达到该值后,旧的 DNS 查找事件将被新的 DNS 查找事件覆盖。

此外,您还可以启用 DNS 查询日志记录或使用 PowerShell 获取当前设置:

Get-DnsServerDiagnostics

[玩转系统] 如何在 Windows Server 上启用 DNS 查询日志记录和解析日志文件?

请注意,在高负载的 Windows DNS 主机上,DNS 查询日志记录可能会导致 CPU、RAM 和存储的额外负载(磁盘性能必须足够)。

然后从任何计算机对您的服务器运行 DNS 查询。例如,如果运行 Windows Server 的 DNS 主机的 IP 地址是 192.168.13.10:

nslookup a-d.site 192.168.13.10

[玩转系统] 如何在 Windows Server 上启用 DNS 查询日志记录和解析日志文件?

或者运行尝试使用 PowerShell 解析 DNS 地址:

Resolve-DnsName -Name a-d.site -Server 192.168.13.10

DNS 查找查询返回所请求主机的客户端 IP 地址。

让我们确保查询已出现在 DNS 服务器日志中。

为此,请按客户端 IP 地址搜索文本日志文件 (

192.168.13.130

)。您可以在记事本中打开日志文件或使用 PowerShell grep 它:

get-content "C:\Logs\dc01dns.log" | Out-String -Stream | Select-String "192.168.13.130"

[玩转系统] 如何在 Windows Server 上启用 DNS 查询日志记录和解析日志文件?

这是事件示例:

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

如您所见,解析名称的 DNS 查询

(8)a-d(2)com(0)

收到了 (

rcv

) 来自客户端

192.168.13.130

超过

UDP

,则DNS服务器成功(

NOERROR

)回复了它(

snd

)。

所有字段均在文件开头进行描述:

Field # Information Values
------- ----------- ------
1 Date
2 Time
3 Thread ID
4 Context
5 Internal packet identifier
6 UDP/TCP indicator
7 Send/Receive indicator
8 Remote IP
9 Xid (hex)
10 Query/Response R = Response
blank = Query
11 Opcode Q = Standard Query
N = Notify
U = Update
? = Unknown
12 Flags (hex)
13 Flags (char codes) A = Authoritative Answer
T = Truncated Response
D = Recursion Desired
R = Recursion Available
14 ResponseCode
15 Question Type
16 Question Name

由于其特定的格式,很难手动解析和分析这样的DNS日志文件。因此,您需要使用 Get-DNSDebugLog.ps1 脚本将 DNS 查询日志转换为更方便的格式。

此 PowerShell 脚本不是我的,但目前在 TechNet 脚本中心中不可用,因此我将其保存到我的 GitHub 存储库:https://github.com/maxbakhub/winposh/blob/main/Get-DNSDebugLog.ps1。

将文件下载到您的磁盘上。然后允许 PowerShell 脚本在当前控制台会话中执行:

Set-ExecutionPolicy -Scope Process Unrestricted

将函数从 Get-DNSDebugLog.ps1 导入到您的会话中:

. C:\ps\Get-DNSDebugLog.ps1

然后将DNS日志转换成更方便的格式:

Get-DNSDebugLog -DNSLog C:\Logs\dc01dns.log | format-table

[玩转系统] 如何在 Windows Server 上启用 DNS 查询日志记录和解析日志文件?

或者,您可以将结果导出到 CSV 文件,以便在 Excel 中进一步分析(或者您可以直接从 PowerShell 访问 Excel 文件并向其写入所需的 DNS 查询)。

Get-DNSDebugLog -DNSLog C:\Logs\dc01dns.log | Export-Csv C:\log\ProperlyFormatedDNSLog.csv -NoTypeInformation

您可以将该文件导出到 Excel 并使用它来分析 DNS 查询(该文件包含主机 IP 地址和它们从 DNS 服务器请求的 DNS 名称)。

此外,您还可以使用Log Parser 2.2 (https://docs.microsoft.com/en-us/archive/blogs/secadv/parsing-dns-server-log-to-track-active-clients)来解析和分析DNS日志文件。例如,下面的命令将显示每个 IP 地址的 DNS 查询数量:

LogParser.exe -i:TSV -nskiplines:30 -headerRow:off -iSeparator:space -nSep:1 -fixedSep:off -rtp:-1 "SELECT field9 AS IP, REVERSEDNS(IP) AS Name, count(IP) as QueryCount FROM "C:\Logs\dc01dns.log" WHERE field11 = 'Q' GROUP BY IP ORDER BY QueryCount DESC"

[玩转系统] 如何在 Windows Server 上启用 DNS 查询日志记录和解析日志文件?

在此示例中,我们使用文本文件来收集 DNS 日志。在 Windows Server 2012 及更高版本中,您可以将 DNS 查询直接记录到事件查看器(

Microsoft-Windows-DNS-Server/Audit

)。但在我看来,文本 DNS 日志更容易分析。

当然,如果您想在多个服务器上记录 DNS 查询,最好使用特殊的解决方案来收集、存储和处理日志,例如 Splunk、ELK、Graylog 或 Azure Log Analytics。

启用 DNS 查询日志并进行分析后,我找到了仍在使用 DNS 服务器的设备的 IP 地址,并将其重新配置到其他 DNS 服务器。如果旧 DC 不包含任何 FSMO 角色,您可以将其删除(AD 用户登录事件在这里并不重要)。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯