Pseudo top level domain DNSSEC: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(20 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.
 
* Key Signing Key (KSK): Signiert den ZSK und wird seltener gewechselt.
 
====int====
 
'''ZSK erzeugen'''
 
*dnssec-keygen -a RSASHA256 -b 2048 -n ZONE int
 
'''KSK erzeugen'''
 
*dnssec-keygen -a RSASHA256 -b 4096 -f KSK -n ZONE int
 
  
Die generierten Dateien sehen ungefähr so aus:
+
==Optionen==
Kint.+008+12315.key
+
*cat /etc/bind/named.conf.options
Kint.+008+12315.private
+
<pre>
Kint.+008+43144.key
+
options {
Kint.+008+43144.private
+
directory "/var/cache/bind";
;Integration der DNSSEC-Schlüssel in die Zone
+
dnssec-validation no;
Die .key-Dateien müssen in die Zonendatei '''/var/cache/bind/int''' eingebunden werden:
+
listen-on-v6 { none; };
*for k in Kint*.key ; do echo \$INCLUDE /var/cache/bind/$k >>  /var/cache/bind/int; done
+
allow-recursion { any; };
 +
        allow-query  { any; };
 +
        allow-transfer { 127.0.0.1; };
 +
};
  
====88.10.in-addr.arpa====
+
</pre>
'''ZSK erzeugen'''
 
*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:
+
==Die Zonenfestlegung==
K88.10.in-addr.arpa.+008+06136.key
+
*cat /etc/bind/named.conf.local
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
 
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'''.
 
 
 
==Anmerkungen zum DNSSEC-Schlüsselwechsel==
 
*[[DNSSEC-Schlüsselwechsel]]
 
 
 
 
 
===BIND9-Konfiguration anpassen ===
 
Die Datei `/etc/bind/named.conf.local` muss angepasst werden, damit die signierten Zonen verwendet werden:
 
 
<pre>
 
<pre>
 
zone "int" {
 
zone "int" {
 
     type master;
 
     type master;
     file "/var/cache/bind/int.signed";
+
    forwarders {};
    allow-query { any; };
+
     file "int.signed";
    dnssec-policy default;
 
    inline-signing yes;
 
 
};
 
};
  
 
zone "88.10.in-addr.arpa" {
 
zone "88.10.in-addr.arpa" {
 
     type master;
 
     type master;
     file "/var/cache/bind/88.10.in-addr.arpa.signed";
+
    forwarders {};
    allow-query { any; };
+
     file "88.10.in-addr.arpa";
    dnssec-policy default;
 
    inline-signing yes;
 
 
};
 
};
 +
</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>
 
</pre>
  
===DNSSEC in BIND9 aktivieren ===
+
*cat /var/cache/bind/88.10.in-addr.arpa
In der Datei `/etc/bind/named.conf.options` folgende Einstellungen setzen:
 
 
<pre>
 
<pre>
options {
+
$TTL 300
         directory "/var/cache/bind";
+
@         IN SOA  dnsgw.int. technik.kit.lab. (
        listen-on-v6 { any; };
+
                2023022010 14400 3600 3600000 86400)
        dnssec-validation auto;
+
            IN NS    dnsgw.int.
};
+
$GENERATE 201-213  $  NS ns.it$.int.
 
</pre>
 
</pre>
  
===Neustart von BIND9 ===
+
==DNSSEC Schlüssel erzeugen==
Nach den Änderungen muss der DNS-Server neu gestartet werden:
+
 
*systemctl restart bind9
+
;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
 +
 
  
===Überprüfung von DNSSEC ===
+
;Erzeugt
Zur Kontrolle, ob DNSSEC korrekt funktioniert:
 
*dig DNSKEY  @localhost +dnssec +nocomments +nostats int
 
 
<pre>
 
<pre>
; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> DNSKEY @localhost +dnssec +nocomments +nostats int
+
/var/cache/bind/int.signed
; (2 servers found)
 
;; global options: +cmd
 
;int. IN DNSKEY
 
int. 3600 IN DNSKEY 257 3 13 T9/K08SYQ/7ZglXeagB72j7N9Y5jPVj5Y0qF2thquvpB2Go1M4A43qQw JYqRhuzomoezctxzL6G/VsP9oXxNLQ==
 
int. 3600 IN RRSIG DNSKEY 13 1 3600 20250327161304 20250313151304 54869 int. qb0Hilp7DnpOQkfDp6GhiX3kJ16pw4ItAe/u+k6Q+9kZbLiRwAaiigGO 5YLwuSKgSGbBcAiUZhpnhBdWgflVhg==
 
 
</pre>
 
</pre>
  
*dig DNSKEY @localhost +dnssec +nocomments +nostats 88.10.in-addr.arpa
+
==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
 
<pre>
 
<pre>
; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> DNSKEY @localhost +dnssec +nocomments +nostats 88.10.in-addr.arpa
+
managed-keys {
; (2 servers found)
+
  int. initial-key 257 3 13 "BASE64-KSK-HIER-EINFÜGEN";
;; global options: +cmd
+
};
;88.10.in-addr.arpa. IN DNSKEY
 
88.10.in-addr.arpa. 3600 IN DNSKEY 257 3 13 bRxcMus3OaNS63VwfNedkyso5Oui+v9gVbM3eg7sN3G43nJqgeCtr5E3 725nyKX30EYZQGiAovYM3rXWi1QS0w==
 
88.10.in-addr.arpa. 3600 IN RRSIG DNSKEY 13 4 3600 20250327161117 20250313151117 39443 88.10.in-addr.arpa. uzTWdjuEy8OlU2u6oex7WWEPb1vJtI7T1MbJy0Smz6ODKdWzYySjT1qU AcZ+aZS/qANqFaUhxFmzugupDzDLrg==
 
 
</pre>
 
</pre>
  
 +
*systemctl restart bind9
  
Falls die Konfiguration korrekt ist, sollten RRSIG-Einträge sichtbar sein.
+
=Ergebnis=
 
+
*Der Fake Root .int ist signiert
=== Fazit ===
+
*Delegationen funktionieren wie zuvor
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.
+
*DNSSEC beginnt beim Resolver durch expliziten Trust-Anker

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