А АMonday, 24 January 2022

Аудит DNS запросов.

Добрый  день.

Работа всех сетевых устройств зависит от  службы DNS. Поэтому полезно уметь включить логирование DNS запросов, которые обрабатывает DNS сервис на Windows Server, и суметь после выполнить их анализ

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

  • запустите консоль DNS Manager (dnsmgmt.msc) и подключитесь к нужному DNS серверу;
  • откройте его свойства и перейдите на вкладку Debug Logging;
  • включите опцию Log packets for debugging.

Далее можно настроить параметры логирования: выбрать направление DNS пакетов, протокол (UDP и/или TCP), типы пакетов (простые dns запросы, запросы на обновление записей, уведомления). С помощью опцию Filter packets by IP address можно указать IP адреса, для которых нужно логировать отправленные или полученные пакеты (поможет существенно уменьшить размер лога). В поле Log file path and name укажите имя текстового файла, в который нужно записывать все события. По умолчанию размер DNS лога ограничен 500Мб. После достижения этого лимита старые события начнут перезатираться новыми.


Теперь выполните с любого компьютера DNS запрос к DNS-серверу, например:

nslookup winitpro.ru 192.168.13.10

Или выполните DNS запрос с помощью PowerShell:

Resolve-DnsName -Name winitpro.ru -Server 192.168.13.10

Данный запрос вернет клиенту IP адрес запрошенного сервера.

Проверим теперь, что этот запрос отобразился в логе DNS сервера. Для этого, выполним поиск в текстовом логе по IP адресу клиента (192.168.13.200). Можно открыть лог файл в блокноте, а можно выполнить поиск по нему с помощью PowerShell:

get-content "C:\Logs\dc01_dns.log" | Out-String -Stream | Select-String "192.168.1.200"

У автора поста по ссылке можно получить код функции Get-DNSDebugLog:

Get-DNSDebugLog -DNSLog "d:\tmp\DNS\dns_log.csv" | Where {$_.Client -like '*192.168.1.200'} | ft



Так можно выполнить поиск в логе по имени сервиса NTP:

Get-DNSDebugLog -DNSLog "d:\tmp\DNS\dns_log.csv" | Where {$_.Query -like '*ntp*'} | ft

Но можно вспомнить старый добрый LogParser и использовать его:

LogParser.exe -i:TSV -nskiplines:30 -headerRow:off -iSeparator:space -nSep:1 -fixedSep:off -rtp:-1 `

"SELECT field8 AS IP, REVERSEDNS(IP) AS Name, count(IP) as QueryCount FROM 'd:\tmp\DNS\dns_log.csv' WHERE field10 = 'Q' GROUP BY IP ORDER BY QueryCount DESC"

Например тот же запрос что в Powershell теперь выглядит так:

LogParser.exe -i:TSV -nskiplines:30 -headerRow:off -iSeparator:space -nSep:1 -fixedSep:off -rtp:-1 `

"SELECT * FROM 'd:\tmp\DNS\dns_log.csv' WHERE field8 like '%192.168.1.200%'"

Успехов.

No comments:

Post a Comment

А что вы думаете по этому поводу?

Версия на печать

Популярное