Windows2012/2016 Server und BIND Signing Proxy

In einer bestehenden Umgebung, in der bisher DNS über Windows Server gemanagt wurde, und diese Nameserver auch sowohl als Verwaltungsmaschine, als auch als öffentlicher Nameserver dienten, oder der öffentliche Nameserver ebenfalls Windows-basiert war, kann ein "hybrides" Setup aus Windows DNS und Linux/BIND9 sinnvoll sein.


Prinzipielles Setup mit Hidden Master, Signing Proxy und Public Master


In diesem Beispiel zeigen wir ein DNSSEC-Setup mit Windows2016 Server als DNS-Verwaltungssystem ("Hidden Master"), im allgemeinen wird hierzu das schon bestehende System weiter verwendet, und BIND9-basierten Nameserver das die DNSSEC-Signierung vornimmt ("Signing Proxy"), dem ein ebenfalls unter BIND9 laufender öffentlicher Nameserver als Secondary ("Slave") konfiguriert sind.

Grundsätzlich läßt sich das Setup aber auch auf andere Nameserver-Software (z.B. Unbound, PowerDNS) übertragen, da es nur auf die Weiterreichung der unsignierten bzw. durch den Proxy signierten Zonen ankommt. Wesentlich ist also die Konfiguration der IPs zum Zonentransfer vom Primary (Verwalter) zum Secondary (Signing Proxy) und dessen Secondary (Öffentlicher Nameserver).

Zonen und Konfiguration der Nameserver


Durch die zweistufigen Zonentransfer vom DNS-Verwalter zum Signing Proxy und danach zum öffentlichen Nameserver ergeben sich folgende Konfigurationen für die DNS-Server unter Windows und BIND9, wenn die IPs der drei beteiligten Systeme in unserem Beispiel die folgenden sind:


HostIPFunktionSchemaNameserver Status

BADWLRZ-TWDNS01

138.246.99.193 

DNS VerwaltungHidden MasterMaster

dnssec-ws02.dnssec.bayern

138.246.99.197

DNSSEC-SignierungSigning ProxySlave des Hidden Master
dnssec-ws03.dnssec.bayern

138.246.99.220

Öffentlicher NameserverPublic MasterSlave des Signing Proxy



Konfiguration von Windows2012/2016 Server auf dem Hidden Master


Die DNS-Verwaltung läuft unter Windows2012/2016 Server als sogenannter Hidden Master. In Windows muss der DNS-Dienst installiert und aktiviert sein. Hier werden auch die Zonen wie gewohnt definiert. Als Beispiel dient uns die ws03.ws.dnssec.bayern Zone. Sie besitzt allerdings für diese Demonstration nur minimale A,AAAA und MX-Einträge für einen Rechner.


  • Der DNS-Dienst kann aus aus den "Administrative Tools" heraus gestartet werden.

  • Der DNS-Dienst und dort definierte Zonen werden über den "DNS Manager" verwaltet:






  • Hier werden Zonen angelegt. Unsere Beispielzone "ws03.ws.dnssec.bayern" ist als Standard Primary definiert und wie oben im Schema illustriert auf dem DNS-Verwaltungsserver ("Hidden Master") nicht DNSSEC-signiert. Die Zone ist für dieses Testsetup minimal gehalten, und enthält nur jeweils einen A, MX und NS Resourceneintrag.






  • Über das "Properties"-Kontextmenü konfiguriert man die Zonen. Im "General"-Tab wird der verwendete Dateiname für die Zonendaten definiert, den wir unverändert lassen.






  • Im "Nameservers"-Tab definieren wir den "Public Master" mit seiner IP als "Nameserver". Diese auf den ersten Blick widersprüchliche Einstellung ist notwendig, da der "Public Master" der eigentliche öffentliche und damit von außen sichtbare Nameserver ist, der Anfragen autoritativ beantworten wird. Er muss also in der Zone als "NS" Resource Record stehen und wird mit der Auflistung als Nameserver dort aufgeführt.




  • Start of Authority (SOA) enthält neben dem Primary Server - das ist auch hier der Hostname des Public Master - nur die üblichen Angaben für die Zone (TTL, Refresh und Retry Interval usw.)





  • Im Tab Zone Transfers muss allerdings der Transfer an den Signing Proxy, IP 138.246.99.197, eingestellt werden.




  • Nicht vergessen werden sollte, dass man durch Klicken auf den "Notify"-Button sicher stellt, dass dort auch die Nameserver über geänderte Zonen benachrichtigt werden. Gehen alle Zonen über den Signing Proxy ist das mit der der Default-Einstellung "Automatically Notify" angeklickt und "Servers listed on the Servers tab" noch NICHT der Fall.



  • Da der Signing Proxy NICHT In der Liste Nameservers steht, muss seine IP 138.246.99.197 hier separat angegeben werden. Die Benachrichtigung (Notification) des Public Nameservers wird hingegen auf den Signing Proxy in den BIND9-Optionen gesetzt (siehe unten)




Damit haben wir die Konfiguration des Hidden Master unter Windows2012/2016 abgeschlossen und können uns den beiden BIND9-Konfigurationen auf dem Signing Proxy und dem Public Master widmen. Bei diesen gehen wir aber nur auf die für das DNSSEC-Signing-Proxy-Setup notwendigen spezifischen Einstellungen ein. Kenntnisse der allgemeinen Konfiguration von BIND und DNSSEC setzen wir hier voraus.


Konfiguration von BIND9 auf dem Signing Proxy


DNSSEC-Schlüssel sollten in einem dedizierten Verzeichnis, auf das nur der root- und bind-Benutzer Lesezugriff haben, gespeichert werden. Da pro Zone ein Zone-Signing-Key (ZSK) und Key-Signing-Key-(KSK)-Paar empfohlen wird, sollte man auf die Organisation der Schlüssel in Unterverzeichnissen Wert legen. Das Parentverzeichnis wird als Option in der allgemeinen Konfiguration angegeben.

Der Signing Proxy kann sehr restriktiv gehalten werden, da er tatsächlich nur die unsignierten Zonen per Zonentransfer entgegen nimmt, diese bei Bedarf - nicht alle Zonen müssen notwendigerweise signiert werden - mit den vorhandenen DNSSEC-Schlüsseln signiert und dann per Zonentransfer an den Public Master weiter reicht.

Er darf keine Query-Anfragen beantworten oder gar Rekursion erlauben, um nicht als Open Resolver missbraucht werden zu können. Da der Signing Proxy von außen nicht erreichbar ist, ist das aber nur eine zusätzliche Absicherung.


Allgemeine Optionen

options {       

   directory "/var/cache/bind";          # Cache-Verzeichnis für BIND9       

   key-directory "/var/bind/keys";     # Verzeichnis für DNSSEC-Schlüssel

   dnssec-validation auto;                 # DNSSEC-Validierung aktivieren

   

   listen-on { any; };

   listen-on-v6 { any; };

   notify yes;                                       # Public Master soll über Zonenänderungen informiert werden       


   allow-query { none; };                    # keine Queries von irgendeinem System erlauben
   allow-recursion { none; };              # keine Rekursion von irgendeinem System erlauben
   recursion no;                                  # zusätzlich wird die Rekursion ganz abgeschaltet
 

   allow-transfer  { ::1; 127.0.0.1; 138.246.99.217; 138.246.99.220; };  

   # local, dnssec-wsadm.dnssec.bayern und dnssec-ws03.dnssec.bayern = public master

};


Neben den üblichen für die DNSSEC-Nutzung in BIND9 notwendigen Angaben, werden auf dem Signing Proxy pro Zone noch der Hidden Master als Master und der Public Master als erlaubter Zielrechner für den Zonentransfer angegeben (dies ist in den obigen allgemeinen Optionen definiert).


Optionen für Zonen

zone ws03.ws.dnssec.bayern {

type slave; # Signing Proxy ist Slave des Hidden Master

   masters { 138.246.99.193; };   # BADWLRZ-TWDNS01.srv.lrz.de = hidden master


   inline-signing yes;                    # DNSSEC-Signieren per inline-Signing

   auto-dnssec maintain;             # selbständiges Signieren bei geänderten Zonen


   file "/etc/bind/temp.signed";   # ein Dummy-file ist notwendig, da BIND9 au diesem arbeiten können muss

};

Konfiguration von BIND9 auf dem Public Master

Da der Public Master Anfragen von öffentlichen Recursern beantworten muss, muss in den allgemeinen Optionen dies frei geschaltet werden. DNSSEC-Validierung wird auch auf auto gestellt.


Allgemeine Optionen

options {

directory "/var/cache/bind";      # Cache-Verzeichnis für BIND9

   dnssec-validation auto;          # DNSSEC-Validierung aktivieren

   allow-query { any; };                # Public Master muss Anfragen von außen beantworten
   allow-recursion { none; };       # aber nur für seine eigenen autoritativen Zonen
   recursion no;                           # zusätzlich wird die Rekursion ganz abgeschaltet

  listen-on { any; };

  listen-on-v6 { any; };

};


Der Public Master übernimmt schon DNSSEC-signierte Zonen vom Signing Proxy, muss also selbst keine DNSSEC-Signierung mehr vornehmen und muss auch keine Schlüssel speichern. Der Public Master muss so konfiguriert werden, dass der Signing Proxy für ihn Master Nameserver ist.

Er muss Query-Anfragen von außen beantworten können, darf aber gar keine Rekursion erlauben, um nicht als Open Resolver missbraucht werden zu können!

Transfers der Zonen werden nur für einen Admin-Rechner bzw. den Public Master selbst lokal zur Überprüfung des korrekten Auslieferns von signierten Zonen erlaubt.


Optionen für Zonen

zone ws03.ws.dnssec.bayern {

    type slave;                                # Public Master ist Slave des Signing Proxy

    masters { 138.246.99.197; };   # 138.246.99.197 = signing proxy als Master


    allow-transfer { ::1; 127.0.0.1; 138.246.99.220; }; # nur lokale Transfers zulassen

};



Wenn alles konfiguriert ist, und sicher gestellt ist, dass sowohl der DNS-Dienst auf Windows2012/2016, als auch die beiden BIND9-Instanzen auf dem Signing Proxy und dem Public Master laufen, kann man sehen, dass Änderungen an den DNS-Einträgen oder der SOA TTL an die nachfolgenden Nameserver wie im Schema anfangs illustriert, per Notification und Zonen Transfer propagiert werden:

Signing Proxy Log

26-Jun-2018 20:16:42.771 info: client @0x7f27780c68d0 138.246.99.193#56654: received notify for zone 'ws03.ws.dnssec.bayern'
26-Jun-2018 20:16:42.771 info: zone ws03.ws.dnssec.bayern/IN (unsigned): notify from 138.246.99.193#56654: zone is up to date



Public Master Log

26-Jun-2018 20:16:43.189 zone ws03.ws.dnssec.bayern/IN: Transfer started.

26-Jun-2018 20:16:43.189 transfer of 'ws03.ws.dnssec.bayern/IN' from 138.246.99.197#53: connected using 138.246.99.220#43455

26-Jun-2018 20:16:43.190 zone ws03.ws.dnssec.bayern/IN: transferred serial 185

26-Jun-2018 20:16:43.191 transfer of 'ws03.ws.dnssec.bayern/IN' from 138.246.99.197#53: Transfer status: success

26-Jun-2018 20:16:43.191 transfer of 'ws03.ws.dnssec.bayern/IN' from 138.246.99.197#53: Transfer completed: 2 messages, 76 records, 18464 bytes, 0.001 secs (18464000 bytes/sec)



Überprüfung der Auslieferung von DNSSEC-signierten Zonen


Die korrekte Auslieferung von DNSSEC-signierten Zonen kann auch mit DNSViz überprüft werden.




DNSSEC Schlüsselverwaltung


Zu beachten ist, dass natürlich die Schlüsselverwaltung auf dem Signing Proxy erfolgen muss, da dieser die DNSSEC-Signierung vornimmt. Dies kann nicht aus dem Windows2012/2016 Server Hidden Master heraus erfolgen.

Die Schlüssel und Nachfolge-Schlüssel für die Key-Rollovers können entweder per Hand mit dnssec-keygen erzeugt werden, oder zumindest für den Fall der Zone-Signing-Keys mit dem dnssec-keymgr erzeugt werden.