Главная

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

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