Einrichten von DNSSEC auf einem NSD-Nameserver unter Ubuntu 14.04

Über DNSSEC

DNS Security Extensions (DNSSEC) ist eine Technologie, die Anwendungen und DNS-Resolver vor der Verwendung gefälschter oder manipulierter DNS-Daten schützt.

  • Das Problem: * + Ein Angreifer kann eine DNS-Antwort manipulieren oder poison the DNS cache und Benutzer zu einer schädlichen Site mit dem legitimen Domain-Namen führen in ihrer Adressleiste.

  • Die Lösung: * + DNSSEC-konfigurierte autorisierende DNS-Server verhindern diese Art von Angriff, indem sie jeden Ressourceneintrag mit einem privaten Schlüssel digital signieren. Der DNS-Resolver überprüft die Integrität eines Zoneneintrags mithilfe des öffentlichen Schlüssels und der digitalen Signatur.

Über NSD

Name Server Daemon (* NSD *) ist eine Open-Source-DNS-Serversoftware, die nur für autorisierende Benutzer entwickelt wurde und von NLNet Labs entwickelt wurde. Es werden Zonendateien im BIND-Stil zur einfachen Konfiguration verwendet.

Ein autorisierender DNS-Server bietet Antworten auf Fragen zu den Zonen, für die er verantwortlich ist. In diesem Artikel richten wir unsere eigenen autorisierenden NSD-Nameserver für zwei Domainnamen ein. Wir werden NSD so konfigurieren, dass DNSSEC-signierte Antworten für beide Domänennamen bereitgestellt werden.

Voraussetzungen

Dieser Artikel setzt voraus, dass der Leser über Kenntnisse in den folgenden Bereichen verfügt:

Domain Name Nameservers

example.com

master.example.com

slave.example.com

foobar.org

master.example.com

slave.example.com

  • Die folgenden zwei Droplets führen NSD aus: *

Hostname IP Address

master.example.com

1.1.1.1

slave.example.com

2.2.2.2

Sie sollten im gesamten Lernprogramm durch die IP-Adresse Ihres Master-Nameservers und durch die IP-Adresse Ihres Slave-Nameservers ersetzen.

In diesem Artikel wird gezeigt, wie ein Nameserver eingerichtet wird, der unabhängig vom DNSSEC-Status seiner eigenen Domäne Domänen mit DNSSEC bedienen kann. Die Domain wird aus Bequemlichkeitsgründen für die Nameserver verwendet. Es ist nicht erforderlich, DNSSEC für den Nameserver-Domänennamen zu konfigurieren. Die Nameserver könnten genauso gut auf master.my-soa.com und slave.my-soa.com eingestellt werden.

Sie sollten auch eine IP-Adresse angeben, unter der Ihre Domains aufgelöst werden sollen. Wenn für diese Domänen noch keine Webhosts eingerichtet sind, können Sie ein weiteres Test-Droplet erstellen, mit dem ein Webserver ausgeführt wird. Wählen Sie das Bild * LAMP auf Ubuntu 14.04 *.

Die IP-Adresse des LAMP Droplets lautet * 3.3.3.3 *. Diese IP-Adresse wird als A-Eintrag für beide Domänennamen verwendet, um zu überprüfen, ob sie über einen Webbrowser aufgelöst werden. Sie sollten im gesamten Lernprogramm die IP-Adresse (n) Ihres gewünschten Webhosts eingeben.

DNSSEC-Terminologie

DNSSEC arbeitet am Konzept von public-key cryptography und führt neue DNS-Eintragstypen ein. In diesem Abschnitt werden einige der in diesem Artikel verwendeten Begriffe erläutert.

Keys

  • * ZSK *: Z one S igning K ey ist ein privates / öffentliches Schlüsselpaar. Der private Schlüssel erstellt eine digitale Signatur für alle DNS-Einträge, während der öffentliche Schlüssel vom DNS-Resolver zur Überprüfung verwendet wird.

  • * KSK *: K ey S Igning K ey ist ein privates / öffentliches Schlüsselpaar. Der private Schlüssel signiert das ZSK, während der öffentliche Schlüssel es überprüft.

Aufzeichnungen

  • * DNSKEY *: Enthält die öffentlichen Schlüssel von KSK und ZSK.

  • * RRSIG *: R esource R ecord Sig nature existiert für jeden Datensatz und liefert die digitale Signatur dieses Datensatzes. Der RRSIG-Datensatz basiert auf dem Datensatz selbst und der ZSK.

  • * DS *: Mit dem Ignorationsdatensatz D elegation S wird die Integrität der DNSKEY-Datensätze überprüft. Dieser Datensatz wird im Kontrollfeld des Domain-Registrars eingegeben und befindet sich auf dem autorisierenden Nameserver der TLD.

Für die Einrichtung von DNSSEC für eine Domain sind entsprechende Datensätze sowohl beim Nameserver als auch beim Registrar erforderlich.

Wie DNSSEC funktioniert

Zuerst sprechen wir aus Sicht des Domaininhabers über * DNSSEC * (das bist du!). Sie möchten sicherstellen, dass alle DNS-Einträge, die von Ihren Nameservern stammen, signiert sind. Auf diese Weise wird jemand, der versucht, Ihre DNS-Einträge zu fälschen, als falsch identifiziert, und Ihre Besucher können den Besuch einer schädlichen Website vermeiden.

Wie stellen Sie das ein? Zunächst müssen Sie für jede Domain zwei eindeutige Paare von privaten / öffentlichen Schlüsseln auf dem Nameserver generieren. Die öffentlichen Schlüssel für die Domäne werden in den DNSKEY-Einträgen gespeichert, die in der Zonendatei für diese Domäne aufgeführt sind. Zwei andere Arten von Datensätzen, die DS-Datensätze und die RRSIG-Datensätze, werden aus den DNSKEY-Datensätzen generiert. Diese drei Arten von Datensätzen sind alle kryptografisch verknüpft. Das heißt, wenn Sie einen der drei gesehen haben, können Sie feststellen, ob die anderen beiden gültig sind.

(Hinweis: Der Übersichtlichkeit halber werden für jede Domain mehrere Datensatztypen angegeben, wir verweisen jedoch für den Rest dieser Erläuterung auf diese im Singular.)

Als Nächstes laden Sie den DS-Eintrag in Ihren Registrar hoch, der ihn auf den TLD-Nameservern für Ihre Domain veröffentlicht. Da die Veröffentlichung eines DS-Datensatzes nur über den Registrar möglich ist, ist der Domaininhaber derjenige, der den DS-Datensatz veröffentlicht hat, was die Gültigkeit dieses DS-Datensatzes belegt. Der Zweck des DS-Datensatzes besteht darin, eine Authentifizierungskette zwischen dem TLD-Nameserver und den Nameservern einzurichten, die Sie für Ihre Domain ausführen. Dies funktioniert, weil der DS-Eintrag auf dem DNSKEY basiert, sodass jeder DNS-Resolver überprüfen kann, ob Ihr DNSKEY mit dem DS-Eintrag übereinstimmt und somit der richtige für die Domäne ist.

Ein RRSIG-Eintrag ist eine Signatur, die andere Arten von DNS-Einträgen (wie A, MX usw.) begleitet, die auf dem Eintragswert selbst (z. B. einer IP-Adresse) und dem DNSKEY basieren.

Mit den konfigurierten DNSKEY-, DS- und RRSIG-Einträgen ist DNSSEC jetzt für Ihre Domain eingerichtet.

Als Nächstes werden wir uns aus der Sicht der Benutzer damit befassen. Angenommen, ein Benutzer möchte Ihre Domain besuchen und fragt einen DNS-Resolver nach dem A-Eintrag Ihrer Domain ab. In diesem Beispiel hat der rekursive DNS-Resolver die Gültigkeit des DNSKEY für diese Domäne bereits anhand des DS-Datensatzes auf den TLD-Nameservern überprüft, obwohl dies auch zum ersten Mal problemlos möglich ist.

  • Hier ist eine Illustration, wie diese Abfrage funktioniert: *

    1. Der Benutzer sendet eine Abfrage nach einem A-Eintrag, der einen DNSSEC-fähigen rekursiven DNS-Server erreicht.

    2. Der DNS-Server stellt fest, dass die abgefragte Domäne DNSSEC unterstützt, indem er die DS-Einträge ermittelt. Es sendet eine Abfrage nach dem A-Datensatz mit dem Bit DO an Ihre autorisierenden Nameserver.

    3. Ihre Nameserver antworten mit dem A-Record und dem entsprechenden RRSIG-Record.

    4. Der rekursive DNS-Server berechnet den Wert des A-Datensatzes + des DNSKEY-Datensatzes, den er gespeichert hat, und vergleicht ihn mit dem entschlüsselten RRSIG-Datensatz. (Der DS-Eintrag könnte zuerst überprüft werden, um den DNSKEY-Eintrag zu validieren, falls er nicht in der Datei enthalten ist.) Wenn die Hashes übereinstimmen, gibt der DNS-Server den A-Eintrag an den Benutzer zurück, der nun Ihre Website besuchen kann.

Weitere Informationen zur Funktionsweise von DNSSEC finden Sie unter this article. Eine umfassendere Liste der DNSSEC-Terminologie finden Sie unter this.

Step Zero - Auf Domain- und Registrar-Support prüfen

Stellen Sie vor der Einrichtung von DNSSEC auf Ihren eigenen NSD-Nameservern sicher, dass Ihre Domain-Endung (.com, .org usw.) und Ihr Registrar DNSSEC unterstützen.

Um zu überprüfen, ob eine Domain-Endung DNSSEC-fähig ist, fragen Sie ihren DNSKEY-Eintrag mit dem folgenden Befehl ab:

dig DNSKEY . +short

Dies sollte die öffentlichen Schlüssel wie folgt zurückgeben:

256 3 8 AQPbokupKUJ5LLAtDEs6R3nDOHxF2jQEFtJEFTiDcfbsZia4fg3EK9Wv D9ZIr+7t2n1ddqRGHnTTInHTjduaKFPqm2iKaDHdrc6095o1mzqojnd1 bTtI45XNu61QmT5IU4VPT7HDUSby+53gLAsjLPyNsNEMp7Cc52RVxCHD no9efw==
257 3 8 AQPDzldNmMvZFX4NcNJ0uEnKDg7tmv/F3MyQR0lpBmVcNcsIszxNFxsB fKNW9JYCYqpik8366LE7VbIcNRzfp2h9OO8HRl+H+E08zauK8k7evWEm u/6od+2boggPoiEfGNyvNPaSI7FOIroDsnw/taggzHRX1Z7SOiOiPWPN IwSUyWOZ79VmcQ1GLkC6NlYvG3HwYmynQv6oFwGv/KELSw7ZSdrbTQ0H XvZbqMUI7BaMskmvgm1G7oKZ1YiF7O9ioVNc0+7ASbqmZN7Z98EGU/Qh 2K/BgUe8Hs0XVcdPKrtyYnoQHd2ynKPcMMlTEih2/2HDHjRPJ2aywIpK Nnv4oPo/

Keine Ausgabe weist auf einen Mangel an DNSSEC-Unterstützung für diese Domänenerweiterung hin.

Es reicht nicht aus, wenn Ihre TLD DNSSEC unterstützt. Der Domain-Registrar muss auch die Option haben, DS-Einträge in seinem Control Panel einzugeben. Dies kann durch Googeln von "dnssec" oder durch direkte Befragung eines Registrars bestätigt werden. Im Folgenden sind einige beliebte Registrare aufgeführt, die DNSSEC unterstützen:

Sobald Sie bestätigt haben, dass sowohl Ihre TLD als auch Ihr Domain-Registrar DNSSEC unterstützen, können Sie mit dem Einrichten Ihrer benutzerdefinierten Nameserver beginnen.

Erster Schritt - Installieren und Einrichten von NSD auf beiden Servern

In diesem Schritt installieren und konfigurieren wir NSD sowohl auf dem Master- als auch auf dem Slave-Server. Wir werden auch DNS-Einträge für die Domain * example.com * einrichten. Dieser Abschnitt dient als schnelle Einrichtung für NSD. Ausführliche Anweisungen zum Einrichten finden Sie unter this article NSD.

Master Server

Zusätzlich zum NSD-Serverpaket benötigt der Masterserver die folgenden Pakete:

Um einen Fehler während der Installation zu vermeiden, erstellen Sie einen Systembenutzer mit dem Namen:

useradd -r nsd

Die Option legt einen Systembenutzer an. Aktualisieren Sie das Repository und installieren Sie NSD, ldnsutils und haveged.

apt-get update
apt-get install nsd ldnsutils haveged

Die DNS-Zonenübertragung vom Master-Server zum Slave-Server ist durch ein gemeinsames Geheimnis gesichert. Verwenden Sie den folgenden Befehl, um das Geheimnis zufällig zu generieren:

dd if=/dev/random count=1 bs=32 2> /dev/null | base64

Notieren Sie sich die Ausgabezeichenfolge. Wir werden es in der Konfigurationsdatei sowohl des Master- als auch des Slave-Servers verwenden.

Erstellen Sie ein separates Verzeichnis für Zonendateien:

mkdir /etc/nsd/zones

Bearbeiten Sie die Konfigurationsdatei von NSD:

nano /etc/nsd/nsd.conf

Der erste Abschnitt gibt die Speicherorte für die Zonendateien, Protokolle und PID-Dateien (Prozess-ID) an:

server:
   username: nsd
   hide-version: yes
   zonesdir: "/etc/nsd/zones"
   logfile: "/var/log/nsd.log"
   pidfile: "/run/nsd/nsd.pid"

Die Direktive verhindert, dass NSD nach Abschluss der CHAOS-Klassenabfrage returning its version.

In diesem Abschnitt definieren wir einen Schlüssel mit dem Namen * mykey * und geben das zuvor generierte Geheimnis ein.

key:
   name: "mykey"
   algorithm: hmac-sha256
   secret: ""

Jeder Abschnitt enthält den Domänennamen, den Zonendateinamen und Details zu seinem Slave-Server:

zone:
   name:
   zonefile: .zone
   notify:  mykey
   provide-xfr:  mykey
zone:
   name:
   zonefile: .zone
   notify:  mykey
   provide-xfr:  mykey

Die Zeilen und sollten die * IP-Adresse des Slave-Servers * haben. Speichern Sie die Datei und erstellen Sie eine Zonendatei für * example.com *.

nano /etc/nsd/zones/.zone

Wir werden die folgenden Daten in die Zonendatei einfügen. Variablen sind nicht markiert, da Sie alle Einträge anpassen müssen:

$ORIGIN example.com.
$TTL 1800
@       IN      SOA     master.example.com.    email.example.com. (
                       2014080301
                       3600
                       900
                       1209600
                       1800
                       )
@       IN      NS      master.example.com.
@       IN      NS      slave.example.com.
master  IN      A       1.1.1.1
slave   IN      A       2.2.2.2
@       IN      A       3.3.3.3
www     IN      CNAME   example.com.
@       IN      MX      10 aspmx.l.google.com.
@       IN      MX      20 alt1.aspmx.l.google.com.
@       IN      MX      20 alt2.aspmx.l.google.com.
@       IN      MX      30 aspmx2.googlemail.com.
@       IN      MX      30 aspmx3.googlemail.com.

Speichern Sie diese Datei und erstellen Sie eine Zonendatei für * foobar.org *.

nano /etc/nsd/zones/.zone

Die zweite Zonendatei:

$ORIGIN foobar.org.
$TTL 1800
@       IN      SOA     master.example.com.    email.example.com. (
                       2014080301
                       3600
                       900
                       1209600
                       1800
                       )
@       IN      NS      master.example.com.
@       IN      NS      slave.example.com.
@       IN      A       3.3.3.3
www     IN      CNAME   foobar.org.
@       IN      MX      0 mx.sendgrid.com.

Speichern Sie die Datei und suchen Sie mit dem folgenden Befehl nach Konfigurationsfehlern:

nsd-checkconf /etc/nsd/nsd.conf

Eine gültige Konfiguration sollte nichts ausgeben. Starten Sie den NSD-Server neu:

service nsd restart

Überprüfen Sie mit dem Befehl, ob die DNS-Einträge für die Domänen gültig sind.

dig ANY . @localhost +norec +short

Eine Beispielausgabe dieses Befehls:

master.example.com. email.example.com. 2014080301 3600 900 1209600 1800
master.example.com.
slave.example.com.
3.3.3.3
10 aspmx.l.google.com.
20 alt1.aspmx.l.google.com.
20 alt2.aspmx.l.google.com.
30 aspmx2.googlemail.com.
30 aspmx3.googlemail.com.

Wiederholen Sie den Befehl für die zweite Domain:

dig ANY . @localhost +norec +short

Wir haben NSD erfolgreich auf dem Master-Server installiert und konfiguriert und außerdem zwei Zonen erstellt.

Slave Server

Der Slave-Server benötigt nur das NSD-Paket, da keine Schlüsselgenerierung oder -signierung durchgeführt wird.

Erstellen Sie einen Systembenutzer mit dem Namen:

useradd -r nsd

Aktualisieren Sie das Repository und installieren Sie NSD:

apt-get update
apt-get install nsd

Erstellen Sie ein Verzeichnis für die Zonendateien:

mkdir /etc/nsd/zones

Bearbeiten Sie die NSD-Konfigurationsdatei:

nano /etc/nsd/nsd.conf

Konfigurationsanweisungen hinzufügen:

server:
   username: nsd
   hide-version: yes
   zonesdir: "/etc/nsd/zones"
   logfile: "/var/log/nsd.log"
   pidfile: "/run/nsd/nsd.pid"

key:
   name: "mykey"
   algorithm: hmac-sha256
   secret: ""

zone:
   name:
   zonefile: .zone
   allow-notify:  mykey
   request-xfr:  mykey
zone:
   name:
   zonefile: .zone
   allow-notify:  mykey
   request-xfr:  mykey

Der Wert für * mykey * sollte genau dem entsprechen, der auf dem Master-Server eingegeben wurde. Verwenden Sie die IP-Adresse * des Masterservers * in den Zeilen und.

Überprüfen Sie auf Konfigurationsfehler:

nsd-checkconf /etc/nsd/nsd.conf

Starten Sie den NSD-Dienst neu:

service nsd restart

Erzwinge eine Zonenübertragung für beide Domänen mit dem Befehl:

nsd-control force_transfer
nsd-control force_transfer

Überprüfen Sie nun, ob dieser Server Anfragen für die Domain * example.com * beantworten kann.

dig ANY . @localhost +norec +short

Wenn dies dasselbe Ergebnis wie der Master liefert, ist diese Zone ordnungsgemäß eingerichtet. Wiederholen Sie den Befehl für die Domäne * foorbar.org *, um zu überprüfen, ob die Zone ordnungsgemäß eingerichtet ist. Wir haben jetzt ein Paar von NSD-DNS-Servern, die für die Domains * example.com * und * foobar.org * maßgeblich sind.

Zu diesem Zeitpunkt sollten Sie in der Lage sein, Ihre Domains in Ihrem Webbrowser zu besuchen. Sie werden auf den von uns eingerichteten Standard-LAMP-Server oder den von Ihnen angegebenen Host aufgelöst.

Schritt Zwei - Generieren Sie die Schlüssel und signieren Sie die Zone

In diesem Schritt generieren wir ein Paar (private und öffentliche) Zonensignaturschlüssel (ZSK) und Schlüsselsignaturschlüssel (KSK) für jede Domain. Wenn nicht anders angegeben, sollten die Befehle in diesem Abschnitt auf dem Master-Server ausgeführt werden .

Ändern Sie das aktuelle Verzeichnis in das Zonenverzeichnis von NSD:

cd /etc/nsd/zones

Der Befehl generiert Schlüsseldateien und druckt ihre Namen im Format "+ K <Domäne> + <Algorithmus> + <Schlüssel-ID> +". Anstatt diesen Namen aufzuschreiben, weisen wir ihn der Variablen zu, damit später leicht darauf verwiesen werden kann.

Generieren Sie die ZSK im Algorithmus:

export ZSK=`ldns-keygen -a RSASHA1-NSEC3-SHA1 -b 1024 `

Generieren Sie als Nächstes eine KSK, indem Sie die Option demselben Befehl hinzufügen:

export KSK=`ldns-keygen -k -a RSASHA1-NSEC3-SHA1 -b 2048 `

Dieses Verzeichnis enthält jetzt die folgenden sechs zusätzlichen Dateien:

  • 2 private Schlüssel mit einer Erweiterung.

  • 2 öffentliche Schlüssel mit einer Erweiterung.

  • 2 DS-Datensätze mit einer Erweiterung.

In * Schritt 3 * werden DS-Datensätze eines anderen * Digest-Typs * generiert. Löschen Sie daher diese DS-Datensatzdateien, um Verwirrung zu vermeiden.

rm $ZSK.ds $KSK.ds

Wiederholen Sie die Befehle für die Domain * foobar.org *:

export ZSK2=`ldns-keygen -a RSASHA1-NSEC3-SHA1 -b 1024 `
export KSK2=`ldns-keygen -k -a RSASHA1-NSEC3-SHA1 -b 2048 `
rm $ZSK2.ds $KSK2.ds

Der Befehl wird zum Signieren der DNS-Zone verwendet. Die Option dieses Befehls nimmt einen salt-Wert auf. Wir generieren zufällige Zeichen, berechnen einen SHA1-Hash und übergeben diesen Wert als Salt.

ldns-signzone -n -p -s $(head -n 1000 /dev/random | sha1sum | cut -b 1-16) .zone $ZSK $KSK

Eine neue Datei mit dem Namen * example.com.zone.signed * wird erstellt.

Führen Sie den Befehl für die Domäne * foobar.org * aus:

ldns-signzone -n -p -s $(head -n 1000 /dev/random | sha1sum | cut -b 1-16) .zone $ZSK2 $KSK2

NSD muss für die Verwendung der Zonendateien konfiguriert sein. Bearbeiten Sie die Konfigurationsdatei:

nano /etc/nsd/nsd.conf

Ändern Sie die Option unter dem Abschnitt für beide Domänen.

zone:
   name: example.com
   zonefile: example.com.zone
   notify: 2.2.2.2 mykey
   provide-xfr: 2.2.2.2 mykey
zone:
   name: foobar.org
   zonefile: foobar.org.zone
   notify: 2.2.2.2 mykey
   provide-xfr: 2.2.2.2 mykey

Führen Sie die folgenden Befehle aus, um die Änderungen zu übernehmen und die Zonendatei neu zu laden:

nsd-control reconfig
nsd-control reload
nsd-control reload

Suchen Sie nach DNSKEY-Einträgen, indem Sie eine DNS-Abfrage durchführen:

dig DNSKEY . @localhost +multiline +norec

Dies sollte die öffentlichen Schlüssel von ZSK und KSK wie folgt drucken:

; <<>> DiG 9.9.5-3-Ubuntu <<>> DNSKEY example.com. @localhost +norec +multiline
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14231
;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com.                IN DNSKEY

;; ANSWER SECTION:
example.com.            1800 IN DNSKEY 256 3 7 (
                               AwEAAbUfMzOJWWWniRSwDb2/2Q6bVpVoEPltPj0h5Qu6
                               hzBdYA4HJYlVXTJ6veNENI/5lV1y84Dhc47j4VAoA66F
                               j7xuTTZjzcuu0KAkQg8Jr2uCmmOuI/rZR7sWZMooHFZ1
                               JPPJZak8HKSNGvHXlMJiz9JPOA3ebJ/liG6lCGJshPah
                               ) ; ZSK; alg = NSEC3RSASHA1; key id = 2870
example.com.            1800 IN DNSKEY 257 3 7 (
                               AwEAAeMDpaVQJixHg1deUDBRRwVldJadgyRZPlieSoVf
                               ps3tYPvTD0nVBOQxenf+m4N/ALpnC5TH4GpxZLYS9IFc
                               rujudQrqA0UuTXBvIWP+XvuJ1yoyZCxO9PHV+GsefjI7
                               kvnmBD1V9UJlGVlHlB3YXHa3f/J5E0RujMnE4a19KG7b
                               HkYebK/2zjzhqXan9442VAG6jhw0lUUJZrCpZjMDEi9n
                               LhJOUSymxglQv1BftALmYnYcuHId9NCwZbvZMb7bS239
                               bm6ONjwqSHqW2slNhBnDVnng2tDfNwjR+eDz5oUbtw4b
                               LMtVACx1WzJEKbIN4rHY7aRe7Ao+4jvSJ8ozVrM=
                               ) ; KSK; alg = NSEC3RSASHA1; key id = 17385

;; Query time: 5 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Sep 04 01:37:18 IST 2014
;; MSG SIZE  rcvd: 467

Wiederholen Sie den Befehl für die zweite Domäne und überprüfen Sie die Antwort:

dig DNSKEY . @localhost +multiline +norec

Der Master-Server bietet jetzt * signierte * DNS-Antworten.

Sklave

Diese Zone muss nun auf den Slave-Server übertragen werden. Melden Sie sich beim Slave-Server an und erzwingen Sie eine Übertragung beider Zonen.

nsd-control force_transfer
nsd-control force_transfer

Abfrage der DNSKEY-Einträge auf diesem Server:

dig DNSKEY . @localhost +multiline +norec

Dies sollte den gleichen DNSKEY zurückgeben, den wir auf dem Master-Server gesehen haben. Beide DNS-Server wurden so konfiguriert, dass sie * signierte DNS-Antworten * liefern.

Schritt Drei - DS-Datensätze generieren

In diesem Schritt werden zwei DS-Einträge generiert, die Sie im nächsten Schritt in das Kontrollfeld des Domain-Registers eingeben. Die DS-Datensätze weisen die folgenden Spezifikationen auf:

Algorithm Digest Type

DS record 1

RSASHA1-NSEC3-SHA1

SHA1

DS record 2

RSASHA1-NSEC3-SHA1

SHA256

  • Die folgenden Befehle müssen auf dem Master-Server ausgeführt werden. *

Der Befehl generiert DS-Einträge aus der signierten Zonendatei. Wechseln Sie in das Zonendateiverzeichnis und führen Sie die folgenden Befehle aus:

cd /etc/nsd/zones
ldns-key2ds -n -1 .zone.signed && ldns-key2ds -n -2 .zone.signed

Die Option verwendet SHA1 als Hash-Funktion und SHA256 dafür. Die Option schreibt den Ergebnis-DS-Datensatz in stdout anstelle einer Datei.

Dies gibt zwei Ausgabezeilen zurück:

example.com. 1800    IN      DS      17385 7 1 c1b9f7f1425bc44976dc19165e48c60032e7820d
example.com. 1800    IN      DS      17385 7 2 98216f4d66d24dbb752c46523a747a97bbad49d5846bbaa6256b6950b4a40995

Die folgende Tabelle zeigt jedes Feld dieser DS-Datensätze:

Key tag Algorithm Digest type Digest

DS record #1

17385

7

1

c1b9f7f1[…]

DS record #2

17385

7

2

98216f4d[..]

Generieren Sie DS-Datensätze für * foobar.org *:

cd /etc/nsd/zones
ldns-key2ds -n -1 .zone.signed && ldns-key2ds -n -2 .zone.signed

Notieren Sie sich alle Teile aller vier DS-Datensätze (zwei pro Domäne), wie in der obigen Tabelle gezeigt. Wir werden sie im nächsten Schritt brauchen.

Schritt 4 - Konfigurieren Sie DS-Datensätze mit dem Registrar

In diesem Abschnitt werden die DS-Einträge im Steuerungsfeld des Domain-Registrars hinzugefügt. Dadurch werden die DS-Einträge für die Nameserver der Top Level Domain (TLD) veröffentlicht. In diesem Schritt wird das Bedienfeld von GoDaddy als Beispiel verwendet.

Melden Sie sich bei GoDaddy an und wählen Sie Ihren Domainnamen.

  • Nur beim erstmaligen Nameserver-Setup: *

Der Abschnitt * Host Names * muss einmal ausgeführt werden, um die Nameserver zum ersten Mal einzurichten. Wenn sich Ihre Nameserver-Domain von * my-soa.com * unterscheidet, sollten Sie diesen Schritt nur für die Nameserver-Domain * * ausführen.

Klicken Sie im Abschnitt * Hostnamen * auf * Verwalten *.

image: https: //assets.digitalocean.com/articles/dnssec_nsdnameserver/3.png [GoDaddy-Hostnamen]

Einige Registrare bezeichnen dies möglicherweise als "untergeordnete Nameserver". Klicken Sie auf "Hostnamen hinzufügen" und erstellen Sie einen Hostnamen "Master", der auf die IP des ersten Droplets verweist.

image: https: //assets.digitalocean.com/articles/dnssec_nsdnameserver/4.png [Hinzufügen von Hostnamen]

Klicken Sie auf * Hinzufügen *. Wiederholen Sie diesen Schritt noch einmal und erstellen Sie einen Hostnamen * slave *, der auf die IP des zweiten Droplets verweist.

  • Alle Domains: *

Diese beiden Hostnamen müssen als Nameserver für diese Domain festgelegt werden. Klicken Sie im Bereich * Nameserver * auf * Verwalten * und fügen Sie beide hinzu.

image: https: //assets.digitalocean.com/articles/dnssec_nsdnameserver/5.png [Nameserver hinzufügen]

Klicken Sie im Abschnitt * DS-Datensätze * auf * Verwalten *.

Füllen Sie die Details in den entsprechenden Feldern aus. Verweisen Sie bei Bedarf auf die Tabelle im vorherigen Schritt.

image: https: //assets.digitalocean.com/articles/dnssec_nsdnameserver/7.png [Geben Sie das Schlüssel-Tag, den Algorithmus, den Digest-Typ und den Digest für den ersten DS-Datensatz ein.]

image: https: //assets.digitalocean.com/articles/dnssec_nsdnameserver/8.png [Geben Sie das Schlüssel-Tag, den Algorithmus, den Digest-Typ und den Digest für den zweiten DS-Datensatz ein.]

Speichern Sie beide Datensätze.

Fragen Sie nach einigen Minuten nach DS-Datensätzen.

dig DS . +trace +short | egrep '^DS'

Die Ausgabe sollte beide DS-Datensätze enthalten.

DS 17385 7 2 98216F4D66D24DBB752C46523A747A97BBAD49D5846BBAA6256B6950 B4A40995 from server 192.55.83.30 in 1 ms.
DS 17385 7 1 C1B9F7F1425BC44976DC19165E48C60032E7820D from server 192.55.83.30 in 1 ms.

Wenn Sie diese Schritte für die zweite Domäne ausführen, stellen Sie sicher, dass Sie die Nameserver auf die entsprechende Nameserver-Domäne festlegen.

Für diese Domain müssen keine Hostnamen angelegt werden.

Fünfter Schritt - Überprüfen Sie den DNSSEC-Betrieb

DNSSEC kann an folgenden Standorten überprüft werden:

Ein erfolgreicher Test von der ersten Website zeigt das folgende Ergebnis:

Beachten Sie die markierten Linien. Im Klartext lesen sie:

  1. DS-Datensatz Nr. 2 (Digest-Typ SHA256) überprüft KSK (Schlüssel-ID 17385)

  2. KSK (Schlüssel-ID 17385) überprüft den anderen DNSKEY (ZSK)

  3. ZSK (Schlüssel-ID 2870) überprüft die Signatur des A-Datensatzes

Sowohl der Master- als auch der Slave-Server stellen jetzt DNSSEC-Antworten bereit.

Sie sollten auch in der Lage sein, beide Domänen in Ihrem Webbrowser anzuzeigen. Sie sollten auf die standardmäßige Apache / Ubuntu-Seite auf dem Test-Webserver verweisen, den wir unter 3.3.3.3 eingerichtet haben, oder auf die Web-Hosts, die Sie in den * @ * -Einträgen der Domains angegeben haben.

Ändern von Zonendatensätzen

Um einen Zoneneintrag zu ändern, muss die nicht signierte Datei (* .zone *) bearbeitet werden. Nach der Änderung muss die SOA-Seriennummer erhöht und die Zone erneut signiert werden, damit die Änderungen wirksam werden.

Die SOA-Seriennummer hat das folgende Format.

YYYYMMDD

Wenn Sie Änderungen an den Zonendateien vornehmen, stellen Sie das aktuelle Datum ein. Bei der ersten Änderung am 22. September 2014 wäre die Serie also:

20140922

Die ersten beiden Ziffern sollten erhöht werden, wenn nachfolgende Änderungen am selben Tag vorgenommen werden. Wenn Sie vergessen, die SOA-Seriennummer zu erhöhen, werden an der Zonendatei vorgenommene Änderungen nicht auf den Slave-Server übertragen.

  • Hinweis: Wenn Sie Änderungen direkt an der Datei + .signed + vornehmen, wird die Signatur ungültig und die Validierung schlägt fehl. *

Anstatt jedes Mal lange Befehle zum Signieren der Zone einzugeben, erstellen wir ein Shell-Skript. Erstellen Sie eine Datei * auf dem Master-DNS-Server * und bearbeiten Sie diese.

nano /usr/local/bin/dnszonesigner

Fügen Sie den folgenden Code ein:

#!/bin/bash
PDIR=`pwd`
ZONEDIR="/etc/nsd/zones" #location of your zone files
DOMAIN=$1
cd $ZONEDIR
KSK=$(basename $(grep -r "`grep '(ksk)' $DOMAIN.zone.signed | cut -f3-10`" K$DOMAIN.*.key | cut -d':' -f1) .key)
ZSK=$(basename $(grep -r "`grep '(zsk)' $DOMAIN.zone.signed | cut -f3-10`" K$DOMAIN.*.key | cut -d':' -f1) .key)
/usr/bin/ldns-signzone -n -p -s $(head -n 1000 /dev/random | sha1sum | cut -b 1-16) -f $ZONEDIR/$DOMAIN.zone.signed $DOMAIN.zone $ZSK $KSK
/usr/sbin/nsd-control reload $DOMAIN
/usr/sbin/nsd-control notify $DOMAIN
cd $PDIR

Sie sollten die meisten dieser Zeilen aus dem vorherigen Tutorial kennen, in dem wir sie manuell ausgeführt haben.

Machen Sie diese Datei ausführbar:

chmod +x /usr/local/bin/dnszonesigner

Stellen Sie nun nach dem Hinzufügen, Entfernen oder Bearbeiten von DNS-Einträgen sicher, dass Sie die * SOA-Seriennummer erhöhen * und dieses Skript ausführen.

dnszonesigner

Dieses Shell-Skript funktioniert von jedem Verzeichnis aus, wie wir es in einem in der Variablen definierten Verzeichnis platziert haben.

Zusätzliche Lektüre

Zusätzliche Kopie von Sharon Campbell