Pseudo second level domain DNSSEC: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(28 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= DNSSEC für die Second-Level-Domain it113.int =
+
=Klonen des Templates=
 +
;Erstellen eines Nameservers laut Plan
 +
;Name ns.it213.int
 +
;Vorläufiger DNS ist der 192.168.X.88
 +
;Der Server ist autoritativ UND rekursiv validierend
  
== Übersicht ==
+
=Installation=
* Die Toplevel-Domain '''int.''' ist bereits mit '''DNSSEC signiert''' und läuft auf '''dnsgw.gw'''.
+
*apt update
* Die Second-Level-Domain '''it113.int''' wird auf '''ns.it113.int''' gehostet.
+
*apt install bind9 bind9-utils
* '''Ziel:''' DNSSEC-Signierung von '''it113.int''' und Veröffentlichung des DS-Records in der Parent-Zone ''int.''.
 
  
== Schlüssel für it113.int generieren (auf ns.it113.int) ==
+
=Auf den Nameservern=
* '''dnssec-keygen -a RSASHA256 -b 2048 -f KSK -n ZONE it113.int'''
 
* '''dnssec-keygen -a RSASHA256 -b 1024 -n ZONE it113.int'''
 
  
== Schlüssel in die Zonendatei eintragen (auf ns.it113.int) ==
+
==Trust Anker einfügen==
* '''cat K*.key >> /etc/bind/zones/it113.int.zone'''
+
*cd /etc/bind/
 +
*wget http://192.168.X.88/trust-anchors.conf
 +
*echo 'include "/etc/bind/trust-anchors.conf";' >> named.conf
  
== Zone signieren (auf ns.it113.int) ==
+
==Optionen==
* '''dnssec-signzone -A -N INCREMENT -o it113.int -t /etc/bind/zones/it113.int.zone'''
+
*cat /etc/bind/named.conf.options
 +
<pre>
 +
options {
 +
        directory "/var/cache/bind";
 +
        forwarders { 192.168.X.88; };
 +
        empty-zones-enable no;
 +
        recursion yes;       
 +
        allow-query { any; };
 +
        allow-transfer { 127.0.0.1; };
 +
        dnssec-validation yes;
 +
};
  
Ergebnis: Die signierte Datei '''it113.int.zone.signed'''.
+
</pre>
  
== Bind konfigurieren, um die signierte Zone zu verwenden (auf ns.it113.int) ==
+
==Zonenfestlegung==
Zonendatei in ''/etc/bind/named.conf.local'' anpassen:
+
*cat /etc/bind/named.conf.local
 
<pre>
 
<pre>
zone "it113.int" {
+
zone "it213.int" IN {
    type master;
+
    type master;
    file "/etc/bind/zones/it113.int.zone.signed";
+
    file "it213.int.signed";
    allow-transfer { any; };  
+
};
    allow-query { any; };
+
 
 +
zone "213.88.10.in-addr.arpa" IN {
 +
    type master;
 +
    file "213.88.10.in-addr.arpa";
 
};
 
};
 
</pre>
 
</pre>
  
Neustart von BIND:
+
=Zonen selbst (unsigniert)=
* '''systemctl restart bind9'''
+
 
 +
*cat /var/cache/bind/it213.int
 +
<pre>
 +
$TTL 300
 +
@          IN SOA  ns.it213.int. technik.xinux.de. (
 +
                        2026031701
 +
                        14400
 +
                        3600
 +
                        3600000
 +
                        86400
 +
                    )
 +
        IN NS      ns
 +
        IN MX 10  mail
 +
 
 +
ns        IN A      10.88.213.21
 +
www      IN A      10.88.213.11
 +
mail      IN A      10.88.213.3
 +
fw        IN A      10.88.213.1
 +
proxy    IN A      10.88.213.4
 +
checkmk  IN A      10.88.213.5
 +
revproxy  IN A      10.88.213.41
 +
nextcloud IN A      10.88.213.8
 +
docker    IN A      10.88.213.9
 +
</pre>
 +
 
 +
*cat /var/cache/bind/213.88.10.in-addr.arpa
 +
<pre>
 +
$TTL 300
 +
@          IN SOA  ns.it213.int. technik.xinux.de. (
 +
                        2026031701
 +
                        14400
 +
                        3600
 +
                        3600000
 +
                        86400
 +
                    )
 +
        IN NS      ns.it213.int.
  
== DS-Records an die Toplevel-Domain übergeben (auf ns.it113.int) ==
+
1      IN PTR    fw.it213.int.
* '''dig +short DS it113.int'''
+
21      IN PTR    ns.it213.int.
 +
11      IN PTR    www.it213.int.
 +
3      IN PTR    mail.it213.int.
 +
4      IN PTR    proxy.it213.int.
 +
5      IN PTR    checkmk.it213.int.
 +
8      IN PTR    nextcloud.it213.int.
 +
9      IN PTR    docker.it213.int.
 +
41      IN PTR    revproxy.it213.int.
  
Den ausgegebenen DS-Record in die Zonendatei von ''int.'' auf ''dnsgw.gw'' eintragen.
+
</pre>
  
== DS-Records aller Second-Level-Zonen in die Toplevel-Domain eintragen ==
+
==Verzeichnis wechseln==
Falls mehrere Second-Level-Zonen mit DNSSEC signiert werden sollen, müssen alle **DS-Records** dieser Zonen in die **int**-Zone eingetragen werden. Das bedeutet:
+
*cd /var/cache/bind/
* Falls du **alle 13 Second-Level-Zonen gleichzeitig signierst**, dann reicht **eine einzige Neusignierung** der **int**-Zone.
 
* Falls du die DS-Records **zu unterschiedlichen Zeiten aktualisierst**, muss die **int**-Zone nach jeder Änderung neu signiert werden.
 
  
In der Datei '''/etc/bind/zones/int.zone''':
+
=DNSSEC Schlüssel erzeugen=
 +
 
 +
;Forward Zone
 +
*dnssec-keygen -a RSASHA256 -b 2048 -n ZONE it213.int
 +
*dnssec-keygen -a RSASHA256 -b 4096 -f KSK -n ZONE it213.int
 +
 
 +
=DNSKEY einbinden=
 +
 
 +
;Forward
 +
*for k in Kit213.int.+*.key ; do echo "\$INCLUDE $k" >> /var/cache/bind/it213.int; done
 +
 
 +
=Zonen signieren=
 +
 
 +
*dnssec-signzone -A -N INCREMENT -o it213.int -t /var/cache/bind/it213.int
 +
 
 +
;Erzeugt
 
<pre>
 
<pre>
it113.int. IN DS 12345 8 2 49FD74D5C4A7AE7D15A57A15B22D...
+
/var/cache/bind/it213.int.signed
it114.int. IN DS 67890 8 2 28A1F3D4C5E7B890A67B22A3D4F9...
+
</pre>
...</pre>
+
 
 +
*systemctl restart named
 +
 
 +
=DS Record für Fake Root erzeugen=
 +
 
 +
;DS aus signierter Zone erzeugen
 +
*dnssec-dsfromkey -f /var/cache/bind/it213.int.signed it213.int
 +
 
 +
;DS Eintrag an Fake Root weitergeben
 +
;Im Fake Root in Zone int einfügen
  
== Warum muss die Toplevel-Zone neu signiert werden? ==
+
;Beispiel:
Die **int**-Zone enthält die **DS-Records** für alle signierten Second-Level-Zonen. Sobald ein neuer **DS-Record** eingetragen oder geändert wird, muss die gesamte **int**-Zone neu signiert werden, damit die neuen Einträge verifiziert werden können.
+
;it213      IN NS ns.it213.int.
 +
;ns.it213.int. IN A 10.88.213.21
 +
;it213.int. IN DS 12345 8 2 ABCDEF123456....
  
== Wird die Toplevel-Zone bei jeder Änderung einer Second-Level-Zone neu signiert? ==
+
;Danach Fake Root neu signieren
Nein. Die **int**-Zone muss nur dann neu signiert werden, wenn sich ein **DS-Record** ändert, also z. B. ein neuer Key generiert wird. Andere Änderungen in ''it113.int'' oder anderen Second-Level-Zonen haben keine Auswirkungen auf die **int**-Zone**.
+
*cd /var/cache/bind
 +
*dnssec-signzone -A -N INCREMENT -o int int
 +
*rndc reload
  
== Toplevel-Zone neu signieren (auf dnsgw.gw) ==
+
=Handling und Logging=
* '''dnssec-signzone -A -N INCREMENT -o int -t /etc/bind/zones/int.zone'''
+
*systemctl restart bind9
 +
*journalctl -fu bind9
 +
*journalctl -u bind9 -g it213.int
  
Neustart von BIND:
+
=Validierungstest=
* '''systemctl restart bind9'''
 
  
== Überprüfung (auf beliebigem Client) ==
+
;Forward Validierung
* '''dig +dnssec it113.int'''
+
*dig www.it213.int +dnssec
* '''dig +dnssec www.it113.int'''
 
  
Falls alles korrekt ist, sollte das '''AD-Bit''' (Authentic Data) gesetzt sein.
+
;Antwort muss AD-Flag enthalten

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

Klonen des Templates

Erstellen eines Nameservers laut Plan
Name ns.it213.int
Vorläufiger DNS ist der 192.168.X.88
Der Server ist autoritativ UND rekursiv validierend

Installation

  • apt update
  • apt install bind9 bind9-utils

Auf den Nameservern

Trust Anker einfügen

Optionen

  • cat /etc/bind/named.conf.options
options {
        directory "/var/cache/bind";
        forwarders { 192.168.X.88; };
        empty-zones-enable no;
        recursion yes;        
        allow-query { any; };
        allow-transfer { 127.0.0.1; };
        dnssec-validation yes;
};

Zonenfestlegung

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

zone "213.88.10.in-addr.arpa" IN {
     type master;
     file "213.88.10.in-addr.arpa";
};

Zonen selbst (unsigniert)

  • cat /var/cache/bind/it213.int
$TTL 300
@           IN SOA  ns.it213.int. technik.xinux.de. (
                        2026031701
                        14400
                        3600
                        3600000
                        86400
                    )
        IN NS      ns
        IN MX 10   mail

ns        IN A       10.88.213.21
www       IN A       10.88.213.11
mail      IN A       10.88.213.3
fw        IN A       10.88.213.1
proxy     IN A       10.88.213.4
checkmk   IN A       10.88.213.5
revproxy  IN A       10.88.213.41
nextcloud IN A       10.88.213.8
docker    IN A       10.88.213.9
  • cat /var/cache/bind/213.88.10.in-addr.arpa
$TTL 300
@           IN SOA  ns.it213.int. technik.xinux.de. (
                        2026031701
                        14400
                        3600
                        3600000
                        86400
                    )
        IN NS      ns.it213.int.

1       IN PTR     fw.it213.int.
21      IN PTR     ns.it213.int.
11      IN PTR     www.it213.int.
3       IN PTR     mail.it213.int.
4       IN PTR     proxy.it213.int.
5       IN PTR     checkmk.it213.int.
8       IN PTR     nextcloud.it213.int.
9       IN PTR     docker.it213.int.
41      IN PTR     revproxy.it213.int.

Verzeichnis wechseln

  • cd /var/cache/bind/

DNSSEC Schlüssel erzeugen

Forward Zone
  • dnssec-keygen -a RSASHA256 -b 2048 -n ZONE it213.int
  • dnssec-keygen -a RSASHA256 -b 4096 -f KSK -n ZONE it213.int

DNSKEY einbinden

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

Zonen signieren

  • dnssec-signzone -A -N INCREMENT -o it213.int -t /var/cache/bind/it213.int
Erzeugt
/var/cache/bind/it213.int.signed
  • systemctl restart named

DS Record für Fake Root erzeugen

DS aus signierter Zone erzeugen
  • dnssec-dsfromkey -f /var/cache/bind/it213.int.signed it213.int
DS Eintrag an Fake Root weitergeben
Im Fake Root in Zone int einfügen
Beispiel
it213 IN NS ns.it213.int.
ns.it213.int. IN A 10.88.213.21
it213.int. IN DS 12345 8 2 ABCDEF123456....
Danach Fake Root neu signieren
  • cd /var/cache/bind
  • dnssec-signzone -A -N INCREMENT -o int int
  • rndc reload

Handling und Logging

  • systemctl restart bind9
  • journalctl -fu bind9
  • journalctl -u bind9 -g it213.int

Validierungstest

Forward Validierung
  • dig www.it213.int +dnssec
Antwort muss AD-Flag enthalten