Tämä on monen sivun tulostettava näkymä osiosta Paina tulostaaksesi.

Palaa tavalliseen näkymään.

Tietoa tästä dokumentaatiosta

Tämä on virallinen dokumentaatiosivusto DNSServer.DebugLogParser-PowerShell-moduulille, joka muuntaa Windows DNS Serverin debug-lokitiedostot rakenteelliseksi, analysoitavaksi CSV-dataksi.

Moduulista

DNSServer.DebugLogParser syntyi todellisesta tarpeesta: Windows DNS Serverin debug-lokit ovat ihmisen luettavissa olevaa tekstiä, mutta eivät sovellu analytiikkaan tai raportointiin. Tämä moduuli yhdistää nämä maailmat muuntamalla raakaa lokitiedostoa rakenteelliseksi CSV-muodoksi, joka toimii yhdessä yleisten työkalujen kuten Excelin, Power BI:n, SQL-tietokantojen ja SIEM-järjestelmien kanssa.

Keskeiset suunnitteluperiaatteet:

  • Suorituskyky ensin — optimoitu yli 100 Mt tiedostoille käyttäen suoratoistoa ja merkkijonotoimintoja
  • Yhteensopivuus eri versioiden kanssa — tukee PowerShell Desktopia (5.1+) ja Corea (7.x)
  • Tuotantovalmius — sisältää otsikon validoinnin, virheenkäsittelyn ja valinnaisen pakkaamisen
  • Putkistoystävällinen — integroituu luonnollisesti PowerShellin putkistoarkkitehtuuriin

Resurssit

Osallistuminen

Osallistumisesi on tervetullutta. Jos löydät ongelmia, virheitä tai sinulla on parannusehdotuksia, avaa issue tai pull request GitHub-repositoriossa.

1 - Yleiskatsaus

DNSServer.DebugLogParser on PowerShell-moduuli, joka muuntaa Windows DNS -palvelimen debug-lokitiedostot rakenteelliseksi, analysoitavaksi CSV-dataksi turvallisuusanalyysiä, suorituskyvyn seurantaa, vianmääritystä ja vaatimustenmukaisuusraportointia varten.

Mikä on DNS-debug-loki?

DNS-debug-lokin kirjaaminen on Windows DNS -palvelimen ominaisuus, joka tallentaa yksityiskohtaista tietoa DNS-toiminnoista. Kun se on käytössä, DNS-palvelin kirjoittaa lokimerkintöjä tekstitiedostoon (yleensä dns.log) DNS-palvelimen hakemistoon.

Jokainen lokimerkintä sisältää enintään 16 kenttää, kuten:

  • Kyselyn päivämäärä ja kellonaika
  • Käytetty protokolla (UDP tai TCP)
  • Suunta (Lähetetty tai Vastaanotettu)
  • Asiakkaan IP-osoite
  • Kyselytyyppi (A, AAAA, MX, PTR jne.)
  • Kyselty verkkotunnus
  • Vastauskoodi (NOERROR, NXDOMAIN jne.)
  • Kyselyliput ja -asetukset
  • Vastaus-IP-osoite (onnistuneissa kyselyissä)
  • Porttinumeroita ja muita teknisiä tietoja

Miksi jäsentää DNS-debug-lokeja?

DNS-lokit ovat tärkeitä:

Vianmäärityksessä

  • Nimeämisongelmien diagnosointi
  • Virheellisesti konfiguroitujen asiakkaiden tai sovellusten tunnistaminen
  • Ongelmallisten kyselyjen lähteen jäljittäminen
  • Oikean DNS-konfiguraation ja vyöhykkeiden siirtojen varmistaminen

Suorituskyvyn seurannassa

  • Suurien kyselymäärien lähteiden tunnistaminen
  • Kyselytyyppien ja -mallien analysointi DNS-infrastruktuurin optimointiin
  • Liiallisiin kyselyihin johtavien konfiguraatio-ongelmien havaitseminen
  • Vastausaikojen ja onnistumisprosenttien seuranta
  • DNS-palvelimen kuormituksen ja kapasiteetin valvonta

Turvallisuusanalyysissä

  • DNS-tunneloinnin ja tiedon poistoyritysten havaitseminen
  • Haittaohjelmiin ja komentopalvelimiin liittyvien verkkotunnusten tunnistaminen
  • Epäilyttävien kyselymallien seuranta, jotka voivat viitata kompromettoituihin järjestelmiin
  • DNS-vahvistushyökkäysten valvonta
  • Turvallisuuspoikkeamien tutkiminen ja hyökkääjän toiminnan jäljittäminen

Vaatimustenmukaisuuden ja auditoinnin tukena

  • Lainmukaisten kirjaus- ja säilytysvaatimusten täyttäminen
  • Verkkotoiminnan dokumentointi auditointiketjuja varten
  • Raporttien luominen johdolle ja vaatimustenmukaisuuden valvojille
  • Huolellisuuden osoittaminen turvallisuuden valvonnassa

Miten moduuli toimii (korkean tason kuvaus)

Moduuli on optimoitu suurille tiedostoille ja muuntaa DNS-debug-lokit rakenteelliseksi CSV-muodoksi. Se tukee monirivisiä tietueita (esim. PAKETTI-yksityiskohdat ja sisennetyt jatkorivit), jotta tapahtuma- ja diagnostiikkaviestit sekä pakettitiedot pysyvät oikean tietueen yhteydessä.

Keskeiset ominaisuudet:

  • Jäsentää alkuperäiset DNS-debug-lokin kentät ja tuottaa yhtenäisen CSV-rakenteen
  • Tukee useita DNS-palvelinversioita (2012 R2:sta vuoteen 2025)
  • Yhteensopiva sekä PowerShell Desktopin (5.1+) että Core:n (7.x) kanssa
  • Käsittelee minkä tahansa kokoisia tiedostoja (testattu yli 100 Mt tiedostoilla)
  • Varmistaa lokitiedoston otsikot tietojen eheyttä varten
  • Tuottaa valinnaisia tilastollisia yhteenvetoja
  • Tukee eräkäsittelyä PowerShell-putkiston kautta
  • Voi pakata tulostiedostot levytilan säästämiseksi
  • Voi automaattisesti poistaa lähdetiedostot onnistuneen käsittelyn jälkeen
  • Kulttuuritietoinen päivämäärien jäsentäminen kansainvälisille DNS-palvelinlokeille
  • Kulttuuritietoinen päivämäärien muotoilu kansainvälisiä tulostusvaatimuksia varten

Lisensointi ja tuki

Moduuli on julkaistu MIT-lisenssillä. Yhteisötuki on saatavilla GitHub Issues -osion kautta.

2 - Tulostusmuodot

DNSServer.DebugLogParser voi luoda kahta tyyppiä tulostetta:

  • CSV-tiedoston, joka sisältää kaikki jäsennetyt merkinnät
  • Valinnaiset tilastotiedostot päivittäistä yhteenlaskua varten

Katso tämän artikkelin esimerkkitiedostoja nähdäksesi käytännön esimerkkejä kummastakin tulostetyypistä.

CSV-tiedosto

Esimerkkitulostetiedostot:

CSV-tiedosto sisältää kaikki jäsennetyt lokimerkinnät seuraavilla sarakkeilla:

  • DateTime: DNS-kyselyn/vastauksen päivämäärä ja kellonaika
  • ThreadId: Sisäinen DNS-palvelimen säikeen tunniste
  • Context: Toimintaympäristö (esim. Packet, Event, Note, DSPoll, Init, Lookup, Recurse, Remote, Tombstone)
  • PacketId: DNS-paketin tunniste
  • Protocol: UDP tai TCP
  • Direction: Rcv (vastaanotettu/kysely) tai Snd (lähetetty/vastaus)
  • ClientIP: Asiakkaan IP-osoite
  • Xid: Tapahtumatunnus (heksadesimaali)
  • Type: Kysely tai Vastaus
  • Opcode: Standard, Notify, Update tai Unknown
  • FlagsHex: Kysely/vastausliput (heksadesimaali)
  • FlagsChar: Liput purettuna (Authoritative, Truncated, RecursionDesired, RecursionAvailable)
  • ResponseCode: NOERROR, NXDOMAIN, SERVFAIL jne.
  • QuestionType: DNS-tietueen tyyppi (A, AAAA, MX, PTR jne.)
  • QuestionName: Kysytty verkkotunnus
  • Information: Lisätiedot (Event/Note jne.; pakettien yksityiskohtablokeissa TCP/UDP-yksityiskohtarivillä)
  • Details: JSON-data pakettimerkinnöille, jotka sisältävät yksityiskohtablokkeja (muulloin tyhjä)
  • ComputerName: Lähdepalvelimen nimi (aina mukana; tyhjä jos määrittelemätön)

Huom: ComputerName-sarake sisältyy aina kunkin tietueen loppuun, jotta tulosteen rakenne pysyy yhtenäisenä. Tämä helpottaa monipalvelinlokien yhdistämistä.

Tilastotiedostot (valinnainen)

Esimerkkitulostetiedostot:

Kun tilastot luodaan, syntyy kaksi erillistä tiedostoa:

1) Toimintaympäristön tilastot (*_Statistic.csv)

Sarakkeet:

  • Date: Päivämäärä (yyyy-MM-dd)
  • Context: Toimintaympäristön nimi (esim. Packet, Event, Note)
  • Count: Tietueiden määrä
  • ComputerName: Lähdepalvelimen nimi

2) Pakettien tilastot (*_PacketStatistic.csv)

Sarakkeet:

  • Date: Päivämäärä (yyyy-MM-dd)
  • ClientIP: Asiakkaan IP-osoite
  • Protocol: UDP tai TCP
  • Direction: Rcv tai Snd
  • QuestionType: DNS-tietueen tyyppi
  • Count: Tietueiden määrä
  • ComputerName: Lähdepalvelimen nimi

3 - Operatiiviset parhaat käytännöt

Kun käytät DNSServer.DebugLogParseria tuotannossa:

  1. Aikatauluta säännöllinen käsittely

    • Käytä Task Scheduleria muuntamaan uudet lokitiedostot automaattisesti päivittäin tai viikoittain.
  2. Kierrätä lokit asianmukaisesti

    • DNS-debug-lokit voivat kasvaa nopeasti; määritä kierrätys hallittavaan kokoon (esimerkiksi 100 Mt).
  3. Vahvista tuloste

    • Tarkista ensimmäiset muutetut tiedostot ennen täysautomaatiota.
  4. Suunnittele tallennustarpeet

    • Vaikka pakkaus on käytössä, suunnittele tallennustila DNS-volyymin ja säilytysajan mukaan.
  5. Suojaa arkaluonteiset tiedot

    • DNS-lokit voivat sisältää arkaluonteista tietoa; suojaa tulosteet asianmukaisin käyttöoikeuksin.
  6. Dokumentoi työnkulku

    • Kirjaa käsittelyaikataulut, tallennussijainnit ja analyysikäyttö.
  7. Testaa esimerkkitiedostoilla

    • Vahvista parametrit ja tulostemuoto ennen kriittisten lokien käsittelyä.
  8. Valvo virheitä

    • Seuraa vioittuneita lokitiedostoja, käyttöoikeusongelmia tai levytilan puutetta.

4 - Vianmääritys

Yleisiä ongelmia ja ratkaisuja

”Tiedosto ei ole kelvollinen DNS-debug-lokitiedosto”

  • Varmista, että muunnetaan oikea DNS-palvelimen debug-lokitiedosto.
  • Tiedoston pitäisi alkaa tekstillä Message logging started at tai sisältää DNS-kyselymerkintöjä.
  • Jos olet varma, että tiedosto on kelvollinen mutta otsikko poikkeaa, käytä -SkipHeaderValidation-valitsinta.

Tulostiedosto on tyhjä tai keskeneräinen

  • Varmista, että syötetiedosto sisältää kelvollisia lokimerkintöjä.
  • Jotkut lokit voivat sisältää vain otsikkotietoja, jos kyselyjä ei ole tapahtunut.
  • Tarkista, ettei lokitiedosto ole vioittunut ja että se sisältää todellisia kyselytietoja.

Käsittely on hyvin hidasta

  • Varmista, että muistia on riittävästi ja levy ei ole kuormittunut.
  • Harkitse pienempien lokitiedostojen käsittelyä.
  • Käytä -CompressOutput-valitsinta yhdessä ajoitetun käsittelyn kanssa pienempien erien käsittelemiseksi.

”Access denied” -virheet

  • Käynnistä PowerShell sopivin oikeuksin, jotta voit lukea lähdelokitiedostot ja kirjoittaa kohdekansioon.
  • DNS-lokitiedostojen käsittely saattaa vaatia järjestelmänvalvojan oikeudet.

Pakattu tulostiedosto on odotettua suurempi

  • Lokit, joissa on paljon uniikkeja arvoja, pakkaantuvat heikommin; tämä voi olla normaalia.
  • ZIP-pakkaus saavuttaa silti yleensä merkittävän koon pienennyksen.

Tilastotiedosto ei vastaa odotuksia

  • Varmista, että käytät -OutputType Both tai -OutputType Statistic -valitsinta.
  • Tilastot ovat koottuja lukumääriä (päiväryhmittäin), joten arvot ovat summia.

Ongelmatilanteiden raportointi

Jos kohtaat ongelmia, joita ei ole käsitelty tässä:

  1. Varmista, että käytössäsi on moduulin uusin versio.
  2. Tarkista GitHub Issues -osio vastaavien ongelmien varalta.
  3. Kerää diagnostiikkatiedot:
    • PowerShell-versio ($PSVersionTable)
    • Moduulin versio (Get-Module DNSServer.DebugLogParser)
    • Näyte lokitiedostosta (jos mahdollista)
    • Koko virheilmoitus ja pinon jäljitys
  4. Avaa uusi GitHub-issue yksityiskohtineen.

5 - Moduulikomentojen viite

Täältä löydät viitteen moduulin kaikista komennoista. Tämä viite on suunniteltu auttamaan sinua löytämään nopeasti tarvitsemasi komento ja ymmärtämään, miten sitä käytetään tehokkaasti.

Klikkaamalla komentoa siirryt yksityiskohtaiselle sivulle, joka tarjoaa kattavat tiedot komennosta, mukaan lukien sen syntaksi, parametrit, esimerkit sekä mahdolliset lisähuomiot tai vinkit käytöstä.

5.1 - Convert-DNSDebugLogFile

YHTEENVETO

Muuttaa Windows DNS Serverin debug-lokit jäsenneltyyn CSV-muotoon analysointia ja raportointia varten.

SYNTAKSI

__AllParameterSets

Convert-DNSDebugLogFile [-InputFile] <string[]> [[-OutputFile] <string>] [[-Delimiter] <string>]
 [[-ComputerName] <string>] [[-OutputType] <string>] [[-ContextFilter] <string[]>]
 [[-InputCulture] <cultureinfo>] [[-OutputCulture] <cultureinfo>] [-SkipHeaderValidation]
 [-RemoveSourceFile] [-CompressOutput] [-NoDetailsParsing] [-WhatIf] [-Confirm] [<CommonParameters>]

ALIAKSET

Tällä cmdletillä on seuraavat aliakset,

KUVAUS

Muuttaa Windows DNS Serverin debug-lokitiedostot jäsenneltyyn CSV-muotoon, jota voidaan analysoida Excelissä, Power BI:ssä, SQL-tietokannoissa tai SIEM-työkaluissa. Suunniteltu tietoturva-analyysiin, suorituskyvyn valvontaan, vianmääritykseen ja vaatimustenmukaisuusraportointiin.

Cmdlet jäsentää DNS-debug-lokit ja kirjoittaa yhdenmukaisen CSV-tulosteen analysointia varten. CSV-tuloste sisältää 18 saraketta, mukaan lukien Information-sarakkeen tapahtuma-/diagnostiikkatekstille, valinnaisen Details JSON-sarakkeen pakettien yksityiskohtaisille lohkoille sekä aina läsnä olevan ComputerName-sarakkeen (tyhjä, ellei määritetty).

TÄRKEIMMÄT OMINAISUUDET:

  • Suorituskykyinen jäsentäminen suurille tiedostoille (100 Mt+)
  • Muokattava CSV-erotin (oletus: puolipiste)
  • Valinnaiset tilastoyhteenvetotiedot koottujen mittareiden kanssa
  • Kontekstisuodatus (Packet, Event, Note ja muut kontekstit) keskittymiseen tiettyihin lokimerkintätyyppeihin
  • Kulttuuritietoinen päivämäärien jäsentäminen ja muotoilu kansainvälisille palvelimille
  • Putkituet useiden tiedostojen eräkäsittelyyn
  • Valinnainen tulostiedostojen pakkaus (ZIP-muoto)
  • Valinnainen lähdetiedostojen automaattinen poisto käsittelyn jälkeen
  • Otsikkotarkistus tietojen eheyttä varten

TULOSTEEN MUOTO: ComputerName-sarake sisältyy aina jokaisen rivin loppuun. Jos -ComputerName-parametriä ei määritetä, sarake jää tyhjäksi. Tämä takaa yhdenmukaisen tulosteen rakenteen monipalvelinyhdistelmätapauksissa.

SUORITUSKYKY: Optimoitu käyttämällä StreamReader/StreamWriter 64 kt:n puskureilla, merkkijonotoiminnoilla regexin sijaan, manuaalisella CSV-generoinnilla ja tehokkaalla hajautustaulupohjaisella tilastojen keruulla.

YHTEENSOPIVUUS:

  • PowerShell 5.1+ (Desktop ja Core-versiot)
  • Windows Server 2016+
  • DNS Server 2012 R2 - 2025 lokimuodot

ESIMERKIT

ESIMERKKI 1

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log"

Muuttaa DNS-debug-lokin oletusasetuksilla (sekä data- että tilastotiedostot puolipiste-erottimella). Tuloste:

  • C:\Logs\dns.csv
  • C:\Logs\dns_Statistic.csv
  • C:\Logs\dns_PacketStatistic.csv

ESIMERKKI 2

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType CSV

Tuottaa vain datatiedoston ilman tilastoja. Tuloste: C:\Logs\dns.csv

ESIMERKKI 3

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType Statistic

Tuottaa vain tilastotiedostot koottujen mittareiden kanssa. Tuloste:

  • C:\Logs\dns_Statistic.csv
  • C:\Logs\dns_PacketStatistic.csv

ESIMERKKI 4

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputFile "C:\Output\parsed.csv"

Muuttaa lokin mukautettuun tulostussijaintiin. Tuloste: C:\Output\parsed.csv

ESIMERKKI 5

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -Delimiter "," -ComputerName "DNS01" -OutputType Both

Muuttaa pilkulla erotetuksi ja lisää ComputerName-sarakkeen arvolla “DNS01”. Tuloste:

  • C:\Logs\dns.csv
  • C:\Logs\dns_Statistic.csv
  • C:\Logs\dns_PacketStatistic.csv

ESIMERKKI 6

PS C:\> Get-ChildItem "C:\Logs\*.log" | Convert-DNSDebugLogFile -OutputType Both

Käsittelee useita DNS-debug-lokitiedostoja putken kautta erissä. Tuloste: Jokaiselle .log-tiedostolle luodaan .csv ja _statistic.csv -tiedostot

ESIMERKKI 7

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput

Muuttaa ja pakkaa tulosteen ZIP-arkistoon. Tuloste: C:\Logs\dns.zip (sisältäen dns.csv + tilastotiedostot)

ESIMERKKI 8

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -RemoveSourceFile -Verbose

Muuttaa lokin ja poistaa lähdetiedoston onnistuneen käsittelyn jälkeen. Verbose-tuloste vahvistaa tiedoston poiston.

ESIMERKKI 9

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -InputCulture 'de-DE' -OutputCulture 'en-US'

Jäsentää saksalaisen päivämäärämuodon (PP.KK.VVVV) ja tuottaa US-muodon (KK/PP/VVVV). Käytä, kun käsittelet lokitiedostoja eri alueellisten asetusten palvelimilta.

ESIMERKKI 10

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter 'Packet'

Muuttaa vain DNS-kysely/vastauspakettimerkinnät, poissulkien EVENT- ja Note-merkinnät. Käytä keskittyäksesi varsinaiseen DNS-liikenteeseen.

ESIMERKKI 11

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter 'Packet','Event'

Muuttaa sekä DNS-paketit että palvelintapahtumat, poissulkien Note ja muut merkinnät. Käytä analysoidaksesi DNS-liikennettä ja palvelintapahtumia yhdessä.

ESIMERKKI 12

PS C:\> Get-ChildItem "C:\Logs\*.log" | Convert-DNSDebugLogFile -RemoveSourceFile -CompressOutput

Automaattinen lokien arkistointi: käsittelee kaikki lokit, pakkaa tulosteen ja poistaa lähdetiedostot. Ihanteellinen ajoitettuihin lokiputkiin.

ESIMERKKI 13

PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\large-dns.log" -NoDetailsParsing

Käsittelee suuren lokitiedoston ilman yksityiskohtien jäsentämistä maksimaalisen suorituskyvyn saavuttamiseksi. PACKET-yksityiskohtalohkot ohitetaan, Details-sarake jää tyhjäksi. Käytä, kun käsittelet erittäin suuria tiedostoja etkä tarvitse yksityiskohtaista pakettirakenteen analyysiä.

PARAMETRIT

-CompressOutput

Pakkaa luodut CSV-tiedostot ZIP-arkistoksi luomisen jälkeen.

Luo .zip-tiedoston, joka sisältää luodut CSV-tiedostot, ja poistaa purkamatta jäävät CSV:t. ZIP-tiedosto luodaan samaan hakemistoon ja samalla perusnimellä kuin tulostettava CSV.

Hyödyt:

  • Vähentää merkittävästi levytilan käyttöä (CSV-tiedostot pakkaantuvat yleensä yli 90 %)
  • Yksinkertaistaa tiedostojen hallintaa ja arkistointia
  • Sopii pitkäaikaiseen säilytykseen

Esimerkki: Syöte ‘dns.log’ tuottaa ‘dns.csv’, joka pakataan ‘dns.zip’ ja ‘dns.csv’ poistetaan.

Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-ComputerName

Määrittää arvon ComputerName-sarakkeelle CSV-tulosteessa. ComputerName-sarake on aina mukana tulosteessa – jos tätä parametria ei määritetä, sarake jää tyhjäksi.

Käytä tätä, kun yhdistät lokitietoja useilta DNS-palvelimilta lähdepalvelimen tunnistamiseksi yhdistetyissä aineistoissa.

Huom: Tämä EI ole etäkäyttöparametri. Cmdlet käsittelee vain paikallisia tiedostoja.

Type: String
DefaultValue: ''
SupportsWildcards: false
Aliases:
- Server
- DNSServer
- HostName
ParameterSets:
- Name: (All)
  Position: 3
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Confirm

Kysyy vahvistuksen ennen cmdletin suorittamista.

Kun määritetty, pyytää vahvistuksen ennen:

  • Jokaisen DNS-debug-lokitiedoston käsittelyä
  • Lähdetiedostojen poistamista (kun -RemoveSourceFile on määritetty)
  • Olemassa olevien tulostiedostojen ylikirjoittamista

Hyödyllinen vuorovaikutteisessa käsittelyssä, kun haluat hallita, mitkä tiedostot käsitellään.

Type: SwitchParameter
DefaultValue: ''
SupportsWildcards: false
Aliases:
- cf
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-ContextFilter

Suodattaa, mitkä lokimerkintätyypit sisällytetään tulosteeseen. Hyväksyy yhden tai useamman arvon.

DNS-debug-lokit sisältävät eri kontekstit:

  • PACKET: DNS-kysely- ja vastauspakettitiedot (päätiedot)
  • EVENT: DNS-palvelimen tapahtumat (esim. “DNS-palvelin on käynnistynyt.”)
  • Note: Diagnostiikkamuistiinpanot ja varoitukset (esim. soketti-virheet, sisäiset tilat)
  • DSPoll, Init, Lookup, Recurse, Remote, Tombstone: Lisäkontekstit

Kelvolliset arvot:

  • ‘All’: Sisällytä kaikki kontekstit (oletus)
  • ‘Packet’: Sisällytä vain PACKET-merkinnät (DNS-kyselyt/vastaukset)
  • ‘Event’: Sisällytä vain EVENT-merkinnät (palvelintapahtumat)
  • ‘Note’: Sisällytä vain Note-merkinnät (diagnostiikkatiedot)
  • Mikä tahansa yhdistelmä: Määritä useita arvoja sisällyttääksesi tietyt kontekstit

Oletus: All

Esimerkkejä:

  • ‘Packet’ suodattaa vain DNS-liikenteen
  • ‘Packet’,‘Event’ sisältää sekä DNS-liikenteen että palvelintapahtumat
  • ‘Note’,‘Event’ sisältää diagnostiikkamuistiinpanot ja palvelintapahtumat

Huom: Kun suodatetaan ‘Event’ tai ‘Note’, vain DateTime, ThreadId, Context ja Information -sarakkeet sisältävät tietoa. Muut sarakkeet (Protocol, ClientIP jne.) jäävät tyhjiksi.

Type: String[]
DefaultValue: "@('All')"
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: 5
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-Delimiter

Määrittää CSV-tulosteen erotinmerkin.

Oletus: puolipiste (;)

Yleisiä vaihtoehtoja: pilkku (,), sarkain (`t), putki (|)

Käytä puolipistettä alueilla, joissa pilkku on desimaalierotin (Eurooppa). Käytä pilkkua standardeissa CSV-työkaluissa ja tietokannoissa, jotka odottavat pilkuilla erotettuja arvoja.

Type: String
DefaultValue: ;
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: 2
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-InputCulture

Määrittää kulttuurin/alueen, jota käytetään päivämäärä- ja aika-arvojen jäsentämiseen DNS-debug-lokissa.

DNS Serverin debug-lokit käyttävät päivämäärämuotoa palvelimen Windows-alueen asetusten mukaan, jossa loki on luotu. Käytä tätä parametria, kun käsittelet lokitiedostoja eri alueellisten asetusten palvelimilta.

Oletus: Nykyinen kulttuuri

Yleisiä esimerkkejä:

  • ‘de-DE’ tai ‘de-AT’: saksalainen muoto (PP.KK.VVVV tai PP/KK/VVVV)
  • ’en-US’: US-muoto (KK/PP/VVVV AM/PM)
  • ’en-GB’: UK-muoto (PP/KK/VVVV 24h)
  • ‘sv-SE’: ruotsalainen/ISO-muoto (VVVV-KK-PP)
Type: CultureInfo
DefaultValue: '[System.Globalization.CultureInfo]::CurrentCulture'
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: 6
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-InputFile

Määrittää polun jäsennettävään DNS-debug-lokitiedostoon. Tukee taulukoita useiden tiedostojen käsittelyyn.

Hyväksyy putkisyötteen Get-ChildItem-komennosta tai muista tiedostoja tuottavista cmdleteistä.

Type: String[]
DefaultValue: ''
SupportsWildcards: false
Aliases:
- FullName
- FilePath
- InputPath
- File
- Path
ParameterSets:
- Name: (All)
  Position: 0
  IsRequired: true
  ValueFromPipeline: true
  ValueFromPipelineByPropertyName: true
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-NoDetailsParsing

Ohittaa PACKET-yksityiskohtalohkojen jäsentämisen jäsenneltyyn JSON-muotoon.

Kun määritetty, PACKET-tietueet, joissa on yksityiskohtalohkoja, sisältävät TCP/UDP-tietorivin Information-sarakkeessa, mutta Details-sarake jää tyhjäksi. Tämä parantaa merkittävästi suorituskykyä suuria lokitiedostoja käsiteltäessä, kun yksityiskohtainen pakettirakenteen analyysi ei ole tarpeen.

Käytä tätä, kun:

  • Käsittelet erittäin suuria lokitiedostoja (100 Mt+) ja tarvitset vain peruskyselytiedot
  • Yksityiskohtainen rakenne (viestilippuja, DNS-osioita) ei ole tarpeen analyysissa
  • Suorituskyvyn maksimointi on tärkeämpää kuin täydellisyys

Suorituskykyvaikutus: voi parantaa käsittelynopeutta 30-50 % lokitiedostoissa, joissa on paljon PACKET-yksityiskohtalohkoja.

Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-OutputCulture

Määrittää kulttuurin/alueen, jota käytetään päivämäärä- ja aika-arvojen muotoiluun tulostettavissa CSV-tiedostoissa.

Ohjaa, miten DateTime-arvot kirjoitetaan CSV:hen. Käytä tätä, kun CSV-tiedostoja kulutetaan sovelluksissa tai järjestelmissä, joilla on tietyt alueelliset asetukset.

Oletus: Nykyinen kulttuuri

Yleisiä esimerkkejä:

  • ’en-US’: US-muoto (KK/PP/VVVV)
  • ‘de-DE’: saksalainen muoto (PP.KK.VVVV)
  • ‘sv-SE’ tai InvariantCulture: ISO-muoto (VVVV-KK-PP) maksimaaliseen yhteensopivuuteen
Type: CultureInfo
DefaultValue: '[System.Globalization.CultureInfo]::CurrentCulture'
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: 7
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-OutputFile

Määrittää polun tulostettavalle CSV-tiedostolle. Jos ei määritetä, käytetään syötetiedoston nimeä .csv-päätteellä samassa hakemistossa kuin syöte.

Tärkeää: Tämä on tiedostopolku, ei hakemisto. Jos haluat käyttää syötetiedoston hakemistoa ja mukautettua nimeä, määritä koko polku tiedostonimen kanssa.

Type: String
DefaultValue: ''
SupportsWildcards: false
Aliases:
- Output
- Destination
- OutFile
- OutputPath
ParameterSets:
- Name: (All)
  Position: 1
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-OutputType

Määrittää tuotettavan tulosteen tyypin.

Kelvolliset arvot:

  • ‘CSV’: Tuottaa vain datatiedoston kaikilla jäsennetyillä lokimerkinnöillä
  • ‘Statistic’: Tuottaa vain tilastotiedostot koottujen mittareiden kanssa
  • ‘Both’: Tuottaa sekä data- että tilastotiedostot (oletus)

Oletus: Both

Kun tilastoja tuotetaan, luodaan kaksi erillistä tiedostoa:

  • ‘_Statistic.csv’: Yhteenvedot kontekstityypeittäin päivittäin (Date, Context, Count, ComputerName)
  • ‘_PacketStatistic.csv’: Yksityiskohtaiset PACKET-laskelmat päivittäin asiakas-IP:n, protokollan, suunnan ja kyselytyypin mukaan (Date, ClientIP, Protocol, Direction, QuestionType, Count, ComputerName)
Type: String
DefaultValue: Both
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: 4
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-RemoveSourceFile

Poistaa lähde-DNS-debug-lokitiedoston onnistuneen käsittelyn jälkeen.

Käytä tätä automaattisissa lokiputkissa tai levytilan hallinnassa. Lähdetiedosto poistetaan vain, jos käsittely onnistuu ja kaikki tulostiedostot luodaan.

Turvallisuus: Ei voi käyttää yhdessä -SkipHeaderValidation-parametrin kanssa vahingossa tapahtuvan virheellisten tiedostojen poistamisen estämiseksi.

Varoitus: Lähdetiedostot poistetaan pysyvästi. Varmista, että tulostiedostot ovat kelvollisia ennen tämän vaihtoehdon käyttöä.

Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-SkipHeaderValidation

Ohittaa DNS-debug-lokin otsikkotarkistuksen.

Oletuksena cmdlet varmistaa, että syötetiedostoissa on kelvollinen DNS Server debug -lokin otsikko. Käytä tätä kytkintä käsitelläksesi tiedostoja ilman tarkistusta, mikä voi olla hyödyllistä:

  • Muokatuissa tai mukautetuissa lokimuodoissa
  • Vianmäärityksessä otsikkotarkistuksen ongelmien kanssa
  • Ei-standardeissa tai esikäsitellyissä lokeissa

Varoitus: Voi aiheuttaa käsittelyvirheitä, jos tiedosto ei ole kelvollinen DNS-loki.

Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

-WhatIf

Näyttää, mitä tapahtuisi, jos cmdlet suoritettaisiin. Cmdletiä ei suoriteta.

Kun määritetty, näyttää yksityiskohtaiset tiedot toiminnoista, jotka suoritettaisiin ilman, että niitä oikeasti suoritetaan. Hyödyllinen:

  • Ennakkotarkastukseen, mitkä tiedostot käsiteltäisiin
  • Tulostiedostopolkujen tarkistukseen ennen käsittelyä
  • Skriptien testaamiseen ennen tuotantokäyttöä
Type: SwitchParameter
DefaultValue: ''
SupportsWildcards: false
Aliases:
- wi
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''

CommonParameters

Tämä cmdlet tukee yleisiä parametreja: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction ja -WarningVariable. Lisätietoja on kohdassa about_CommonParameters.

SYÖTTEET

System.String[]

HUOMAUTUKSET

Versio : 1.7.0.0
Tekijä : Andi Bellstedt, Copilot
Päivämäärä : 2026-01-25
Avainsanat : Microsoft Windows Server, DNSServer, DNS, DebugLog, LogParser

LIITTYVÄT LINKIT

6 - Käyttöesimerkit

Täältä löydät käytännön esimerkkejä siitä, miten moduulia voi käyttää oikeissa tilanteissa. Nämä esimerkit on suunniteltu auttamaan sinua ymmärtämään, miten moduulin toiminnallisuutta sovelletaan.

Nämä ovat esimerkkejä, joissa on hieman enemmän syvyyttä ja kontekstia. Jos haluat vain moduulin komentojen käytön, katso komentoviite.

6.1 - Ajoitetun tehtävän esimerkki

Tämä esimerkki näyttää, miten luodaan Windowsin ajoitettu tehtävä, joka suorittaa PowerShell-skriptin DNS-vianmäärityslokien käsittelemiseksi päivittäin.

Tämä skripti luo Windowsin ajoitetun tehtävän, joka suoritetaan päivittäin klo 2:00. Se tuo moduulin ja käsittelee kaikki lokitiedostot kansiossa, jossa skripti suoritetaan (tässä esimerkissä “C:\Administration\Logs\DNS”). Prosessi pakkaa tuloksen ZIP-tiedostoiksi ja poistaa alkuperäiset tiedostot siisteyden ylläpitämiseksi.

$actionParams = @{
    Execute = "powershell.exe"
    Argument = '-ExecutionPolicy RemoteSigned -Command "Import-Module DNSServer.DebugLogParser; Get-ChildItem .\*.log | Sort-Object lastwritetime, Name -Descending | Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME -Delimiter \";\" -OutputType Both -ContextFilter Packet -OutputCulture sv-SE -CompressOutput"'
    WorkingDirectory = "C:\Administration\Logs\DNS"
}
$Action = New-ScheduledTaskAction @actionParams

$Trigger = New-ScheduledTaskTrigger -Daily -At "2:00AM"

Register-ScheduledTask -TaskName "Process DNS Logs" -Action $Action -Trigger $Trigger -Description "Convert DNS debug logs to CSV daily"

6.2 - Käytännön käyttö Domain-ympäristössä (GPO-ohjattu keräys ja muunnos)

Tämä esimerkki havainnollistaa, miten toteuttaa GPO-ohjattu työnkulku DNS-debug-lokien keräämiseksi ja muuntamiseksi toimialueen ohjaimilla.

Tässä dokumentissa esitellään käytännön, kokonaisvaltainen esimerkki DNSServer.DebugLogParserin suorittamisesta Active Directory -toimialueympäristössä, keskittyen Windows DNS Serverin debug-lokien muuntamiseen toimialueen ohjaimilla.

Tämän esimerkin mukana tulee ZIP-arkisto, joka sisältää politiikan artefaktit työnkulun toteuttamiseksi.
Merkittävimmät artefaktit ovat varmuuskopion manifesti, GPO-raportti, Files.xml, Set-DNSServerDebugLogging.ps1 ja ScheduledTasks.xml.

Tilannekuvaus

  • Useat toimialueen ohjaimet (DC:t) isännöivät DNS Server -roolia.
  • DNS-debug-lokitus on otettu käyttöön ja konfiguroitu johdonmukaisesti jokaisella DC:llä ajastetun tehtävän avulla (lokitiedostot tallennetaan polkuun C:\Administration\Logs\DNSServer).
  • Keskitetysti hallittu prosessi muuntaa lokit CSV-muotoon seuraaviin käyttötarkoituksiin:
    • tietoturva-analytiikka
    • operatiivinen raportointi
    • vianmääritys
    • vaatimustenmukaisuus ja säilytys

Tavoitellut tulokset

  • Johdonmukaiset muunnosasetukset kaikilla DC:illä
  • Ennustettava tulostiedostojen sijainti ja nimeäminen
  • Valinnainen pakkaus tallennustilan säästämiseksi
  • Valinnaiset tilastotulosteet nopeisiin päivittäisiin yhteenvedonäkymiin
  • Minimissään isäntäkoneen riski, selkeät uudelleensuoritus- ja siivouskäytännöt

Ehdotettu arkkitehtuuri

Keräysmalli: paikallinen muunnos + keskitetty haku

  1. Jokainen DC kirjoittaa DNS-debug-lokit levyelle rollover-ominaisuus päällä.
  2. Jokainen DC muuntaa kiertävät *.log-tiedostot data-CSV:ksi ja tilastojen CSV:ksi, minkä jälkeen pakkaa tulokset *.zip-muotoon ajastetusti (Task Scheduler).
  3. Tulosteet kirjoitetaan samalle kansiolle lokien viereen, jotta putki pysyy yksinkertaisena.
  4. Keskitetty palvelin kerää *.zip-tulosteet esimerkiksi tiedostojakojen kautta, ajastetulla kopioinnilla, SIEM-välityksellä tai agenttipohjaisella kerääjällä.

Tämä malli minimoi suurten raakalukujen lukemisen verkon yli ja pitää jäsentämisen lähellä dataa.

GPO-työnkulku

Työnkulku toteutetaan Group Policyllä (tietokoneen konfiguraatio) varmistaakseen johdonmukaiset asetukset kaikilla toimialueen ohjaimilla.

Tämän repositorion mukana tuleva viiteimplementaatio (GPO-raportti):

  • Arkisto/raportin nimi: T0-C-Analytics-DNSDebugLogging
  • Varmuuskopion tunniste: {2B6F16BC-0E7C-4787-83D7-2854FED882EE}
  • GPO-linkin kohde: corp.company.com/Domain Controllers
  • Kohdesuodatin (käytetään sekä tiedostojen jakeluun että ajastettuihin tehtäviin): soveltuu vain, jos C:\Windows\System32\dns.exe on olemassa

1) Esivaatimukset (kansiot + moduuli)

Toimitettu varmuuskopio olettaa, että seuraavat kansiot ovat jo olemassa. Lisää erilliset GPP-kohteet, jos haluat, että käyttöönotto luo ne automaattisesti:

  • C:\Administration\Scripts
  • C:\Administration\Logs\DNSServer

Varmuuskopio olettaa myös, että Convert-DNSDebugLogFile on jo saatavilla DC:illä. Muunnostehtävä käynnistää Windows PowerShell 5.1:n -NoProfile-asetuksella eikä tuo moduulia eksplisiittisesti, joten moduulin on oltava asennettuna konekohtaisessa Windows PowerShell -moduulipolussa, joka on näkyvissä LocalSystem-tilille. Suositellut tavat:

  • Asenna DNSServer.DebugLogParser DC:ille, esimerkiksi PowerShell Gallerystä (jos politiikka sallii).
  • Ota moduuli käyttöön sisäisen repositorion tai tiedostojakopalvelun kautta, jotta se löytyy $env:PSModulePath-polusta.
  • Lisää eksplisiittinen Import-Module tehtävän toimintaan, jos haluat varman latauskäytöksen.

2) Debug-lokituksen konfigurointiskriptin käyttöönotto (GPP Files)

GPO ottaa käyttöön skriptin:

  • Lähde (SYSVOLin kautta GPP): %GptPath%\Preferences\Files\Set-DNSServerDebugLogging.ps1
  • Kohde (jokaisella DC:llä): C:\Administration\Scripts\Set-DNSServerDebugLogging.ps1

Tämä on toteutettu GPP Files -asetuskohteena Files.xml-tiedostossa.

3) Ajastettu tehtävä: DNS-debug-lokituksen konfigurointi

GPO luo ajastetun tehtävän nimeltä Set-DNSServerDebugLogging.

  • Käyttöoikeus kontekstissa toimitetussa varmuuskopiossa: SYSTEM kirjautumistyyppi S4U
  • Laukaisin toimitetussa varmuuskopiossa: päivittäin (aloitusraja 2025-03-01T00:00:01)
  • Toiminto ScheduledTasks.xml-tiedostossa:
    • powershell.exe -ExecutionPolicy RemoteSigned -command " & { C:\Administration\Scripts\Set-DNSServerDebugLogging.ps1 }"
    • Työhakemisto: C:\Administration\Scripts

Linkitetty Set-DNSServerDebugLogging.ps1-skripti konfiguroi DNS-debug-lokituksen Get-DnsServerDiagnostics / Set-DnsServerDiagnostics -komentojen avulla ja erityisesti:

  • Ottaa käyttöön tiedostoon lokituksen + rolloverin
  • Kirjoittaa tiedostoon: C:\Administration\Logs\DNSServer\DnsDebugLog_<COMPUTERNAME>.<Domain>_.log
  • Käyttää 10 Mt:n rollover-kokoa per tiedosto
  • Tallentaa pääasiassa kyselyihin liittyvää toimintaa (kyselyt + ilmoitukset + päivitykset + kyselytapahtumat) ja sulkee pois koko pakettien lokituksen

4) Ajastettu tehtävä: kiertävien debug-lokien muuntaminen pakatuiksi CSV-tiedostoiksi

GPO luo ajastetun tehtävän nimeltä Convert-DNSDebugLogs.

  • Käyttöoikeus kontekstissa toimitetussa varmuuskopiossa: SYSTEM kirjautumistyyppi InteractiveToken
  • Laukaisin toimitetussa varmuuskopiossa: päivittäin (aloitusraja 2026-01-01T00:30:00)
  • Työhakemisto: C:\Administration\Logs\DNSServer
  • Toiminto ScheduledTasks.xml-tiedostossa (muotoiltu luettavuuden vuoksi):
Get-ChildItem .\*.log |
  Sort-Object lastwritetime, Name -Descending |
  Select-Object -Skip 1 |
  Convert-DNSDebugLogFile `
    -ComputerName $env:COMPUTERNAME `
    -Delimiter ';' `
    -OutputType Both `
    -ContextFilter Packet `
    -OutputCulture sv-SE `
    -CompressOutput

Suunnittelumuistiinpanot:

  • Select-Object -Skip 1 jättää tarkoituksella käsittelemättä uusimman (aktiivisen) lokitiedoston.
  • Tämä tarkoittaa, että nykyiset tiedot viedään vain rolloverin jälkeen; matalan volyymin DC:illä aktiivinen loki voi jäädä käsittelemättä yli päivän.
  • Koska Convert-DNSDebugLogFile oletuksena asettaa -OutputFile arvoksi ”sama kansio, sama nimi, .csv”, tulosteet sijoittuvat *.log-tiedostojen viereen.
  • -CompressOutput-asetuksella jokainen käsitelty loki tuottaa *.zip-tiedoston ja väliaikaiset CSV:t poistetaan.
  • Ellet arkistoi tai poista käsiteltyjä *.log-tiedostoja, myöhemmät ajot käsittelevät kaikki ei-aktiiviset lokit uudelleen.
  • Tehtävä heittää virheen, jos $Error.Count -gt 0, merkiksi epäonnistuneesta suorituksesta.

5) Keskitetty keräys

Vaihtoehdot (valitse yksi):

  • Tiedostojakojen keräys: DC kirjoittaa (tai kopioi) C:\Administration\Logs\DNSServer\*.zip polkuun \\fileserver\share\dns\$env:COMPUTERNAME\... (myönnä jakamisoikeudet ja NTFS-oikeudet DC:n tietokoneen tileille tai Domain Controllers -ryhmälle, jos tehtävä ajetaan SYSTEM-tilillä)
  • Haku-malli: keskitetty työ lukee \\dc\C$\Administration\Logs\DNSServer\*.zip (vähiten suositeltu; vaatii hallintajakamiset)
  • Agentin välitys: SIEM / lokiputki, joka lähettää *.zip-tulosteet

Käyttöönottokäytännöt

  • Vähimmän oikeuden periaate: tehtävät ajetaan SYSTEM-tilillä; varmista, että paikalliset kansiot ovat kirjoitettavissa ja että UNC-kohteet myöntävät pääsyn tietokoneen tilille, jos niitä käytetään.
  • Allekirjoituspolitiikka: molemmat tehtävät käyttävät -ExecutionPolicy RemoteSigned; allekirjoita tai poista estot käyttöön otetusta skriptistä ja moduulista politiikkasi mukaisesti.
  • Levyn käyttö: -CompressOutput auttaa merkittävästi, mutta tämä työnkulku ei poista lähdelokeja; suunnittele säilytys ja siivous.
  • Uudelleenkäsittelykäytös: ellet arkistoi tai poista käsiteltyjä lokitiedostoja, muunnostehtävä käsittelee jokaisen ei-aktiivisen *.log-tiedoston uudelleen myöhemmillä ajoilla. Tämä on yksinkertaista ja luotettavaa, mutta voi ylikirjoittaa tulosteita ja aiheuttaa kaksoiskirjauksia, jos kerääjä ei poista duplikaatteja.
  • Usean DC:n yhdistäminen: -ComputerName $env:COMPUTERNAME sisältyy, jotta yhdistetyistä aineistoista säilyy jäljitettävyys.
  • Validointi: otsikkotarkistus on edelleen käytössä, koska tehtävä ei käytä -SkipHeaderValidation (suositeltavaa).

Vahvista ja mukauta (ZIP-arkiston avulla)

Käytä ZIP-arkistoa viiteimplementaationa ja sovita seuraavat asiat ympäristöösi:

  • Kohdealue: mitkä DC:t / OU:t saavat politiikan
  • Suoritusidentiteetti: varmista, että molemmat ajastetut tehtävät käyttävät tarkoitettua kirjautumistyyppiä (S4U vs InteractiveToken) tai yhdenmukaista ne standardiisi
  • Kansioiden luonti: päätä, luodaanko C:\Administration\Scripts ja C:\Administration\Logs\DNSServer muualla valmiiksi vai luodaanko ne lisä-GPP-kohteilla
  • Polut: varmista, että C:\Administration\Scripts ja C:\Administration\Logs\DNSServer vastaavat käytäntöjäsi
  • Säilytys: päätä, säilytetäänkö raakalokitus ja kuinka pitkään (erityisesti jos otat käyttöön siivousvaihtoehdot)
  • Keräys: varmista, minne CSV/ZIP-tulosteet kirjoitetaan ja miten ne kerätään keskitetysti

Jos haluat vahvistaa tarkan GPO-konfiguraation ilman tuontia, tämän repositorion auktoritatiiviset lähteet ovat:

6.3 - SQL Server -tietokannan turvallisuusanalyysityönkulku

Muunna DNS-vianmäärityslokit CSV-muotoon DNSServer.DebugLogParserilla, tuo tulos SQL Serveriin ja suorita yksinkertainen havaitsemiskysely epäilyttävälle TXT-tietueiden toiminnalle.

Tässä esimerkissä näytetään käytännön työnkulku turvallisuusanalytiikkaan: jäsennä DNS-vianmääritysloki Convert-DNSDebugLogFile-komennolla, tuo luotu CSV SQL Serveriin ja suorita kysely, joka korostaa epätavallisen suuria TXT-tietueiden hakumääriä.

Parhaan yhteensopivuuden varmistamiseksi tämä esimerkki kirjoittaa aikaleimat ISO-tyyppisessä muodossa käyttämällä -OutputCulture 'sv-SE'.

Tarvittavat moduulit

Tämä esimerkki käyttää seuraavia PowerShell-moduuleja:

  • DNSServer.DebugLogParser
  • SqlServer

Asenna ne tarvittaessa:

Install-Module -Name DNSServer.DebugLogParser -Scope CurrentUser
Install-Module -Name SqlServer -Scope CurrentUser

Tilanne

Käytä tätä työnkulkua, kun haluat siirtää jäsenneltyjä DNS-vianmäärityslokitietoja SQL Serveriin, jotta voit:

  • hakea suuria tietoaineistoja tehokkaasti
  • rakentaa toistettavia havaitsemiskyselyjä
  • korreloida toimintaa useiden DNS-palvelimien välillä
  • säilyttää normalisoidut tiedot myöhempää tutkimusta varten

Muunnosvaiheen tulos

Convert-DNSDebugLogFile ei kirjoita suoraan SQL Serveriin. Se luo ensin CSV-tiedoston. Tämä CSV-tiedosto on tietoaineisto, joka tuodaan tietokantaan.

Tässä esimerkissä:

  • syöttöloki: C:\Administration\Logs\DNS\dns.log
  • luotu CSV: C:\Administration\Logs\DNS\dns.csv
  • kohdetaulu: dbo.DNSQueries

Luo kohdetietokanta

Suorita seuraava lause SQL Serverissä kerran luodaksesi kohdetietokannan.

IF OBJECT_ID('dbo.DNSQueries', 'U') IS NULL
BEGIN
    CREATE TABLE dbo.DNSQueries (
        DateTime      datetime2(0)   NOT NULL,
        ThreadId      int            NULL,
        Context       nvarchar(20)   NULL,
        PacketId      int            NULL,
        Protocol      nvarchar(10)   NULL,
        Direction     nvarchar(10)   NULL,
        ClientIP      nvarchar(64)   NULL,
        Xid           nvarchar(16)   NULL,
        Type          nvarchar(16)   NULL,
        Opcode        nvarchar(16)   NULL,
        FlagsHex      nvarchar(16)   NULL,
        FlagsChar     nvarchar(16)   NULL,
        ResponseCode  nvarchar(32)   NULL,
        QuestionType  nvarchar(32)   NULL,
        QuestionName  nvarchar(512)  NULL,
        Information   nvarchar(max)  NULL,
        Details       nvarchar(max)  NULL,
        ComputerName  nvarchar(256)  NULL
    );
END;

Muunna loki ja tuo CSV

Seuraava PowerShell-esimerkki suorittaa koko työnkulun:

  1. tuo tarvittavat moduulit
  2. muuntaa DNS-vianmäärityslokin CSV-muotoon
  3. lataa luodun CSV:n
  4. tuo rivit eräajona SQL Serveriin
# Requires -Modules DNSServer.DebugLogParser, SqlServer

Import-Module -Name DNSServer.DebugLogParser -ErrorAction Stop
Import-Module -Name SqlServer -ErrorAction Stop

$logPath = 'C:\Administration\Logs\DNS\dns.log'
$csvPath = 'C:\Administration\Logs\DNS\dns.csv'
$serverInstance = 'SQLServer'
$databaseName = 'DNSLogs'
$delimiter = ';'

$createTableSql = @'
IF OBJECT_ID('dbo.DNSQueries', 'U') IS NULL
BEGIN
    CREATE TABLE dbo.DNSQueries (
        DateTime      datetime2(0)   NOT NULL,
        ThreadId      int            NULL,
        Context       nvarchar(20)   NULL,
        PacketId      int            NULL,
        Protocol      nvarchar(10)   NULL,
        Direction     nvarchar(10)   NULL,
        ClientIP      nvarchar(64)   NULL,
        Xid           nvarchar(16)   NULL,
        Type          nvarchar(16)   NULL,
        Opcode        nvarchar(16)   NULL,
        FlagsHex      nvarchar(16)   NULL,
        FlagsChar     nvarchar(16)   NULL,
        ResponseCode  nvarchar(32)   NULL,
        QuestionType  nvarchar(32)   NULL,
        QuestionName  nvarchar(512)  NULL,
        Information   nvarchar(max)  NULL,
        Details       nvarchar(max)  NULL,
        ComputerName  nvarchar(256)  NULL
    );
END
'@

Convert-DNSDebugLogFile `
    -InputFile $logPath `
    -ComputerName 'DNS01' `
    -OutputType CSV `
    -OutputFile $csvPath `
    -Delimiter $delimiter `
    -OutputCulture 'sv-SE'

$rows = Import-Csv -Path $csvPath -Delimiter $delimiter

if (-not $rows) {
    throw "The generated CSV file '$csvPath' does not contain any rows."
}

$dataTable = [System.Data.DataTable]::new()
foreach ($columnName in $rows[0].PSObject.Properties.Name) {
    $null = $dataTable.Columns.Add($columnName, [string])
}

foreach ($row in $rows) {
    $dataRow = $dataTable.NewRow()
    foreach ($column in $dataTable.Columns) {
        $columnName = $column.ColumnName
        $dataRow[$columnName] = $row.$columnName
    }

    $null = $dataTable.Rows.Add($dataRow)
}

$connectionString = "Server=$serverInstance;Database=$databaseName;Integrated Security=True"
$connection = [System.Data.SqlClient.SqlConnection]::new($connectionString)

try {
    $connection.Open()

    $command = $connection.CreateCommand()
    $command.CommandText = $createTableSql
    $null = $command.ExecuteNonQuery()

    $bulkCopy = [System.Data.SqlClient.SqlBulkCopy]::new($connection)
    $bulkCopy.DestinationTableName = 'dbo.DNSQueries'

    foreach ($column in $dataTable.Columns) {
        $null = $bulkCopy.ColumnMappings.Add($column.ColumnName, $column.ColumnName)
    }

    $bulkCopy.WriteToServer($dataTable)
}
finally {
    $connection.Dispose()
}

Kysely epäilyttävälle TXT-tietueiden toiminnalle

Kun tiedot ovat SQL Serverissä, voit hakea asiakkaita, jotka tekevät epätavallisen suuren määrän TXT-tietuehakukyselyjä.

SELECT
    ComputerName,
    ClientIP,
    QuestionName,
    COUNT(*) AS QueryCount
FROM dbo.DNSQueries
WHERE QuestionType = 'TXT'
GROUP BY
    ComputerName,
    ClientIP,
    QuestionName
HAVING COUNT(*) > 100
ORDER BY QueryCount DESC;

Jos haluat suorittaa kyselyn PowerShellistä, käytä Invoke-Sqlcmd-komentoa SqlServer-moduulista:

$query = @'
SELECT
    ComputerName,
    ClientIP,
    QuestionName,
    COUNT(*) AS QueryCount
FROM dbo.DNSQueries
WHERE QuestionType = 'TXT'
GROUP BY
    ComputerName,
    ClientIP,
    QuestionName
HAVING COUNT(*) > 100
ORDER BY QueryCount DESC;
'@

Invoke-Sqlcmd `
    -ServerInstance 'SQLServer' `
    -Database 'DNSLogs' `
    -Query $query

Miksi TXT-kyselyt ovat kiinnostavia

TXT-tietueiden hakujen suuri määrä voi olla tarkastelun arvoista, koska se voi viitata:

  • DNS-tunnelointiin
  • tietojen ulosvuotoon DNS:n kautta
  • TXT-tietueiden väärinkäyttöön haittaohjelmien tai työkalujen toimesta
  • epätavallisen meluisiin tai virheellisesti konfiguroituihin asiakkaisiin

Tämä kysely on vain lähtökohta. Tuotantoympäristössä sinun tulisi säätää kynnysarvoa ja lisätä suodattimia, jotka sopivat omaan ympäristöösi.

Käyttöhuomautuksia

  • Import-Csv lukee koko tiedoston muistiin. Erittäin suurten lokitiedostojen kanssa kannattaa harkita virtaavaa käsittelyä täyden DataTablen rakentamisen sijaan.
  • Säilytä -ComputerName muunnosvaiheessa, jotta tietueet voidaan edelleen yhdistää lähteeseen keskitetyn tuonnin jälkeen.
  • Käytä yhtenäistä erotinta ja kulttuuria vienti- ja tuontivaiheissa.
  • Varmista säilytys, indeksointi ja käyttöoikeudet SQL Serverissä ennen tämän työnkulun käyttämistä pitkäaikaiseen tallennukseen.