Ü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:
-
Eine Einführung in die DNS-Terminologie, -Komponenten und -Konzepte
-
Ein Vergleich der DNS-Servertypen: Vorgehensweise die richtige DNS-Konfiguration
-
In diesem Artikel werden zwei Domainnamen verwendet: *
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 *.
image: https://assets.digitalocean.com/articles/dnssec_nsdnameserver/1.png [LAMP unter Ubuntu 14.04 image]
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: *
-
Der Benutzer sendet eine Abfrage nach einem A-Eintrag, der einen DNSSEC-fähigen rekursiven DNS-Server erreicht.
-
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.
-
Ihre Nameserver antworten mit dem A-Record und dem entsprechenden RRSIG-Record.
-
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.
-
image: https://assets.digitalocean.com/articles/dnssec_nsdnameserver/2.png [DNSSEC-Validierung]
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:
-
* ldnsutils *: Für die DNSSEC-Schlüsselgenerierung und Zonensignierung.
-
* haveged *: Für https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers- using-haveged[increaseing entropy]. Das Installieren dieses Pakets beschleunigt den Schlüsselerzeugungsprozess.
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 *.
image: https://assets.digitalocean.com/articles/dnssec_nsdnameserver/6.png [GoDaddy verwaltet DS-Datensätze]
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.
Bild: https://assets.digitalocean.com/articles/dnssec_nsdnameserver/10.png [Zweite Domain Nameserver]
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:
image: https://assets.digitalocean.com/articles/dnssec_nsdnameserver/11.png [DNSSEC-Test]
Beachten Sie die markierten Linien. Im Klartext lesen sie:
-
DS-Datensatz Nr. 2 (Digest-Typ SHA256) überprüft KSK (Schlüssel-ID 17385)
-
KSK (Schlüssel-ID 17385) überprüft den anderen DNSKEY (ZSK)
-
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