Устанавливаем BIND9 из портов:


Прим: заготовка для будущего расширенного руководства по bind9, данный
вариант как быстрое пособие был написан для forum.opennet.ru.

1. компиляция и установка

# cd /usr/ports/net/bind9
# make && make install

примечание: по-умолчанию named из порта bind9 будет установлен с
PREFIX=/usr/local, чтобы заменить им тот что поставляется с системой(bind8),
необходимо при сборке порта:

# make PORT_REPLACES_BASE_BIND9=yes && make install

2. генерация rndc.key и создание rndc.conf

В данном примере подразумевается что bind9 из портов будет установлен с
PREFIX=/usr/local

# rndc-confgen -a -c /usr/local/etc/rndc.key

прим.: если у вас возникли проблемы с генерацией ключа, попробуйте
воспользоваться командой rndcontrol (для увеличения энтропии):

# rndcontrol -s  [-s ]

например, мы решили что для этого будем использовать прерывания IRQ=5,7,11:

# rndcontrol -s 5 -s 7 -s 11

прим: попробуйте в вашей версии системы выполнить:

# grep rand /etc/defaults/rc.conf 
rand_irqs="NO"          # Stir the entropy pool (like "5 11" or NO).
#
если вы нашли такую переменную, то задайте нужные вам значения для увеличения
энтропии(чтобы повысить надежность генерации случайных чисел), например в
/etc/rc.conf:

rand_irqs="5 10 11 14"

# chmod 600 /usr/local/etc/rndc.key
# chown bind:bind /usr/local/etc/rndc.key
# cp /usr/local/etc/rndc.conf.sample /usr/local/etc/rndc.conf
# chmod 600 /usr/local/etc/rndc.conf
# chown bind:bind /usr/local/etc/rndc.conf

файл rndc.conf должен выглядеть так:

options {
          default-server 127.0.0.1;
          default-key "rndc-key";
};

server 127.0.0.1 {
          key "rndc-key";
};

key "rndc-key" {
          algorithm hmac-md5;
          secret "xxxxxxxxxxxxxxxxxxxxxxxx";
};

# из файла содержащего сгенерированный ключ /usr/local/etc/rndc.key, берем
ключ и вставляем его в secret "xxxxxxxxxxxxxxxxxxxxxxxx" файла rndc.conf.

проверяем:

[alone]~ > uname -a
FreeBSD alone.dubna.ru 4.7-STABLE FreeBSD 4.7-STABLE #1: Thu Feb 27 19:00:47 MSK 2003     toor@alone.dubna.ru:/usr/obj/usr/src/sys/ALONE47  i386
[alone]~ > date
четверг, 27 марта 2003 г. 15:11:43 (MSK)
[alone]~ > ls -la /usr/local/etc/rndc.*
-rw-------  1 bind  bind    228 Mar 27 14:25 /usr/local/etc/rndc.conf
-r--r--r--  1 root  wheel  1195 Mar 27 13:04 /usr/local/etc/rndc.conf.sample
-rw-------  1 bind  bind     77 Mar 27 14:22 /usr/local/etc/rndc.key
[alone]~ > 

3. создаем минимальную конфигурацию named.conf (остальное самостоятельно)

# touch /usr/local/etc/named.conf
редактируем named.conf:

------------------------------ named.conf ----------------------------
// acl "internal" { 127.0.0.1; };

include "/usr/local/etc/rndc.key";

controls {
        inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndc-key"; };
};


options {
        directory "/usr/local/etc/namedb";

        forwarders { 194.87.162.120; };

        // allow-transfer { "internal"; };

        // allow-query { "internal"; };

        // notify explicit;

        listen-on { 62.84.100.160; 127.0.0.1; };

        query-source address * port 53;

        pid-file "/usr/local/etc/namedb/named.pid";

        dump-file "/var/tmp/named_dump.db";

        auth-nxdomain yes;
};

logging {
        category lame-servers { null; };
        category default { default_syslog; };
};

zone "." {
        type hint;
        file "named.root";
};

zone "0.0.127.IN-ADDR.ARPA" {
        type master;
        file "localhost.rev";
};

zone "lavr.pp.ru" in {
        type master;
        file "master/lavr.pp.ru";
};
----------------------------------------------------------------------

# mkdir /usr/local/etc/namedb
# mkdir /usr/local/etc/namedb/master
# touch /usr/local/etc/namedb/localhost.rev

редактируем localhost.rev:

----------------------------- localhost.rev --------------------------
;
; Data file for local loopback interface. 
;

$TTL 604800
@       IN      SOA     alone.dubna.ru. lavr.alone.dubna.ru. (
                        2001110401       ; Serial
                        28800   ; Refresh 8 hours
                        7200    ; Retry   2 hours
                        604800  ; Expire  7 days
                        86400 ) ; Minimum 1 day
        IN      NS      unix1.jinr.ru.

1       IN      PTR     localhost.
----------------------------------------------------------------------

создаем файл зоны lavr.pp.ru:

# touch /usr/local/master/lavr.pp.ru

редактируем:

-------------------------------- lavr.pp.ru --------------------------
$TTL 604800
@       IN      SOA     unix1.jinr.ru. lavr.unix1.jinr.ru. (
                        2002082001       ; Serial
                        28800   ; Refresh 8 hours
                        7200    ; Retry   2 hours
                        604800  ; Expire  7 days
                        86400 ) ; Minimum 1 day

                IN      NS      unix1.jinr.ru.
                IN      NS      alone.dubna.ru.
                IN      NS      spleen.demos.su.
;               IN      MX      10 sunct0.jinr.dubna.su.
;               IN      MX      50 cv.jinr.dubna.su.
                IN      A       159.93.17.121

www             IN      MX      0 not.for.mail
                IN      A       159.93.17.121

lavr.pp.ru.     IN      A       159.93.17.121
;*.lavr.pp.ru.  IN      A       159.93.17.121
-----------------------------------------------------------------------

проверяем конфигурацию:

# named-checkconf /usr/local/etc/named.conf
если все ok:
# chown -R /usr/local/etc/namedb

4. Настраиваем запуск named от пользователя bind и проверяем ручным запуском

# vi /etc/rc.conf

------------------------------- /etc/rc.conf ---------------------------
...
named_enable="YES"
named_program="/usr/local/sbin/named"
named_flags="-c /usr/local/etc/named.conf -u bind"
...
------------------------------------------------------------------------

проверяем ручным запуском:

# /usr/local/sbin/named -c /usr/local/etc/named.conf -u bind

для убедительности проверяем версию bind:

[alone]~ > /usr/local/sbin/named -v 
BIND 9.2.2
[alone]~ > date
четверг, 27 марта 2003 г. 15:29:30 (MSK)
[alone]~ > 

для большей убедительности проверяем что нам отдаст сам named:

[alone]~ > dig @62.84.100.160 version.bind chaos txt

; <<>> DiG 9.2.2 <<>> @62.84.100.160 version.bind chaos txt
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47169
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;version.bind.                  CH      TXT

;; ANSWER SECTION:
version.bind.           0       CH      TXT     "9.2.2"

;; Query time: 6 msec
;; SERVER: 62.84.100.160#53(62.84.100.160)
;; WHEN: Thu Mar 27 15:30:26 2003
;; MSG SIZE  rcvd: 48

[alone]~ > 

примечание: поправьте свой named.conf чтобы в целях security он не отдавал
реальную версию, для этого в options добавить строку:

options {
	...
	...
	version "Not a chance :)";
	...
};

ну или version "some text here";

Прим: актуально как для bind8, так и для bind9

В результате имеем:

[unix1]~ > dig @62.84.100.160 version.bind chaos txt

; <<>> DiG 8.3 <<>> @62.84.100.160 version.bind chaos txt 
; (1 server found)
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUERY SECTION:
;;      version.bind, type = TXT, class = CHAOS

;; ANSWER SECTION:
version.bind.           0S CHAOS TXT    "Not a chance :)"

;; Total query time: 10 msec
;; FROM: unix1.jinr.dubna.su to SERVER: 62.84.100.160  62.84.100.160
;; WHEN: Tue Apr 29 10:44:25 2003
;; MSG SIZE  sent: 30  rcvd: 58

[unix1]~ > 

Примечание: файлы named.conf и зоны приведены как пример, используйте свои и
дополнительные возможности bind, такие как acl, view & etc, данный пример лишь
показывает как быстро перестроиться с версии bind8.
Одна из наиболее полезных ссылок Security, Unix, Networking:


Русская редакция выполнена Андреем Лаврентьевым: lavr@unix1.jinr.ru