Pseudo top level domain DNSSEC: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(24 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
==== DNSSEC-Umstellung für eine Pseudo-Top-Level-Domain ====
+
=Schaubild=
 +
==Forward Zonen==
 +
{{#drawio:top-level-1}}
 +
==Reverse Zonen==
 +
{{#drawio:rev-top-level-1}}
  
=== Einleitung ===
+
=Script=
Dieser Artikel beschreibt die Aktivierung von DNSSEC für eine Pseudo-Top-Level-Domain (TLD), die mit BIND9 verwaltet wird. DNSSEC stellt sicher, dass die Antworten des DNS-Servers authentifiziert und vor Manipulation geschützt sind.
+
*[[Einrichtungs Script PSEUDO Top level]]
 +
*[[Media:Pseudeo-dns.sh]]
  
=== Voraussetzungen ===
+
=Die Idee=
* Ein laufender BIND9-Nameserver, der als autoritativer DNS-Server für die Pseudo-TLD dient.
+
*Wir faken einen Top Level Domain Nameserver.
* Installation der notwendigen Werkzeuge: `dnssec-tools` oder `bind9-utils`.
+
*Dieser hat zur Aufgabe zu wissen wer die Second Level Domains verwaltet.
* Zugriff auf das Verzeichnis `/var/cache/bind/` zur Speicherung der signierten Zonen.
+
*Wir delegieren diese Domains an die Teilnehmer.
 +
*Durch das Einstellen des gefakten Top Level Domain Servers als Forwarder wird jeder Anfragende an den richtigen Nameserver geleitet.
 +
*Die Zone .int wird zusätzlich mit DNSSEC signiert.
 +
*Der Trust-Anker wird später auf validierenden Resolvern gesetzt.
  
===Generierung der DNSSEC-Schlüssel ===
+
=Auf dem Rechner 192.168.6.88=
DNSSEC benötigt zwei Arten von Schlüsseln:
+
 
* Zone Signing Key (ZSK): Signiert die Zone und wird häufiger gewechselt.
+
==Optionen==
* Key Signing Key (KSK): Signiert den ZSK und wird seltener gewechselt.
+
*cat /etc/bind/named.conf.options
====int====
+
<pre>
'''ZSK erzeugen'''
+
options {
 +
directory "/var/cache/bind";
 +
dnssec-validation no;
 +
listen-on-v6 { none; };
 +
allow-recursion { any; };
 +
        allow-query  { any; };
 +
        allow-transfer { 127.0.0.1; };
 +
};
 +
 
 +
</pre>
 +
 
 +
==Die Zonenfestlegung==
 +
*cat /etc/bind/named.conf.local
 +
<pre>
 +
zone "int" {
 +
    type master;
 +
    forwarders {};
 +
    file "int.signed";
 +
};
 +
 
 +
zone "88.10.in-addr.arpa" {
 +
    type master;
 +
    forwarders {};
 +
    file "88.10.in-addr.arpa";
 +
};
 +
</pre>
 +
 
 +
==Die Zonen selbst (unsigniert)==
 +
*cat /var/cache/bind/int
 +
<pre>
 +
$TTL 300
 +
@        IN SOA  dnsgw.int. technik.kit.lab. (
 +
                2023022010 14400 3600 3600000 86400)
 +
            IN NS    dnsgw
 +
dnsgw      IN A      192.168.6.88
 +
 
 +
$GENERATE 201-213 ns.it$ A 10.88.$.21
 +
$GENERATE 201-213 it$ NS ns.it$
 +
</pre>
 +
 
 +
*cat /var/cache/bind/88.10.in-addr.arpa
 +
<pre>
 +
$TTL 300
 +
@        IN SOA  dnsgw.int. technik.kit.lab. (
 +
                2023022010 14400 3600 3600000 86400)
 +
            IN NS    dnsgw.int.
 +
$GENERATE 201-213  $  NS ns.it$.int.
 +
</pre>
 +
 
 +
==DNSSEC Schlüssel erzeugen==
 +
 
 +
;Für die Zone int
 
*dnssec-keygen -a RSASHA256 -b 2048 -n ZONE int
 
*dnssec-keygen -a RSASHA256 -b 2048 -n ZONE int
'''KSK erzeugen'''
 
 
*dnssec-keygen -a RSASHA256 -b 4096 -f KSK -n ZONE int
 
*dnssec-keygen -a RSASHA256 -b 4096 -f KSK -n ZONE int
  
Die generierten Dateien sehen ungefähr so aus:
+
==DNSKEY in die Zonen einbinden==
Kint.+008+12315.key
 
Kint.+008+12315.private
 
Kint.+008+43144.key
 
Kint.+008+43144.private
 
;Integration der DNSSEC-Schlüssel in die Zone
 
Die .key-Dateien müssen in die Zonendatei '''/var/cache/bind/int''' eingebunden werden:
 
*for k in Kint*.key ; do echo \$INCLUDE /var/cache/bind/$k >>  /var/cache/bind/int; done
 
  
====88.10.in-addr.arpa====
+
;int
'''ZSK erzeugen'''
+
*for k in Kint*.key ; do echo "\$INCLUDE /var/cache/bind/$k" >> /var/cache/bind/int; done
*dnssec-keygen -a RSASHA256 -b 2048 -n ZONE 88.10.in-addr.arpa
 
'''KSK erzeugen'''
 
*dnssec-keygen -a RSASHA256 -b 4096 -f KSK -n ZONE 88.10.in-addr.arpa
 
  
Die generierten Dateien sehen ungefähr so aus:
+
==Zonen signieren==
K88.10.in-addr.arpa.+008+06136.key
 
K88.10.in-addr.arpa.+008+06136.private
 
K88.10.in-addr.arpa.+008+29361.key
 
K88.10.in-addr.arpa.+008+29361.private
 
  
;Integration der DNSSEC-Schlüssel in die Zone
+
*dnssec-signzone -A -N INCREMENT -o int -t /var/cache/bind/int
Die .key-Dateien müssen in die Zonendatei '''/var/cache/bind/88.10.in-addr.arpa''' eingebunden werden:
 
*for k in K88*.key ; do echo \$INCLUDE /var/cache/bind/$k >>  /var/cache/bind/88.10.in-addr.arpa; done
 
  
===Zonensignierung mit DNSSEC ===
 
Sobald die Schlüssel eingebunden sind, wird die Zone signiert:
 
*dnssec-signzone -A -N INCREMENT -o int -t /var/cache/bind/int
 
*dnssec-signzone -A -N INCREMENT -o 88.10.in-addr.arpa  -t /var/cache/bind/88.10.in-addr.arpa
 
Dies erzeugt  signierte Dateien mit der Endung '''.signed'''.
 
  
===BIND9-Konfiguration anpassen ===
+
;Erzeugt
Die Datei `/etc/bind/named.conf.local` muss angepasst werden, damit die signierte Zone verwendet wird:
 
 
<pre>
 
<pre>
zone "int" {
+
/var/cache/bind/int.signed
    type master;
+
</pre>
    file "/var/cache/bind/int.signed";
+
 
    allow-query { any; };
+
==Dienst neu starten==
    dnssec-policy default;
+
*systemctl restart bind9
    inline-signing yes;
+
 
};
+
==Überprüfung==
 +
*dig @192.168.6.88 int DNSKEY +dnssec
 +
 
 +
;DNSKEY und RRSIG Einträge müssen sichtbar sein
 +
 
 +
=Trust-Anker auf einem validierenden Resolver=
 +
 
 +
;KSK ermitteln
 +
*dig DNSKEY int @192.168.6.88 +short
  
</pre>
+
;Nur der Key mit Kennung 257 3 13 wird verwendet
  
===DNSSEC in BIND9 aktivieren ===
+
;Auf dem Resolver eintragen
In der Datei `/etc/bind/named.conf.options` folgende Einstellungen setzen:
+
*cat /etc/bind/named.conf.options
 
<pre>
 
<pre>
options {
+
managed-keys {
        directory "/var/cache/bind";
+
  int. initial-key 257 3 13 "BASE64-KSK-HIER-EINFÜGEN";
        listen-on-v6 { any; };
 
        dnssec-validation auto;
 
 
};
 
};
 
</pre>
 
</pre>
  
===Neustart von BIND9 ===
 
Nach den Änderungen muss der DNS-Server neu gestartet werden:
 
 
*systemctl restart bind9
 
*systemctl restart bind9
  
===Überprüfung von DNSSEC ===
+
=Ergebnis=
Zur Kontrolle, ob DNSSEC korrekt funktioniert:
+
*Der Fake Root .int ist signiert
*dig DNSKEY int @localhost +dnssec
+
*Delegationen funktionieren wie zuvor
*dig A www.it100.int @localhost +dnssec
+
*DNSSEC beginnt beim Resolver durch expliziten Trust-Anker
 
 
Falls die Konfiguration korrekt ist, sollten RRSIG-Einträge sichtbar sein.
 
 
 
=== Fazit ===
 
Mit diesen Schritten ist die Pseudo-Top-Level-Domain mit DNSSEC abgesichert. Falls ein Slave-Server existiert, muss auch dort DNSSEC aktiviert und die signierte Zone übernommen werden.
 

Aktuelle Version vom 18. März 2026, 07:11 Uhr

Schaubild

Forward Zonen

Reverse Zonen

Script

Die Idee

  • Wir faken einen Top Level Domain Nameserver.
  • Dieser hat zur Aufgabe zu wissen wer die Second Level Domains verwaltet.
  • Wir delegieren diese Domains an die Teilnehmer.
  • Durch das Einstellen des gefakten Top Level Domain Servers als Forwarder wird jeder Anfragende an den richtigen Nameserver geleitet.
  • Die Zone .int wird zusätzlich mit DNSSEC signiert.
  • Der Trust-Anker wird später auf validierenden Resolvern gesetzt.

Auf dem Rechner 192.168.6.88

Optionen

  • cat /etc/bind/named.conf.options
options {
	directory "/var/cache/bind";
	dnssec-validation no;
	listen-on-v6 { none; };
	allow-recursion { any; };
        allow-query   { any; };
        allow-transfer { 127.0.0.1; };
};

Die Zonenfestlegung

  • cat /etc/bind/named.conf.local
zone "int" {
    type master;
    forwarders {};
    file "int.signed";
};

zone "88.10.in-addr.arpa" {
    type master;
    forwarders {};
    file "88.10.in-addr.arpa";
};

Die Zonen selbst (unsigniert)

  • cat /var/cache/bind/int
$TTL 300
@         IN SOA  dnsgw.int. technik.kit.lab. (
                2023022010 14400 3600 3600000 86400)
             IN NS     dnsgw
dnsgw       IN A      192.168.6.88

$GENERATE 201-213 ns.it$ A 10.88.$.21
$GENERATE 201-213 it$ NS ns.it$
  • cat /var/cache/bind/88.10.in-addr.arpa
$TTL 300
@         IN SOA  dnsgw.int. technik.kit.lab. (
                2023022010 14400 3600 3600000 86400)
             IN NS     dnsgw.int.
$GENERATE 201-213   $  NS ns.it$.int.

DNSSEC Schlüssel erzeugen

Für die Zone int
  • dnssec-keygen -a RSASHA256 -b 2048 -n ZONE int
  • dnssec-keygen -a RSASHA256 -b 4096 -f KSK -n ZONE int

DNSKEY in die Zonen einbinden

int
  • for k in Kint*.key ; do echo "\$INCLUDE /var/cache/bind/$k" >> /var/cache/bind/int; done

Zonen signieren

  • dnssec-signzone -A -N INCREMENT -o int -t /var/cache/bind/int


Erzeugt
/var/cache/bind/int.signed

Dienst neu starten

  • systemctl restart bind9

Überprüfung

  • dig @192.168.6.88 int DNSKEY +dnssec
DNSKEY und RRSIG Einträge müssen sichtbar sein

Trust-Anker auf einem validierenden Resolver

KSK ermitteln
  • dig DNSKEY int @192.168.6.88 +short
Nur der Key mit Kennung 257 3 13 wird verwendet
Auf dem Resolver eintragen
  • cat /etc/bind/named.conf.options
managed-keys {
   int. initial-key 257 3 13 "BASE64-KSK-HIER-EINFÜGEN";
};
  • systemctl restart bind9

Ergebnis

  • Der Fake Root .int ist signiert
  • Delegationen funktionieren wie zuvor
  • DNSSEC beginnt beim Resolver durch expliziten Trust-Anker