Это старая версия документа!
root@mgmt:/usr/ports/dns/bind910# make install clean
┌────────────────────────────── bind910-9.10.4 ────────────────────────────────┐
│ ┌──────────────────────────────────────────────────────────────────────────┐ │
│ │+[x] DOCS Build and/or install documentation │ │
│ │+[ ] FETCHLIMIT Enable the query quotas for resolvers │ │
│ │+[ ] FILTER_AAAA Enable filtering of AAAA records │ │
│ │+[ ] FIXED_RRSET Enable fixed rrset ordering │ │
│ │+[x] GEOIP Allow geographically based ACL. │ │
│ │+[x] IDN International Domain Names support │ │
│ │+[ ] IPV6 IPv6 protocol support │ │
│ │+[ ] LARGE_FILE 64-bit file support │ │
│ │+[x] LINKS Create conf file symlinks in /usr/local │ │
│ │+[ ] MINCACHE Use the mincachettl patch │ │
│ │+[ ] NEWSTATS Enable alternate xml statistics channel format │ │
│ │+[ ] PORTREVISION Show PORTREVISION in the version string │ │
│ │+[ ] PYTHON Build with Python utilities │ │
│ │+[ ] QUERYTRACE Enable the very verbose query tracelogging │ │
│ │+[ ] RPZ_NSDNAME Enable RPZ NSDNAME policy records │ │
│ │+[ ] RPZ_NSIP Enable RPZ NSIP trigger rules │ │
│ │+[x] RRL Response Rate Limiting │ │
│ │+[x] SIGCHASE dig/host/nslookup will do DNSSEC validation │ │
│ │+[x] START_LATE Start BIND late in the boot process │ │
│ │+[x] THREADS Threading support │ │
│ │──────────────────────── Dynamically Loadable Zones ──────────────────────│ │
│ │+[ ] DLZ_POSTGRESQL DLZ Postgres driver │ │
│ │+[ ] DLZ_MYSQL DLZ MySQL driver (no threading) │ │
│ │+[ ] DLZ_BDB DLZ BDB driver │ │
│ │+[ ] DLZ_LDAP DLZ LDAP driver │ │
│ │+[ ] DLZ_FILESYSTEM DLZ filesystem driver │ │
│ └─────v(+)─────────────────────────────────────────────────────────68%─────┘ │
├──────────────────────────────────────────────────────────────────────────────┤
│ < OK > <Cancel> │
└──────────────────────────────────────────────────────────────────────────────┘
Installing bind910-9.10.4...
**********************************************************************
* _ _____ _____ _____ _ _ _____ ___ ___ _ _ *
* / \|_ _|_ _| ____| \ | |_ _|_ _/ _ \| \ | | *
* / _ \ | | | | | _| | \| | | | | | | | | \| | *
* / ___ \| | | | | |___| |\ | | | | | |_| | |\ | *
* /_/ \_\_| |_| |_____|_| \_| |_| |___\___/|_| \_| *
* *
* BIND requires configuration of rndc, including a "secret" key. *
* The easiest, and most secure way to configure rndc is to run *
* 'rndc-confgen -a' to generate the proper conf file, with a new *
* random key, and appropriate file permissions. *
* *
* The /usr/local/etc/rc.d/named script will do that for you. *
* *
**********************************************************************
===> SECURITY REPORT:
This port has installed the following files which may act as network
servers and may therefore pose a remote security risk to the system.
/usr/local/sbin/named-journalprint
/usr/local/sbin/named
/usr/local/sbin/rndc-confgen
/usr/local/sbin/dnssec-verify
/usr/local/sbin/ddns-confgen
/usr/local/sbin/dnssec-dsfromkey
/usr/local/bin/host
/usr/local/sbin/nsec3hash
/usr/local/sbin/dnssec-signzone
/usr/local/bin/nsupdate
/usr/local/sbin/rndc
/usr/local/sbin/lwresd
/usr/local/bin/dig
/usr/local/sbin/dnssec-revoke
/usr/local/sbin/isc-hmac-fixup
/usr/local/sbin/dnssec-keygen
/usr/local/bin/delv
/usr/local/sbin/named-checkzone
/usr/local/sbin/dnssec-keyfromlabel
/usr/local/sbin/dnssec-importkey
/usr/local/sbin/named-checkconf
/usr/local/sbin/genrandom
/usr/local/sbin/named-rrchecker
/usr/local/bin/nslookup
/usr/local/sbin/dnssec-settime
This port has installed the following startup scripts which may cause
these network services to be started at boot time.
/usr/local/etc/rc.d/named
If there are vulnerabilities in these programs there may be a security
risk to the system. FreeBSD makes no guarantee about the security of
ports included in the Ports Collection. Please type 'make deinstall'
to deinstall the port if this is a concern.
For more information, and contact details about the security
status of this software, see the following webpage:
https://www.isc.org/software/bind
===> Cleaning for libxml2-2.9.3
===> Cleaning for GeoIP-1.6.9
===> Cleaning for idnkit-1.0_5
===> Cleaning for libedit-3.1.20150325_2
===> Cleaning for bind910-9.10.4
root@mgmt:/usr/ports/dns/bind910# rehash
root@mgmt:/usr/ports/dns/bind910# pkg info | grep bind
bind910-9.10.4 BIND DNS suite with updated DNSSEC and DNS64
root@mgmt:/usr/ports/dns/bind910#
После завершения установки, проверяю версию установленного BIND:
named -v
Для работы в chroot окружении в /etc/rc.conf добавляю:
named_enable="YES" named_chrootdir="/var/named" altlog_proglist="named"
/var/named - это и есть песочница, где named будет жить
Делаем песочницу, которая раньше делалась в FreeBSD автоматом
mkdir -p /var/named/usr/local/etc/ mkdir -p /var/named/var/dump mkdir -p /var/named/var/run/named mkdir -p /var/named/var/stats mkdir -p /var/named/dev mv /usr/local/etc/namedb /var/named/usr/local/etc/ cd /usr/local/etc ln -s /var/named/usr/local/etc/namedb mkdir -p /var/run/named
Для pid и session.key файлов и создаю такие ссылки:
cd /var/run/named ln -s /var/named/var/run/named/pid pid ln -s /var/named/var/run/named/session.key session.key ls -l /var/run/named/ total 1 lrwxr-xr-x 1 root wheel 28 13 февр. 13:00 pid -> /var/named/var/run/named/pid lrwxr-xr-x 1 root wheel 36 13 февр. 13:00 session.key -> /var/named/var/run/named/session.key
Создаю devfs правило для использования chroot окружения. Добавляю в /etc/devfs.rules, если файла нет нужно создать:
cat devfs.rules # Правила для named chroot dev # [devfsrules_named_chroot=5] add hide add path run unhide add path random unhide
Добавляю в в /etc/fstab:
devfs /var/named/dev devfs rw,ruleset=5 0 0
Монтирую devfs файловую систему:
mount /var/named/dev
Черновик
/usr/local/etc/namedb/named.conf
cat named.conf options {
// All file and path names are relative to the chroot directory,
// if any, and should be fully qualified.
directory "/usr/local/etc/namedb/working"; // Рабочий каталог
pid-file "/var/run/named/pid"; // местонахождение pid
dump-file "/var/dump/named_dump.db"; // где хранить дамп
statistics-file "/var/stats/named.stats"; // где хранить статистику
listen-on { 127.0.0.1; 95.31.208.14; 10.216.130.1; };
listen-on-v6 { ::1; }; allow-query { any; }; Разрешаю посылать запросы только из любой сети
allow-recursion {10.216.130.0/24; 127.0.0.1; };
version "made in USSR"; // строка выдаваемая в ответ на запро о версии
// Игнорировать запросы blackhole
// DNS-сервер не посылает запросы к DNS-серверам из этого списка
// и не отвечает на запросы, получаемые от этих серверов.
blackhole {
0.0.0.0/8;
10.0.0.0/8;
169.254.0.0/16;
172.16.0.0/12;
192.0.2.0/24;
192.168.0.0/16;
224.0.0.0/4;
240.0.0.0/4;
};
disable-empty-zone "255.255.255.255.IN-ADDR.ARPA";
disable-empty-zone "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.0.IP6.ARPA";
disable-empty-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";
/* Данная команда определяет адреса серверов доменных имен куда следует отправлять рекурсивные запросы. Естественно, что на этих серверах для хоста, на котором установлен named, должна быть разрешена обработка рекурсивных запросов с этого хоста. forwarders { 127.0.0.1; }; */ }; include «/usr/local/etc/namedb/rndc.key»; include «/usr/local/etc/namedb/nskey.key»;
server 94.255.92.23 {
keys { nskey; };
};
#вид для внутренних зон view internal { #зоны резолвятся для клиентов сетей 10.216.130.0/24 и локалхоста match-clients { 127.0.0.1; 10.216.130.0/24; };
include «/usr/local/etc/namedb/named.rfc»;
zone «.» {
type hint;
file "/usr/local/etc/namedb/named.root";
};
zone «mgmt.klotik.ru» {
type master;
file "/usr/local/etc/namedb/master/mgmt.klotik.ru";
};
zone «130.216.10.in-addr.arpa» {
type master;
file "/usr/local/etc/namedb/master/mgmt.klotik.ru.rev";
};
};
# Вид для внешних зон view external { #Для всех остальных сетей и IP которые явно не указаны в предыдущих view match-clients { any; }; zone «klotik.ru» {
type slave;
file "/usr/local/etc/namedb/slave/ext.klotik.ru";
masters {94.255.92.23;};
};
zone «92.255.94.in-addr.arpa» {
type slave;
file "/usr/local/etc/namedb/slave/ext.klotik.ru.rev";
masters {94.255.92.23;};
};
};
acl localnet { 192.168.0.0/22; 127.0.0.1;};. acl all { any; };
options { Запрет отдавать номер версии сервера. version none; Запрет отдавать имя хоста, на котором работает BIND
hostname none;
запрет отдавать запросы об идентификаторе server-id none; Разрешаем по-умолчанию днс запросы только от доверенных сетей
allow-query { localnet; };
Разрешать ли рекурсивные запросы, или отдавать только те зоны, которые держит сам сервак. recursion yes; Посылка рекурсивных запросов разрешена только клиентам подсети allow-recursion { localnet; }; Игнорировать запросы blackhole DNS-сервер не посылает запросы к DNS-серверам из этого списка и не отвечает на запросы, получаемые от этих серверов.
blackhole {
0.0.0.0/8;
10.0.0.0/8;
169.254.0.0/16;
172.16.0.0/12;
192.0.2.0/24;
192.168.0.0/16;
224.0.0.0/4;
240.0.0.0/4;
};
};
allow-query: указывает список хостов, которым разрешено запрашивать все зоны name-сервера или конкретную зону внутри name-сервера.
allow-recursion: указывает список хостов, которым разрешено создавать рекурсивные запросы к name-серверу для всех зон или для конкретной зоны, обслуживаемой name-сервером.
allow-transfer: указывает список хостов, которым разрешено инициировать запросы зонной пересылки к name-серверу для всех зон или для конкретной зоны внутри name-сервера. Данное утверждение обязательно требуется в конфигурации первичного name-сервера.
allow-update: указывает список хостов, которым разрешено инициировать запросы динамического обновления.
allow-update-forwarding: указывает список хостов, которым разрешено перенаправление запросов динамического обновления (независимо от того, кто является источником запроса).
allow-notify: указывает список хостов, с которых можно принимать сообщения DNS NOTIFY, говорящих об изменениях в зонном файле. Данный список относится только к конфигурации вторичного name-сервера.
blackhole: указывает список хостов, которые входят в черный список (запрещен доступ) для инициализации любых транзакций с данным name-сервером.
В файл конфигурации зоны добавляю запись
www.seafile IN A 94.255.92.23
Проверяю конфигурационный файл на ошибки
named-checkconf /usr/local/etc/namedb/named.conf
Файл зоны можно проверить так: команда Имя Зоны Путь к зоне
named-checkzone mgmt.klotik.ru /usr/local/etc/namedb/master/mgmt.klotik.ru zone mgmt.klotik.ru/IN: loaded serial 2020021300 OK
/usr/local/etc/rc.d/named start
var/dump:
user (53, 0, modified)
gid (53, 0, modified)
var/run:
user (53, 0, modified)
gid (53, 0, modified)
var/run/named:
user (53, 0, modified)
gid (53, 0, modified)
var/stats:
user (53, 0, modified)
gid (53, 0, modified)
./etc missing (created)
./tmp missing (created)
./var/log missing (created)
etc/namedb/working:
gid (0, 53, modified)
etc/namedb/dynamic:
gid (0, 53, modified)
etc/namedb/slave:
gid (0, 53, modified)
wrote key file "/var/named/usr/local/etc/namedb/rndc.key"
Starting named.
Посмотреть bind в процессах
top | grep named
или
ps -ax|grep named
послушать висит ли Bind на 53 порту:
sockstat -l4 -p 53
dig @127.0.0.1 ya.ru ; <<>> DiG 9.14.7 <<>> @127.0.0.1 ya.ru ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59061 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; COOKIE: 8036ca940283cc2a39394ac25dc00f1c6567f433a198998e (good) ;; QUESTION SECTION: ;ya.ru. IN A ;; ANSWER SECTION: ya.ru. 600 IN A 87.250.250.242 ;; Query time: 849 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: пн нояб. 04 14:44:28 MSK 2019 ;; MSG SIZE rcvd: 78
или
nslookup ya.ru 127.0.0.1 Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: YA.ru Address: 87.250.250.242 Name: ya.ru Address: 2a02:6b8::2:242
DNS работает через 53 порты: udp («простые запросы») и tcp (трансферы).
В описание зоны master сервере добавляю строки
allow-transfer { 95.31.208.14; }; //список адресов от кого принимать запросы на передачу зоны
also-notify { 95.31.208.14; }; // список адресов серверов, которым посылается DNS NOTIFY при изменении зоны
notify explicit; // посылать DNS NOTIFY при изменении зоны, explicit - посылать только серверам из списка also-notify
Описание зоны slave сервере выглядит так:
zone "klotik.ru" {
type slave;
masterfile-format text;
file "/usr/local/etc/namedb/slave/ext.klotik.ru";
masters {94.255.92.23;};
allow-transfer { none; };
};
Подключаюсь к первичному серверу по telnet к 53 порту:
telnet <IP-адрес первичного сервера> 53
Пример выполнения
telnet 94.255.92.23 53 Trying 94.255.92.23... Connected to ns.klotik.ru. Escape character is '^]'. ^] telnet> q Connection closed.
dig <домен> @<IP-адрес> axfr
Ссылки:
http://blog.e-shell.org/301
http://dtopcms.ru/docs/freebsd/bind99.shtml
http://www.maxblogs.ru/articles/nastroika-bind9
http://www.it-vrn.org/content/nastroyka-dns-servera-bind-v-choot-pri-obnovlenii-freebsd-93-do-10-versii.html
https://toster.ru/q/67146
https://miac.volmed.org.ru/wiki/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_DNS_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0_(named9)
http://freebsdguide.ru/_14/_8