Sicherheit in Windows Server 2016/2019 erhöhen DNS-Abfragen mit Richtlinien steuern

Autor / Redakteur: Thomas Joos / Peter Schmitz

Wenn es um die Sicherheit von Netzwerken geht, spielt auch DNS eine wichtige Rolle. Windows Server 2016/2019 ermöglichen das Filtern von DNS-Abfragen basierend auf Client-IP-Adressen.

Firma zum Thema

Wie man DNS-Abfragerichtlinien anlegt, mit der PowerShell steuert und damit für mehr Sicherheit in Windows-Netzwerken sorgt, zeigen wir in diesem Artikel.
Wie man DNS-Abfragerichtlinien anlegt, mit der PowerShell steuert und damit für mehr Sicherheit in Windows-Netzwerken sorgt, zeigen wir in diesem Artikel.
(Bild: Myvisuals – stock.adobe.com)

Mit DNS-Abfragerichtlinien kann konfiguriert werden auf welche DNS-Anfragen ein DNS-Server antwortet und welche Abfragen er blockiert. Dadurch kann die Sicherheit des DNS-Systems verbessert werden.

Gleichzeitig werden DNS-Server entlastet, da sie nicht zu viele Anfragen beantworten müssen. Microsoft hat diese Technologie in Windows Server 2016 eingeführt und mit Windows Server 2019 erweitert. Alle Möglichkeiten für Richtlinien zeigt Microsoft auf der Hilfe-Seite für DNS-Abfragerichtlinien.

So sorgen DNS-Abfragerichtlinien für mehr Sicherheit in Windows-Netzwerken

Einfach ausgedrückt können Administratoren mit DNS-Abfragerichtlinien (DnsServerQueryResolutionPolicy) festlegen, dass ein DNS-Server nicht generell auf alle Anfragen antwortet, sondern vorher überprüft aus welchem Subnetz die Anfrage geschickt wird. Auf Basis dieser Informationen kann der DNS-Server anschließend verschiedene Anfragen blockieren, während andere Anfragen weiterhin beantwortet werden.

DNS-Abfragerichtlinien können auch dazu genutzt werden nur einzelne Einträge in einer DNS-Zone zu blockieren, zum Beispiel zu bestimmten Servern, die nur von einer Gruppe von Anwendern genutzt werden sollen.

DNS-Richtlinien in der PowerShell steuern

DNS-Abfragerichtlinien werden in der PowerShell mit dem Cmdlet „Add-DnsServerQueryResolutionPolicy“ erstellt. Die vorhandenen Richtlinien zeigt die PowerShell mit „Get-DnsServerQueryResolutionPolicy“ an. Natürlich lassen sich erstellte Richtlinien auch bearbeiten (Set-DnsServerQueryResolutionPolicy) und löschen (Remove-DnsServerQueryResolutionPolicy). Das Anlegen einer solchen Richtlinie ist generell recht einfach.

DNS-Server führen die Regeln in der Reihenfolge aus, wie sie mit „Get-DnsServerQueryResolutionPolicy“ angezeigt werden. Durch das Löschen einer Regel mit „Remove-DnsServerQueryResolutionPolicy“ und dem anschließenden Neuerstellen mit „Add-DnsServerQueryResolutionPolicy“ wird eine Richtlinie hintenangestellt. Die Reihenfolge der Ausführung kann auch mit dem Parameter „ThrottleLimit“ festgelegt werden, zum Beispiel mit:

Add-DnsServerQueryResolutionPolicy -ComputerName "Server07" -ThrottleLimit 1
Bildergalerie
Bildergalerie mit 6 Bildern

DNS-Richtlinie anlegen

Um eine neue Richtlinie anzulegen, wird zunächst auf dem DNS-Server die PowerShell geöffnet. Danach kann mit „Get-DnsServerQueryResolutionPolicy“ überprüft werden, ob das Modul zur Steuerung der Richtlinien vorhanden ist und welche Richtlinien bereits existieren. Im folgenden Beispiel soll der Server „idm.joos.int“ vor Abfragen aus dem Subnetz 192.168.1.0/255.255.255.0 geschützt werden.

Dazu wird im ersten Schritt ein Subnetz in den Richtlinien angelegt, auf deren Basis die Filterung erfolgen soll. Der Befehl dazu ist:

Add-DnsServerClientSubnet -Name "BlockClients" -IPv4Subnet 192.168.1.0/24 -PassThru

Um sich alle bereits vorhandenen Subnetze anzuzeigen, wir das Cmdlet „Get-DnsServerClientSubnet“ genutzt. Nicht mehr benötigte Subnetze lassen sich mit „Remove-DnsServerClientSubnet“ löschen.

Um das Ergebnis einer Richtlinie zu testen, kann in der PowerShell zunächst die Namensauflösung zu „idm.joos.int“ getestet werden. Hier antwortet der DNS-Server noch wie erwartet. Danach wird die Richtlinie erstellt, der DNS-Cache gelöscht und danach die Abfrage neu gestartet. Hier sollte der DNS-Server die Abfrage blockieren. Die Auflösung erfolgt mit:

Resolve-DnsName idm.joos.int

Danach wird der DNS-Cache mit dem Cmdlet „Clear-DnsClientCache“ gelöscht. Anschließend wird die neue Richtlinie erstellt, die aus dem erstellten Subnetz heraus den Zugriff auf den Server idm.joos.int blockiert:

Add-DnsServerQueryResolutionPolicy -Name "Block_IDM" -Action IGNORE -ClientSubnet "EQ,BlockClients" -Fqdn "EQ,idm.joos.int" -PassThru

Um den kompletten Zugriff auf eine Domäne zu sperren, kann der folgende Befehl verwendet werden:

Add-DnsServerQueryResolutionPolicy -Name "BlackholePolicy" -Action IGNORE -FQDN "EQ,*.contoso.com" -PassThru | Format-List *

Bei der Auswahl der blockierten Subnetze und der blockierten Server, muss vor dem Namen noch ein Operator verwendet werden. Der Operator „EQ“ legt fest, dass der Eintrag identisch sein muss, wie der angegebene Name.

Es gibt noch die Möglichkeit „NE“ (not equal) oder „OR“ (oder) zu verwenden. Danach wird die Richtlinie angezeigt. Wird jetzt von einem Client die Abfrage mit „Resolve-DnsName“ erneut gestartet, blockiert der DNS-Server die Abfrage.

Mit „IGNORE“ werden alle Abfragen blockiert, der Parameter „ALLOW“ erlaubt die Abfrage aus dem angelegten Subnetz und blockiert alle anderen Abfragen. Dadurch können unproblematisch eigene Regeln erstellt werden, die sehr flexibel funktionieren.

Regeln für mehrere Server umsetzen

Die Regeln werden allerdings nicht im Active Directory gespeichert oder an einer anderen, zentralen Stelle. Für jeden DNS-Server, der eine solche Richtlinie nutzen soll, muss eine eigene Richtlinie erstellt werden.

Um eine Regel für mehrere Server umzusetzen, kann eine Richtlinie aus einem Server ausgelesen und auf einem anderen angelegt werden. Die Cmdlets unterstützen den Parameter „-Computername“. Das ist beim Auslesen und Anlegen einer neuen Richtlinie natürlich eine Hilfe. Dazu werden die Richtlinien auf einem Server in eine Variable gespeichert und auf Basis der Variablen die Richtlinie auf einem anderen Server neu eingelesen. Das Anlegen kann anschließend wieder mit „Get-DnsServerQueryResolutionPolicy“ überprüft werden.

$Policies = Get-DnsServerQueryResolutionPolicy -ComputerName "dc01"$Policies | Add-DnsServerQueryResolutionPolicy -ComputerName "dc02" -ThrottleLimit 1

Ebenfalls möglich ist das generelle Blockieren für eine Domäne für alle Subnetze. So können Abfragen zeitweilig komplett deaktiviert werden:

Add-DnsServerQueryResolutionPolicy -Name "BlackholePolicy" -Action IGNORE -FQDN "EQ,*.contoso.com" -PassThru | Format-List *

Mehr Powershell-Tipps!

(ID:47539856)

Über den Autor

 Thomas Joos

Thomas Joos

Freiberuflicher Autor und Journalist