Installer un serveur DNS bind9.x dans un chroot

Auteur : Olivier BOYER - oboyer () ajoute ! org

Mots clés

NetBSD 1.6, NetBSD 2.0, DNS, bind, bind9, chroot

Introduction

Ce document présente comment installer un serveur de noms bind9 dans une cage (chroot), sur un système NetBSD-1.6.x (idem sur un 2.0) Le daemon named doit s'exécuter sous l'identité d'utilisateur non-privilegié.

Présentation de la maquette

  • L'installation de bind9 est faite via l'arbre des packages.
  • La cage est située sous/var/chroot/named.
  • Le processus named fonctionne sous l'identité de l'utilisateur “named”

Note

Toutes les commandes présentées ici, sont à executer,sauf mention contraire, en tant qu'administrateur de la machine.

Avant-propos

Le système NetBSD-1.6.x (et 2.x) est fourni avec un bind8 (/usr/sbin/named). Le présent document n'utilise pas cette version, et lui préfère la version 9, installée depuis l'arbre des packages.

La version installée est la dernière en date à ce jour, la 9.2.3

Sur un système NetBSD-1.6.x (et 2.x), sont déjà crées :

  • l'utilisateur et le group named
# grep named /etc/passwd
named:*:14:14:& pseudo-user:/var/chroot/named:/sbin/nologin
#
# grep named /etc/group
named:*:14:
  • la cage /var/chroot/named
# ls -Rl /var/chroot/named                  
total 8
drwxr-xr-x  2 root  wheel  512 Apr  9  2003 dev
drwxr-xr-x  3 root  wheel  512 Apr  9  2003 etc
drwxr-xr-x  3 root  wheel  512 Apr  9  2003 usr
drwxr-xr-x  4 root  wheel  512 Apr  9  2003 var

/var/chroot/named/dev:

/var/chroot/named/etc:
total 2
drwxr-xr-x  3 root  wheel  512 Apr  9  2003 namedb

/var/chroot/named/etc/namedb:
total 2
drwxrwxr-x  2 named  named  512 Apr  9  2003 cache

/var/chroot/named/etc/namedb/cache:

/var/chroot/named/usr:
total 2
drwxr-xr-x  2 root  wheel  512 Apr  9  2003 libexec

/var/chroot/named/usr/libexec:

/var/chroot/named/var:
total 4
drwxrwxr-x  2 root  named  512 Apr  9  2003 run
drwxrwxr-t  2 root  named  512 Apr  9  2003 tmp

/var/chroot/named/var/run:

/var/chroot/named/var/tmp:

Installer bind9

Compilation du package bind9 (via les packages)

Le package sera installé sous l'arborescence /usr/pkg

Pour s'en assurer, executer la commande suivante :

# cd /usr/pkgsrc/net/bind9
# make show-var VARNAME=PREFIX
/usr/pkg
#
# make show-var VARNAME=LOCALBASE
/usr/pkg

Voici les options de compilations extraites du fichier /usr/pkgsrc/net/bind9/Makefile :

CONFIGURE_ARGS+=--with-libtool=yes \
	--sysconfdir=/etc \
	--localstatedir=/var \
	--with-openssl=${SSLBASE}
BUILD_DEFS+=    USE_INET6

Lancer la compilation :

# cd /usr/pkgsrc/net/bind9
# make install clean clean-depends

Apres installation, les binaires et scritps suivants sont ajoutés au système :

/usr/pkg/bin/dig
/usr/pkg/bin/host
/usr/pkg/bin/isc-config.sh
/usr/pkg/bin/nslookup
/usr/pkg/bin/nsupdate
/usr/pkg/etc/rc.d/lwresd
/usr/pkg/etc/rc.d/named9
/usr/pkg/sbin/dnssec-keygen
/usr/pkg/sbin/dnssec-makekeyset
/usr/pkg/sbin/dnssec-signkey
/usr/pkg/sbin/dnssec-signzone
/usr/pkg/sbin/lwresd
/usr/pkg/sbin/named
/usr/pkg/sbin/named-checkconf
/usr/pkg/sbin/named-checkzone
/usr/pkg/sbin/rndc
/usr/pkg/sbin/rndc-confgen

Note : les autres fichiers ne sont pas listés ici, pour obtenir la liste complète, executez la commande :

$ pkg_info -L bind-9.2.3nb1

Fin de l'installation

Depuis la version 9.2.0, bind utilise le device /dev/random. Plus précisemment, c'est rndc(1) qui l'utilise.

Pour créer le device /dev/random dans la cage, exécutez les commandes suivantes :

# cd /var/chroot/named/dev/
# /dev/MAKEDEV random
# ls
random  urandom

Modification des fichiers de démarrage

/etc/rc.conf

Vérifier que le bind livré avec le système (/usr/sbin/named) est bien inactif, et qu'il n'est pas lancé au démarrage. Ajouter pour ce faire, les lignes suivantes au fichier /etc/rc.conf :

# Do not use sytem'bind, use package'one (bind9)
#bind9 is loaded at boot time via /etc/rc.local
named=NO

/etc/rc.conf.d/named9

Pour activer le démarrage bind9 et lui passer les arguments adequats, créer le fichier : /etc/rc.conf.d/named9 avec les permissions suivantes : 644, root wheel

# cat /dev/null > /etc/rc.conf.d/named9
# chown root:wheel /etc/rc.conf.d/named9
# chmod 644 /etc/rc.conf.d/named9

Voici un exemple de fichier /etc/rc.conf.d/named9 :

#/etc/rc.conf.d/named9
#
# Used by third party script: /usr/pkg/etc/rc.d/named9

# Start bind9 in a chroot compartment with a non-priviledged user
named9=YES
named_flags="-t /var/chroot/named -c /etc/named.conf -u named"

#EOF

/usr/pkg/etc/rc.d/named9

Ce fichier permet de démarrer, arréter le daemon automatiquement au demarrage et à l'arrêt du système. Cependant, dans sa configuration par défaut, ce fichier ne prevoit pas que named tourne dans une cage.

Il faut modifier la variable pidfile pourqu'elle prenne en compte la cage.

#default# pidfile="/var/run/${name}.pid"
pidfile="/var/chroot/named/var/run/${name}.pid"

/etc/rc.local

Pour lancer bind9 au démarrage de la machine, ajouter à la fin du fichier /etc/rc.local les lignes suivantes :

# Start bind9
if [ -x /usr/pkg/etc/rc.d/named9 ]; then
        /usr/pkg/etc/rc.d/named9 start
fi

Créer les fichiers de la base de noms

Le systeme NetBSD-1.6.x (et 2.x) est fourni avec un exemple de base de données de noms, situé sous /etc/namedb. Ces fichiers pourront servir de base de travail.

Sinon, vous trouverez en Annexe les fichiers :

  • etc/named.conf
  • standard/root.hint
  • standard/localhost
  • standard/loopback
  • standard/loopback6.arpa
  • standard/loopback6.int
# cd /etc
# ls -l namedb/                                               
total 8
-rw-r--r--  1 root  wheel   259 Apr  9  2003 127
-rw-r--r--  1 root  wheel   286 Apr  9  2003 localhost
-rw-r--r--  1 root  wheel   262 Apr  9  2003 loopback.v6
-rw-r--r--  1 root  wheel  1085 Apr  9  2003 named.conf
-rw-r--r--  1 root  wheel  2563 Apr  9  2003 root.cache
#
# mkdir -p /var/chroot/named/namedb/standard
# mkdir /var/chroot/named/namedb/master
# mkdir /var/chroot/named/namedb/slave
# cp /etc/namedb/* /var/chroot/named/namedb/standard
# mv /var/chroot/named/namedb/standard/named.conf /var/chroot/named/etc
#

Utiliser rndc pour gérer bind9 dans la cage

La commande rndc(8) [remote name daemon control] permet à l'administateur sytème de contrôler les opérations du daemon named. Elle remplace la commande ndc(8) des anciennes versions de named.

rndc(8) communique avec le serveur via le port tcp 945 (par défaut).

Un fichier de configuration est nécessaire. En effet, toutes les communications avec le serveur sont authentifiées par des signatures numériques qui reposent sur un secret partagé. Ce secret n'est accessible QUE par un fichier de configuration (par défaut : /etc/rndc.conf).

Si le fichier /etc/rndc.conf n'existe pas, rndc examine le contenu du fichier /etc/rndc.key.

Ce fichier a été crée pour des raisons de compatibilités avec bind8. En effet cette version n'implemente pas la signature numérique de ses messages dans le canal de commande. Le fichier rndc.key permet d'utiliser un fichier de configuration bind8 avec un serveur en bind9 sans modification. La commande rndc fonctionnera de la meme facon que ndc.

La commande rndc(8) utilise 2 fichiers de configuration :

  • /etc/rndc.conf
  • /etc/rndc.key (pour compatibilité avec bind8)

La commande rndc-confgen(8) permet de générer ces deux fichiers.

Créer le fichier /etc/rndc.conf

Exécuter la commande suivante :

# cd /tmp
# rndc-confgen > out
# cp out rndc.conf

Note : Sur certaine plateforme, cette commande peut prendre de longues minutes

Garder le contenu du fichier placé entre les balises :

   '# Start of rndc.conf'

et

   '# End of rndc.conf'

Supprimer les balises et le reste du fichier.

Exemple de fichier /etc/rndc.conf :

#/etc/rndc.conf
# generated by : rndc-confgen
key "rndc-key" {
	algorithm hmac-md5;
	secret "le_secret_genere";
};

options {
	default-key "rndc-key";
	default-server 127.0.0.1;
	default-port 953;
};
#EOF

Copier ce fichier à la racine du système :

# cp /tmp/rndc.conf /etc
# chown 600 /etc/rndc.conf
# chmod root:wheel /etc/rndc.conf

Insérer les entéees "controls" et "key" dans le fichier named.conf

Extraire du fichier précédement crée (/tmp/out) la section concernant le fichier named.conf, comprise entre les balises :

   '# Use with the following in named.conf, adjusting the allow list as needed:'

et

   '# End of named.conf'

Effacer tout le reste du fichier.

Supprimer les balises et les caractères # du debut de chaque ligne.

Intégrer ce contenu au fichier : /var/chroot/named/etc/named.conf

Creer le fichier /etc/rndc.key (facultatif)

Pour générer le fichier /etc/rndc.key, exécuter la commande suivante :

# rndc-confgen -a

Note : sur certaine plateforme, cette commande peut prendre de longues minutes

Permissions à appliquer

A la cage

# cd /var/chroot/named
#
# chown -R root:named etc
# chmod 750 etc
# chmod 600 etc/rndc.*
# chmod 640 etc/named.conf
#
# chown -R root:named namedb
# chmod 755 namedb
# find ./namedb -type d -exec chmod 755 {} \;
# find ./namedb -type f -exec chmod 644 {} \;
# chmod 775 namedb/slave
#
# chown -R root:named var
# chmod 770 var
# chmod 770 var/log
# chmod 660 var/log/named.log

Aux fichiers /etc/rndc.*

# chown root:wheel /etc/rndc.*
# chmod 600 /etc/rndc.*

Au binaire bind8

Voici les permissions appliquées par le système :

# ls -l /usr/sbin/named
-r-xr-xr-x  1 root  wheel  585656 Nov 11 11:54 /usr/sbin/named

Pour être sûr que ce binaire ne soit pas utilisé, exécuter :

# chown root:wheel /usr/sbin/named
# chmod 000 /usr/sbin/named

Gestion du daemon

Démarrer/arrêter bind

Démarrer bind9 :

# /usr/pkg/etc/rc.d/named9 start

Arréter bind9 :

# /usr/pkg/etc/rc.d/named9 stop

Redémarrer bind9 :

# /usr/pkg/etc/rc.d/named9 restart

Recharger la base

# rndc reload

Liens

ANNEXES

Tous les fichiers sont relatifs à l'arborescence : /var/chroot/named

etc/named.conf

# /etc/named.conf
# boot file for master name server
# Note that there should be one primary entry for each SOA record.

//
//// ACL
//

/* local networks */
acl clients {
	localnets;
	::1;
};
acl "internal_nets"   {
	127.0.0.1; 192.168.1.0/24;
};

/* secondary name servers */
acl "2nd_dns"    {
	192.168.1.2;          /* ns2.leaves.org */
};


//
//// OPTIONS
//

options {
	directory "/namedb";

        version "";     // remove this to allow version queries

	listen-on    { any; };
	listen-on-v6 { any; };

	allow-recursion { internal_nets; };

	forwarders {  192.168.1.2; };

//	blackhole { "iana"; };
	notify yes;      /* advice 2nd ns when this zone is updated */
};



//
//// RNDC
//
// generated by rndc-confgen(8)

key "rndc-key" {
	/* the same conf the one in /etc/rndc.conf */	
	algorithm hmac-md5;
	secret "le_secret_genere";
};
 
controls {
	inet 127.0.0.1 port 953
		allow { 127.0.0.1; } keys { "rndc-key"; };
};



//
//// LOGGING
//

/* logging {
*	category lame-servers { null; };
*};
*/

logging { channel default_syslog {
	file "/var/log/namedlog" versions 3 size 800k;
	severity info;
	};
};


//
//// ZONES
//


// Standard zones

zone "." {
	type hint;
	file "standard/root.hint";
};

zone "localhost" {
	type master;
	file "standard/localhost";
	allow-transfer { localhost; };
};

zone "127.in-addr.arpa" {
	type master;
	file "standard/loopback";
	allow-transfer { localhost; };
};

/*
*zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int" {
*	type master;
*	file "standard/loopback6.int";
*	allow-transfer { localhost; };
*};
*
*zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
*	type master;
*	file "standard/loopback6.arpa";
*	allow-transfer { localhost; };
*};
*
*/

// Master zones

zone "leaves.org" {
	type master;
	file "master/leaves.org";
//	allow-transfer { localnets; };
};

zone "1.168.192.in-addr.arpa" {
	type master;
	file "master/1.168.192.leaves.org";
//	allow-transfer { localnets; };
};

//#EOF

namedb/localhost

$ORIGIN localhost.
$TTL 6h

@	IN	SOA	localhost. root.localhost. (	
			1	; serial
			1h	; refresh
			30m	; retry
			7d	; expiration
			1h )	; minimum

		NS	localhost.
		A	127.0.0.1
		AAAA	::1
;#EOF

namedb/loopback

$ORIGIN 127.in-addr.arpa.
$TTL 6h

@	IN	SOA	localhost. root.localhost. (	
			1	; serial
			1h	; refresh
			30m	; retry
			7d	; expiration
			1h )	; minimum

		NS	localhost.
1.0.0		PTR	localhost.
;#EOF

namedb/loopback6.arpa

$ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.
$TTL 6h

@	IN	SOA	localhost. root.localhost. (	
			1	; serial
			1h	; refresh
			30m	; retry
			7d	; expiration
			1h )	; minimum

		NS	localhost.
1		PTR	localhost.
;#EOF

namedb/loopback6.int

$ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int.
$TTL 6h

@	IN	SOA	localhost. root.localhost. (	
			1	; serial
			1h	; refresh
			30m	; retry
			7d	; expiration
			1h )	; minimum

		NS	localhost.
1		PTR	localhost.
;#EOF

namedb/root.hint

; $OpenBSD: root.hint,v 1.1 2003/01/20 22:30:13 jakob Exp $
;
;       This file holds the information on root name servers needed to
;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  <file>"
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC 
;       under anonymous FTP as
;           file                /domain/named.root
;           on server           FTP.INTERNIC.NET
;
;       last update:    Nov 5, 2002
;       related version of root zone:   2002110501
;
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
;
; formerly NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     128.9.0.107
;
; formerly C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
;
; formerly TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
;
; formerly NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; formerly NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
;
; formerly NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
;
; formerly NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
;
; operated by VeriSign, Inc. 
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
;
; housed in LINX, operated by RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129 
;
; operated by IANA
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
;
; housed in Japan, operated by WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
; End of File
;#EOF
 
doc/netbsd/bind9_chroot.txt · Dernière modification: 2009/12/23 22:36 (édition externe)     Haut de page