Как включить регистрацию DNS-запросов и разобрать файл журнала на Windows Server

В этой статье мы покажем, как включить регистрацию DNS-запросов для всех пользователей на DNS-сервере под управлением Windows Server, как разбирать и анализировать журналы DNS. Я столкнулся с этой задачей, когда мне нужно было вывести из эксплуатации старый контроллер домена Active Directory в филиале, и мне нужно было понять, какие устройства все еще используют DNS-сервер. Включив журнал DNS и проанализировав его, я смог найти эти устройства и перенастроить их на использование других DNS-серверов. Кроме того, этот метод поможет вам найти узлы с подозрительной активностью в сети Active Directory (доступ к вредоносным URL, узлы ботнетов и т. д.).

Конечно, вы можете установить Wireshark, Microsoft Network Monitor или pktmon команду на DNS хост для перехвата трафика на 53 порту, но проще использовать встроенную регистрацию DNS запросов в Windows Server.

По умолчанию протоколирование DNS на Windows Server отключено. Чтобы включить ее:

  1. Откройте Диспетчер DNS оснастка (dnsmgmt.msc) и подключитесь к нужному DNS-серверу;
  2. Откройте его свойства и перейдите к пункту Ведение журнала отладки вкладка;
  3. Включите Вести журнал пакетов для отладки опция;
  4. Затем можно настроить параметры протоколирования: выбрать направление DNS-пакетов, протокол (UDP и/или TCP), типы пакетов (простые DNS-запросы, обновления или уведомления);
  5. Использование Фильтрация пакетов по IP-адресу Опция позволяет указать IP-адреса, для которых необходимо регистрировать входящие или исходящие пакеты (это позволяет значительно уменьшить размер журнала);
    Включение регистрации DNS-запросов Active Directory на Windows Server
  6. В Путь и имя файла журнала поле, укажите имя текстового файла, в который вы хотите записывать все события. По умолчанию размер журнала DNS ограничен 500 МБ. После его достижения старые события поиска DNS будут заменены новыми.

Также можно включить регистрацию DNS-запросов или получить текущие настройки с помощью PowerShell:

Get-DnsServerDiagnostics

Get-DnsServerDiagnostics - получение параметров DNS WIndows Server с помощью PowerShell

Обратите внимание, что на высоконагруженных узлах Windows DNS регистрация DNS-запросов может вызвать дополнительную нагрузку на процессор, оперативную память и хранилище (производительность диска должна быть вполне достаточной).

Затем запустите DNS-запрос к вашему серверу с любого компьютера. Например, если IP-адрес нашего DNS-хоста под управлением Windows Server равен 192.168.13.10:

nslookup woshub.com 192.168.13.10

использование nslookup в клиенте windows

Или попробуйте разрешить DNS-адрес с помощью PowerShell:

Resolve-DnsName -Name woshub.com -Server 192.168.13.10

Запрос на поиск DNS вернул IP-адрес клиента запрашиваемого узла.

Убедимся, что запрос появился в журнале DNS-сервера.

Для этого выполните поиск в текстовом журнале по IP-адресу клиента (192.168.13.130). Вы можете открыть файл журнала в NotePad или выполнить grep с помощью PowerShell:

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

Журнал DNS-запросов Windows Server

Вот пример события:

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-запрос для разрешения имени (8)woshub(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 сложно разобрать и проанализировать вручную. Поэтому необходимо преобразовать журнал DNS-запросов в более удобный формат, используя программу Get-DNSDebugLog.ps1 скрипт.

Этот сценарий PowerShell не мой, но в настоящее время он недоступен в TechNet Scriptcenter, поэтому я сохранил его в своем репозитории 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 в удобный формат с помощью сценария powershell Get-DNSDebugLog.ps1

Или можно экспортировать результат в CSV-файл для дальнейшего анализа в Excel (или получить доступ к файлу Excel непосредственно из PowerShell и записать в него нужные 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. Например, команда ниже отобразит количество DNS-запросов с каждого IP-адреса:

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"

Microsoft Log Parser - разбор журналов DNS-сервера

В этом примере мы использовали текстовые файлы для сбора журналов DNS. В Windows Server 2012 и более новых версиях вы можете регистрировать DNS-запросы непосредственно в Event Viewer(Microsoft-Windows-DNS-Server/Audit). Но, на мой взгляд, текстовые журналы DNS гораздо проще анализировать.

Конечно, если вы хотите регистрировать DNS-запросы на нескольких серверах, предпочтительнее использовать специальное решение для сбора, хранения и обработки журналов, например Splunk, ELK, Graylog или Azure Log Analytics.

Включив журнал DNS-запросов и проанализировав его, я нашел IP-адреса устройств, которые все еще использовали этот DNS-сервер, и перенастроил их на другие DNS-серверы. Если старый DC не содержит ролей FSMO, его можно удалить (события входа пользователей AD в систему здесь не имеют значения).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *