DNS Abfragen auf Windows Server 2016 filtern

DnsServerQueryResolutionPolicy Titelbild

Mit Windows Server 2016 wurde ein sehr praktisches neues Feature eingebaut, welches den Windows DNS-Server erweitert. Mit DnsServerQueryResolutionPolicy lassen sich DNS-Abfragen basierend auf der Quell-IP-Adresse filtern. Das kann zum Beispiel sinnvoll sein, wenn für einzelne Subnetze unterschiedliche DNS-Antworten notwendig sind oder wie in unserem Fall beim schrittweisen Rückbau eines Proxy-Servers.

Die Richtlinien werden nicht automatisch zwischen Domain Controllern repliziert. Man muss sie also auf allen DNS-Servern anlegen.

DNS-Richtlinie mit DnsServerQueryResolutionPolicy anlegen

In diesem Beispiel soll für einzelne Subnetze die Auflösung des „wpad“ DNS-Eintrags blockiert werden. Dazu legt man zunächst das gewünschte Subnetz an. Das geschieht ganz einfach in PowerShell.

Add-DnsServerClientSubnet -Name "ClientSubnetz" -IPv4Subnet 192.168.123.0/24 -PassThru

Add-DnsServerClientSubnet

Anschließend kann man das Subnetz in der Richtlinie zum Blockieren verwenden.

Add-DnsServerQueryResolutionPolicy -Name "Block_WPAD_ClientSubnetz" -Action IGNORE -ClientSubnet "EQ,ClientSubnetz" -Fqdn "EQ,wpad.domain.local" -PassThru

Add-DnsServerQueryResolutionPolicy

Erläuterung zum Befehl:

  • -Action: IGNORE blockiert die treffenden Abfragen, ALLOW erlaubt nur treffende Abfragen auf das definierte Ziel und blockiert alle anderen Quellen.
  • -ClientSubnet: Logischer Operator (EQ = equals, NE = not equals, OR = oder) verbunden mit dem angelegten Subnetz.
  • -Fqdn: Logischer Operator verbunden mit dem DNS-Eintrag.

Vorhandene Richtlinien anzeigen

Die vorhanden Richtlinien lassen sich mit dem unten stehenden PowerShell Befehl ganz einfach einzeigen. Im gezeigten Beispiel sieht man eine Regel, welche zum Blocken des WDAP DNS-Eintrags für DHCP Clients dient. Leider gibt es keine bekannte Möglichkeit nach dem Anlegen herauszufinden, welche DNS-Einträge hier blockiert sind. Daher sollten diese gut dokumentiert werden.

Get-DnsServerQueryResolutionPolicy

Get-DnsServerQueryResolutionPolicy

Richtlinien und Definitionen löschen

Wie in PowerShell üblich gibt es dafür auch Remove Cmdlets. Löschen einer Richtlinie ist also mit dem folgenden Befehl möglich.

Remove-DnsServerQueryResolutionPolicy -Name "Block_WPAD_ClientSubnetz"

Remove-DnsServerQueryResolutionPolicy

Löschen eines angelegten Netzes erledigt man dann mit dem folgenden Befehl.

Remove-DnsServerClientSubnet -Name "ClientSubnetz"

Remove-DnsServerClientSubnet

Reihenfolge der Richtlinien

Jede Richtlinie hat einen „ProcessingOrder“ Wert. Das heißt, die Richtlinienverarbeitung erfolgt in der definierten Reihenfolge. Will man diese Reihenfolge ändern, löscht man eine Regel und legt diese anschließend neu an. Dadurch reiht sich die Regel mit dem nächstmöglichen Wert hinten an.