SwordArMor

knot : reverse automatique et DNSSEC

Reverse simple

Il peut arriver, pour une raison X ou Y, que vous ayez envie de servir des reverses DNS sur une grande plage d’adresses IP. Par exemple, admettons que votre FAI vous route tout un bloc, vous n’allez pas entrer chaque reverse pour chaque machine qui reçoit une IP.

knot a un module nommé mod-synth-record qui permet cela. Son utilisation est relativement simple. On commence par définir deux zones basiques. Une pour servir les PTR, et l’autre pour servir les A/AAAA associés. En effet, un reverse doit marcher dans les deux sens.
Zone de résolution directe :

@	864000	IN	SOA	tregon-grifon.swordarmor.fr. hostmaster.swordarmor.fr. (
		2 3600 900 1209600 43200 )

	864000	IN	NS	tregon-grifon.swordarmor.fr.

		IN	AAAA	2a00:5884:8316::1
			A	89.234.186.16
Zone de résolution inverse :
@	864000	IN	SOA	tregon-grifon.swordarmor.fr. hostmaster.swordarmor.fr. (
		2 3600 900 1209600 43200 )
	864000	IN	NS	tregon-grifon.swordarmor.fr.
Ensuite, nous expliquons à knot comment remplir ces deux zones automatiquement :
mod-synth-record:
  - id: tregon-grifon
    type: forward
    prefix: ip6-
    ttl: 400
    network: 2a00:5884:8316::/48

mod-synth-record:
  - id: tregon-grifon-reverse
    type: reverse
    prefix: ip6-
    origin: tregon-grifon.swordarmor.fr
    ttl: 400
    network: 2a00:5884:8316::/48
Puis nous précisons à knot qu’il faut utiliser ces modules pour les deux zones :
  - domain: tregon-grifon.swordarmor.fr
    file: tregon-grifon.swordarmor.fr.zone # Must exist
    module: mod-synth-record/tregon-grifon

  - domain: 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa
    file: 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa.zone # Must exist
    module: mod-synth-record/tregon-grifon-reverse
Notre serveur DNS est maintenant en capacité de répondre au A et au PTR :
alarig@pikachu ~ % dig +short -x 2a00:5884:8316::1234 @tregon-grifon.swordarmor.fr
ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr.
alarig@pikachu ~ % dig +short -t AAAA ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr. @tregon-grifon.swordarmor.fr
2a00:5884:8316::1234

Et nous pouvons même définir des reverses personnalisés en les mettant dans le fichier de zone.

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR tregon-grifon.swordarmor.fr.
6.2.4.c.f.6.5.5.d.7.4.d.0.4.d.f.3.5.6.2 IN PTR pika-tregon.swordarmor.fr.
alarig@pikachu ~ % dig +short -x 2a00:5884:8316::1 @tregon-grifon.swordarmor.fr
tregon-grifon.swordarmor.fr.
alarig@pikachu ~ % dig +short -x 2a00:5884:8316:2653:fd40:d47d:556f:c426 @tregon-grifon.swordarmor.fr
pika-tregon.swordarmor.fr.

Mettons maintenant un peu de DNSSEC

(parce que c’est très important d’avoir du DNSSEC sur un reverse)

Arrivé ici, nous pouvons nous dire que knot va, comme à son habitude, gérer le DNSSEC comme un grand sans rien avoir besoin de toucher.
Alors oui et non. Il va générer les RRSIG pour les RRs que nous avons entré dans notre zone (c’est à dire ici un A, un NS, un SOA, un AAAA, plus le NSEC et le DNSKEY générés par knot), mais pas pour tout ce qui est généré à la volée, nous avons un SERVFAIL au lieu d’une réponse.

alarig@pikachu ~ % dig -t RRSIG tregon-grifon.swordarmor.fr.

; <<>> DiG 9.10.4-P3 <<>> -t RRSIG tregon-grifon.swordarmor.fr.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53081
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;tregon-grifon.swordarmor.fr.	IN	RRSIG

;; ANSWER SECTION:
tregon-grifon.swordarmor.fr. 3600 IN	RRSIG	A 13 3 3600 20161208210625 20161124210625 28440 tregon-grifon.swordarmor.fr. YlT/vCMLDyGHwKLoMOdQqENwWTyhphrbBatKhhtvCteTubwBp9FCrf9b /jc0cRM07a321de7kw3cYPD3lfbPYA==
tregon-grifon.swordarmor.fr. 864000 IN	RRSIG	NS 13 3 864000 20161208210625 20161124210625 28440 tregon-grifon.swordarmor.fr. l6HiWFaqz3Hys7aknEHEG6woKJ9xdYqopxNUTOYmMk94733jMnDiH5bx fDKGPjgyVCkbQWfFsJCr/udwnelSaQ==
tregon-grifon.swordarmor.fr. 864000 IN	RRSIG	SOA 13 3 864000 20161208210625 20161124210625 28440 tregon-grifon.swordarmor.fr. OUWibAYe8oyRBWgGyPAxG0etUcGQe1ZEZ+1ywZIi1xQvhWMQy/0B+HNH RyQYYdJ9eXqXPP3uQRyXPTtsa+9KKQ==
tregon-grifon.swordarmor.fr. 3600 IN	RRSIG	AAAA 13 3 3600 20161208210625 20161124210625 28440 tregon-grifon.swordarmor.fr. NIEEeURn0/RH9IqWxGM9W74Gf8UqDh4Bqap0NlZ4XQ+95FpfylAQKxo0 KZUNCDCXCFQ4Rpg/dJH4EhpWw8Pxtw==
tregon-grifon.swordarmor.fr. 43200 IN	RRSIG	NSEC 13 3 43200 20161208210625 20161124210625 28440 tregon-grifon.swordarmor.fr. 6T2+GjrRU8qU/zGNmY8R9bmkNUFGPJuJQP2qkhakV0GeiyseEWA5yPDE /YIELH04KKAE3yrudo8S6xcaQ6DveQ==
tregon-grifon.swordarmor.fr. 864000 IN	RRSIG	DNSKEY 13 3 864000 20161208210625 20161124210625 57104 tregon-grifon.swordarmor.fr. F/jepDBqQriHFUSN8mnkiNZ6l3vP5K8ob44yuHkHBupimIo4S6hvuZXD F7AnbF5GtVsZPDdjA4qumkv1HaiTFQ==

;; Query time: 160 msec
;; SERVER: 2a00:5884:8218::1#53(2a00:5884:8218::1)
;; WHEN: Mon Nov 28 11:02:27 CET 2016
;; MSG SIZE  rcvd: 794

alarig@pikachu ~ % dig -t RRSIG ip6-2a00-5884-8316-2653-fd40-d47d-556f-c427.tregon-grifon.swordarmor.fr.

; <<>> DiG 9.10.4-P3 <<>> -t RRSIG ip6-2a00-5884-8316-2653-fd40-d47d-556f-c427.tregon-grifon.swordarmor.fr.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 27161
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ip6-2a00-5884-8316-2653-fd40-d47d-556f-c427.tregon-grifon.swordarmor.fr. IN RRSIG

;; Query time: 457 msec
;; SERVER: 2a00:5884:8218::1#53(2a00:5884:8218::1)
;; WHEN: Mon Nov 28 11:02:33 CET 2016
;; MSG SIZE  rcvd: 100

Mais l’équipe de nic.cz a déjà pensé à tout en développant un autre module qui permet de signer toute une zone à la volée. Il s’agît de mod-online-sign.
Par contre, ce module n’a pas encore été mis à jour pour supporter la nouvelle mouture de gestion DNSSEC, il faut toujours utiliser keymgr en mode de compatibilité (option -l). Il est important de noter que le fichier de zone référencé dans la configuration ne doit pas comporter de signatures DNSSEC et que le système de signature classique doit être désactivé.
Nous avons donc une configuration comme ceci :

template:
  - id: default
    storage: "/var/lib/knot"
    kasp-db: kasp

mod-online-sign:
   - id: default
  - domain: tregon-grifon.swordarmor.fr
    file: tregon-grifon.swordarmor.fr.zone.nodnssec # Must exist
    module: [mod-synth-record/tregon-grifon, mod-online-sign/default]
    dnssec-signing: false
Et nous générons les clés comme à la bonne époque :
eddy ~ # mkdir /var/lib/knot/kasp
eddy ~ # chown knot: /var/lib/knot/kasp/
eddy ~ # su - knot -s /bin/sh 
No directory, logging in with HOME=/
$ cd /var/lib/knot/kasp/
$ keymgr -l init
$ keymgr -l zone add tregon-grifon.swordarmor.fr
$ keymgr -l zone key generate tregon-grifon.swordarmor.fr algorithm ecdsap256sha256 size 256
# je n’ai pas généré de clé pour 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. car
# 4.8.8.5.0.0.a.2.ip6.arpa. n’est pas encore signé
Pour finir, nous devons publier le DS dans la zone parente, ainsi que le NS pour la délégation et le glue record, comme toujours en DNS.
tregon-grifon.swordarmor.fr.	10800	A	89.234.186.16
tregon-grifon.swordarmor.fr.	10800	AAAA	2a00:5884:8316::1
tregon-grifon.swordarmor.fr.	10800	NS	tregon-grifon.swordarmor.fr.
tregon-grifon.swordarmor.fr.	10800	DS	(22942 13 2 E4E1B6EFF9D473905D0DA9C5C6CF43D9BC38E73D44E9579723748D8CD8AE3C1C)

Et maintenant, si nous demandons un AAAA autogénéré pour cette zone, nous avons bien le flag ad pour Autentic Data, c’est à dire que la vérification DNSSEC a fonctionné.

alarig@pikachu ~ % dig -t AAAA ip6-2a00-5884-8316-2653-fd40-d47d-556f-c427.tregon-grifon.swordarmor.fr.
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35285
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; ANSWER SECTION:
ip6-2a00-5884-8316-2653-fd40-d47d-556f-c427.tregon-grifon.swordarmor.fr. 400 IN	AAAA 2a00:5884:8316:2653:fd40:d47d:556f:c427

Redondance

Si vous gérez les reverses d’un range IP un temps soit peu conséquent (on va dire, un /24 d’un FAI par exemple), il est plus que probable que vous vouliez un peu de redondance.

Sachez alors qu’il faudra soit utiliser un autre knot, soit utiliser un autre système de reverse automatique si vous ne voulez pas avoir deux knot pour cette zone. En effet, les enregistrements étant générés à la volée, il n’est pas possible de faire un transfert de la zone complète comme nous en avons l’habitude.

Cependant, il faudra tout de même commencer par avoir une réplication des zones originales.
Sur le master :


remote:
  - id: freebsd
    address: 2a01:cb08:898c:fc00:5054:ff:fe0e:b8e

acl:
  - id: acl_freebsd
    address: 2a01:cb08:898c:fc00:5054:ff:fe0e:b8e
    action: transfer

  - domain: tregon-grifon.swordarmor.fr
    file: tregon-grifon.swordarmor.fr.zone.nodnssec # Must exist
    module: [mod-synth-record/tregon-grifon, mod-online-sign/default]
    dnssec-signing: false
    notify: freebsd
    acl: acl_freebsd

  - domain: 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa
    file: 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa.zone.nodnssec # Must exist
    module: [mod-synth-record/tregon-grifon-reverse, mod-online-sign/default]
    dnssec-signing: false
    notify: freebsd
    acl: acl_freebsd
Par rapport à la configuration précédente, nous n’avons fait que ajouter une machine, donner le droit la notifier de la mise à jour de la zone, puis de l’assigner à nos deux zones. Sur cette machine (le slave), nous allons donc configurer le knot :

remote:
  - id: tregon
    address: 2a00:5884:8316::1

acl:
  - id: acl_tregon
    address: 2a00:5884:8316::1
    action: notify

template:
  - id: default
    storage: "/var/db/knot"
    kasp-db: kasp

mod-synth-record:
  - id: tregon-grifon
    type: forward
    prefix: ip6-
    ttl: 400
    network: 2a00:5884:8316::/48

mod-synth-record:
  - id: tregon-grifon-reverse
    type: reverse
    prefix: ip6-
    origin: tregon-grifon.swordarmor.fr
    ttl: 400
    network: 2a00:5884:8316::/48

mod-online-sign:
   - id: default

  - domain: tregon-grifon.swordarmor.fr
    file: tregon-grifon.swordarmor.fr.zone
    master: tregon
    acl: acl_tregon
    module: [mod-synth-record/tregon-grifon, mod-online-sign/default]

  - domain: 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa
    file: 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa.zone
    master: tregon
    acl: acl_tregon
    module: [mod-synth-record/tregon-grifon-reverse, mod-online-sign/default]
Nous voyons ici qu’il faut également répéter la configuration de mod-synth-record et de mod-online-sign. En effet, tous les enregistrements issus de ces modules sont générés à la volée, ils ne sont donc pas à proprement parler dans la zone. Le daemon knot va les recalculer à chaque requête, alors que pour une zone classique, il se contente d’aller lire le fichier.

Aussi, pour que le DNSSEC soit disponible sur les deux serveurs, il faut avoir une copie de la KSK sur chaque serveur : scp -r /var/lib/knot/kasp/ root@freebsd.swordarmor.fr:/var/db/knot/.
Ici j’ai copié tout le dossier car je n’ai pas d’autre clé, mais il est plus sage de ne copier que les fichiers nécessaires.

Si nous testons, nous voyons que notre nouveau serveur répond bien les résultats attendus, accompagnés de leur RRSIG :

alarig@pikachu ~ % dig +dnssec -x 2a00:5884:8316:2653:fd40:d47d:556f:c426 @freebsd.swordarmor.fr                  

; <<>> DiG 9.10.4-P4 <<>> +dnssec -x 2a00:5884:8316:2653:fd40:d47d:556f:c426 @freebsd.swordarmor.fr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59166
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;6.2.4.c.f.6.5.5.d.7.4.d.0.4.d.f.3.5.6.2.6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. IN PTR

;; ANSWER SECTION:
6.2.4.c.f.6.5.5.d.7.4.d.0.4.d.f.3.5.6.2.6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. 3600 IN PTR pika-tregon.swordarmor.fr.
6.2.4.c.f.6.5.5.d.7.4.d.0.4.d.f.3.5.6.2.6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. 3600 IN RRSIG	PTR 13 34 3600 20170114212255 20170113202255 3655 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. 0YE68evOCjovGMoY8X/32mvWjAdEkEod/SjXPMTS5YGUvmH+gvo3R/hP H6yxOtMYygb+ZtXKakIVrIH65kV0GA==

;; Query time: 52 msec
;; SERVER: 2a01:cb08:898c:fc00:5054:ff:fe0e:b8e#53(2a01:cb08:898c:fc00:5054:ff:fe0e:b8e)
;; WHEN: Fri Jan 13 21:22:56 CET 2017
;; MSG SIZE  rcvd: 268

alarig@pikachu ~ % dig +dnssec -x 2a00:5884:8316::1234 @freebsd.swordarmor.fr      

; <<>> DiG 9.10.4-P4 <<>> +dnssec -x 2a00:5884:8316::1234 @freebsd.swordarmor.fr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13829
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;4.3.2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. IN PTR

;; ANSWER SECTION:
4.3.2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. 400 IN PTR ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr.
4.3.2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. 400 IN RRSIG PTR 13 34 400 20170114210829 20170113200829 3655 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. QxPtzxT62oilXha9Ns4EyfOtj8fCBqhCCxI0SfKb4Yol61c2Pjum/DcZ fBIiMWdN+7VT6/Q2vs6S8uKjd1THOA==

;; Query time: 55 msec
;; SERVER: 2a01:cb08:898c:fc00:5054:ff:fe0e:b8e#53(2a01:cb08:898c:fc00:5054:ff:fe0e:b8e)
;; WHEN: Fri Jan 13 21:08:29 CET 2017
;; MSG SIZE  rcvd: 314

alarig@pikachu ~ % dig +dnssec -t AAAA ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr. @freebsd.swordarmor.fr

; <<>> DiG 9.10.4-P4 <<>> +dnssec -t AAAA ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr. @freebsd.swordarmor.fr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58686
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr. IN AAAA

;; ANSWER SECTION:
ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr. 400 IN	AAAA 2a00:5884:8316::1234
ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr. 400 IN	RRSIG AAAA 13 4 400 20170114212107 20170113202107 22942 tregon-grifon.swordarmor.fr. NpU/Q+vC3BzR1iLeqIWEWNlo0MMe+aUxDeVIkCd3Z5wUnwgmAsz9oXaS DjkGEfFvR3Wpbgp/RbjDlPNu7qhxqA==

;; Query time: 43 msec
;; SERVER: 2a01:cb08:898c:fc00:5054:ff:fe0e:b8e#53(2a01:cb08:898c:fc00:5054:ff:fe0e:b8e)
;; WHEN: Fri Jan 13 21:21:08 CET 2017
;; MSG SIZE  rcvd: 251

Documentation officielle de knot

Automatic reverse records
online-sign

Comprendre les grands principes du SSL/TLS

Histoire et terminologie

SSL est un acronyme anglais voulant dire Secure Sockets Layer. Il a été initialement développé par Netscape Communications (qui a développé Netscape Navigator qui a servi de base à Mozilla pour firefox). Il existe en trois versions : SSLv1, SSLv2 et SSLv3. Aucune de ces versions n’est …

Lire la suite

Script de regénération d’un certificat let’s encrypt à la création d’un site sur wordpress

Dans le cadre de gozmail, nous proposons également l’hébergement de blogs pour nos adhérents. Nous utilisons wordpress car il dispose d’une fonctionnalité qui permet de créer un réseau de sites. Ainsi, chaque adhérent dispose de sonsite.log.bzh et ne peut pas aller fouiner chez son voisin.

Au …

Lire la suite

Mettre en œuvre BCP38 avec un routeur FreeBSD en utilisant pf

BCP38 (pour Best Current Practice numéro 38) est un document de l’IETF qui présente les bonnes pratiques en matière de filtrage de trafic, notamment vis à vis de l’IP source. En effet, par défaut un routeur ne regarde que les IPs de destinations afin de savoir vers où …

Lire la suite

Gestion automatique de DNSSEC avec OpenDNSSEC et nsd

Introduction

J’avais déjà parlé du DNSSEC avec knot. Ici l’article sera similaire mais utilisera deux daemons différents, nsd pour le serveur faisant autorité et OpenDNSSEC pour la gestion du DNSSEC.
Alors là, il va y avoir des petits malins qui vont me dire « oui mais tu sais déjà …

Lire la suite

Le MTU et le MSS

En théorie

Le MTU est la taille maximale qu’un paquet peut avoir lors de son transport sur le réseau. Elle est généralement de 1500 octets. À partir de ce MTU, nous calculons le MSS, c’est à dire la quantité maximale de données que nous pouvons atteindre dans un …

Lire la suite

Gestion automatique de DNSSEC avec knot

Depuis quelques temps, je me suis mis au DNSSEC. Comme je suis feignant, je n’ai pas envie de re-signer ma zone à la main tous les jours :) Comme j’ai vu que knot savait gérer la signature DNSSEC comme un grand, je me suis dit que ça serait une …

Lire la suite

Complétion de dig avec zsh

J’utilise zsh comme shell par défaut sur mon laptop. J’en suis satisfait, sauf que je n’avais pas de complétion pour la commande dig(1).
En demandant comment utiliser la complétion de bash pour cette commande, un gentil monsieur a tout simplement écrit un script de complétion pour …

Lire la suite

Problèmes avec systemd et pourquoi j’aime l’init de BSD

Lire la suite

Mise en place d’un tunnel L2TP chiffré avec IPsec autentifié avec radius

Cette infrastructure a été mise en œuvre au sein de grifon afin de fournir un VPN le plus proche possible de la collecte ADSL.

Côté serveur

Le radius

Le radius sert à authentifier les utilisateurs et à donner les autorisations qui leur sont relatives (comme par exemple, quelle adresse IP …

Lire la suite

Page 1 / 3 »