next up previous contents
suivant: Autres services monter: OpenBSD Howto précédent: Packet Filter et NAT   Table des matières

Sous-sections


Bind

Quelle version installer ?:b

Le système de base OpenBSD utilise la version 4 de bind. Ses versions 8 et 9 sont en revanche disponibles dans les ports.

Je ne me permettrai pas de conseiller une version plutôt qu'une autre. Disons que de manière simpliste, le Bind4 du système de base a la réputation d'être plus fiable, Bind8 le plus répandu et aussi le plus cribblé de failles, Bind9 le plus séduisant en termes de fonctionnalités, à vous de juger :). Contrairement à une idée reçue, Bind4 n'est pas une version antédéluvienne de Bind, c'est une branche qui évolue en parallèle, en ayant simplement comme principal objectif la sécurité. Sa syntaxe est sensiblement différente ainsi que les fichiers de conf, mais il évolue et sait même gérer IPv6 à partir de sa version 4.9.5.

Bind9 est une réécriture complète de Bind, conçue pour tourner sans privilèges dans un environnement chrooté, et il est à ma connaissance le seul à supporter intégralement DNSSEC (dont on verra la conf ci-dessous).C'est celui-ci que je vais aborder.


Configurer Bind4

Il est là, déjà chrooté et blindé autant que peu l'être un serveur DNS. Seule sa conf est un peu déroutante par rapport à la syntaxe habituelle des bind les plus répandus mais très simple. Le fichier de conf est /var/named/named.boot, dont une syntaxe possible est la suivante :

; fichier de conf named.boot
directory       /namedb
cache     .    root.cache

; Ne pas lister tous mes domaines aux inconnus !:)
xfrnets 127.0.0.0     

primary thessalie.NET   db.thessalie.net
; primary  1.168.192.IN-ADDR.ARPA thessalie.rev

Perso je n'utilise pas 1.168.192.IN-ADDR.ARPA pour les adresses locales, les noms d'hôtes et leurs IP sont filés par DHCP sur MAC address.

Biensûr, /namedb correspond au path relatif à la racine du chroot, donc /var/named/namedb, c'est là que se trouveront les fichiers de zone.

; Exemple de fichier de zone
;\$TTL 43200
;\$ORIGIN thessalie.net.
@               IN SOA ns.thessalie.net. blitz.thessalie.net. (
                        2002101304                             
                        10800     
                        3600 
                        604800
                        86400 )

@               IN NS ns.thessalie.net.
@               IN NS ns1.hash-group.net.

localhost       IN A    127.0.0.1
plop            IN A    192.168.10.2
pouet           IN A    192.168.10.3

@               IN A    80.65.226.81

www             IN A    80.65.226.81
ns              IN A    80.65.226.81
blitz           IN A    80.65.226.81
parinux         IN A    80.65.226.81

Ajouter/modifier dans son /etc/rc.conf :

named_flags=""
named_user=named                # Named should not run as root unless necessary
named_chroot=/var/named         # Where to chroot named if not empty
syslogd_flags=""

Ce qui donnera à chaque démarrage l'équivallent de :

named -t /var/named -u named
syslogd -a /var/named/dev/log


Installer et configurer Bind9+DNSSEC

Installation

Son installation nécessite que bind 4 soit préalablement retiré, ou du moins que le nouveau bind soit prioritaire, ce qui n'est pas le cas par défaut.

Le path des nouveaux binaires est en effet /usr/local/sbin, contre /usr/sbin pour le bind4 du système de base. Ce dernier reste donc présent et prioritaire tant que le remplacement n'a pas été effectué. De plus, les fichiers de conf ont radicalement changé entre bind4 et ses versions 8 et 9.

Heureusement, les mainteneurs ont pensé à tout et un petit script est disponible pour effectuer le nécessaire :

# cd /usr/ports/net/bind9/ && make install
# cp -R /usr/ports/net/bind9/files/ ~/bind9-newfiles
# cd ~/bind9-newfiles
# chmod +x bind9-enable

Editer le script et remplacer la variable PREFIX~: PREFIX=/usr/local


# ./bind9-enable

Are you sure you want to to this (y/[n])? y

Removing obsolete files:
 /usr/sbin/addr
 /usr/sbin/dig
 /usr/sbin/dnsquery
 /usr/sbin/host
 /usr/sbin/named
 /usr/sbin/named.reload
 /usr/sbin/named.restart
 /usr/sbin/ndc
 /usr/sbin/nslookup
 /usr/share/man/cat1/dig.0
 /usr/share/man/cat1/dnsquery.0
 /usr/share/man/cat1/host.0
 /usr/share/man/cat8/named-xfer.0
 /usr/share/man/cat8/named.0
 /usr/share/man/cat8/named.reload.0
 /usr/share/man/cat8/named.restart.0
 /usr/share/man/cat8/ndc.0
 /usr/share/man/cat8/nslookup.0
 /usr/share/misc/nslookup.help
 /var/named/named-xfer

done.

Creating soft links for binaries:
 /usr/sbin/dig -> /usr/bin/dig
 /usr/sbin/host -> /usr/bin/host
 /usr/sbin/nslookup -> /usr/bin/nslookup
 /usr/sbin/nsupdate -> /usr/bin/nsupdate
 /usr/sbin/named -> /usr/sbin/named
 /usr/sbin/rndc -> /usr/sbin/rndc
 /usr/sbin/lwresd -> /usr/sbin/lwresd
 /usr/sbin/dnssec-keygen -> /usr/sbin/dnssec-keygen
 /usr/sbin/dnssec-makekeyset -> /usr/sbin/dnssec-makekeyset
 /usr/sbin/dnssec-signkey -> /usr/sbin/dnssec-signkey
 /usr/sbin/dnssec-signzone -> /usr/sbin/dnssec-signzone

done.
Setup directory structure:
 /var/named/var
 /var/named/var/run
 /var/named/var/tmp

done.
Symlink /var/named/etc/named.conf:
 /var/named/etc/named.conf->../named.conf

done.

Configuration de Bind9

[Attention, uniquement testé en 3.0]

Le script d'update a dû placé le nouveau fichier de conf named.conf dans /var/named, ainsi qu'un lien symbolique dans /var/named/etc/ vers ce fichier pour le chroot (nous y reviendrons plus tard). En supposant que l'on conserve /var/named/ comme emplacement pour l'ensemble des fichiers de zone, celà nous donne comme options :

options {
        directory "/var/named";
        // Don't reveal BIND version
        version "";
        auth-nxdomain no;    # conform to RFC1035
};

Au lancement de named, il faut lui spécifier l'emplacement du fichier de conf, à moins qu'on ait choisi de le copier directement dans /etc (path par défaut) :

# named -c /var/named/named.conf

Pour la syntaxe des fichiers de zone, je vous laisse le soin de vous inspirer des exemples du fichier de conf, et éventuellement consulter le bind9 administrator manual reference : http://www.crt.se/dnssec/bind9/Bv9ARM.html.

Pour vérifier notre config :

#named-checkconf /var/named/named.conf   # S'il ne dit rien c'est que c'est bon :)
#named-checkzone zone /var/named/master/db.thessalie.net 
OK

Chrooter bind9

Créer, s'il n'existe pas déjà, un groupe et un user named :

#/etc/passwd
named:*:70:70:BIND Name Service Daemon:/var/named:/sbin/nologin

#/etc/group
named:*:70:

Sous OpenBSD, par défaut, le chroot est installé dans /var/named, qui contient les répertoires etc/, var/run et dev/.

Dans /var/named/etc/, coller le fichier de conf et les fichiers de zones (par exemple), et si le serveur sert d'esclave sur certaines zones, il va falloir que celles ci soient mises à jour, donc déposées dans un répertoire où Bind aient les droits d'écriture :

# mkdir /var/named/etc/slave
# chown -R named:named /var/named/etc/slave
# chmod gu+rw /var/named/etc/slave

Idem pour var/run ou Bind va écrire son pid et ses stats :

# chmod -R named:named /var/named/var/run

S'assurer qu'on a bien un /var/named/dev/null et un /var/named/etc/localtime, sinon :

# mknod /var/named/dev/null c 2 2
# cp /etc/localtime /var/named/etc/

Enfin, Bind se sert normallement de syslogd pour logguer, lequel écrit par défaut sur /dev/log, qui se trouve en dehors de la prison. Pour y remédier, il suffit de d'utiliser le flag '-a' de syslog, introduit par OpenBSD, permet de spécifier un path pour le nouveau socket (en conservant les autres intacts) :

# /etc/rc.conf
syslogd_flags=''''
named_flags=""

named est prévu pour être chrooté, aucun flag spécifique n'est donc nécessaire, de même que pour syslog. S'assurer en revanche que le user named et sa prison sont bien renseignés dans le rc.conf :

named_user=named                # Named should not run as root unless necessary
named_chroot=/var/named         # Where to chroot named if not empty

Enfin, bien vérifier son named.conf pour en modifier les paths (directory et fichiers de zones). Le répertoire /var/named sera désormais considéré par Bind comme la racine du système :

options {
        directory "/";
        version "";
        auth-nxdomain no;    # conform to RFC1035
};

// Standard zones
//
zone "localhost" IN {
        type master;
        file "etc/named.localhost";
        allow-transfer { localhost; };
};
etc.

Rebooter, ou bien killer/redémarrer syslogd ainsi que bind avec leurs nouveaux flags :

syslogd -a /var/named/dev/log
named -t /var/named/ -u named

DNSSEC

ATTENTION: hmac-md5 est le seul algorythme supporté conjointement par named et rndc (voir man rndc) au moment ou cette doc est rédigée.

D'abord générer la clé :

# dnssec-keygen -a hmac-md5 -b 128 -n user root

On obtient deux fichiers : Kroot.+157+27461.key Kroot.+157+27461.private

Récupérer la clé privée dans le 2ème fichier et l'intégrer à /etc/rndc.conf (à créer) et /var/named/named.conf

# /etc/rndc.conf
options {
         default-server  localhost;
         default-key     "key";
     };                            

server localhost {
         key     "key";
     };                    


 key "key" {
         algorithm hmac-md5;
         secret "dgh3G2gW7/08k2iiNqZnlA==";
     };
NB : non ce n'est pas ma vraie clé secrète :)

#/etc/named.conf
key "key" {
        algorithm       hmac-md5;
        secret          "dgh3G2gW7/08k2iiNqZnlA==";
        };

controls {
inet 127.0.0.1 allow {localhost; } keys { "key"; };
};

rebooter, ou lancer named chrooté et son syslogd à la main :

# kill -9 syslogd
# syslogd -a /var/named/dev/log -a /var/named/dev/log
# named -t /var/named -u named

Tester la config :

# rndc reload
rndc: reload command successful


next up previous contents
suivant: Autres services monter: OpenBSD Howto précédent: Packet Filter et NAT   Table des matières
maab 2003-03-13