PowerDNS c MySQL, панелью управления PowerAdmin и PowerDNS-recursor.
Самым распространенным сервером является несомненно ISC Bind. Он входит в большую часть дистрибутивов, неплохо держит нагрузку ну и в общем всем хорош. Еще он имеет ряд недоработок, и несколько неприятных ошибок в прошлом, которые делали уязвимой всю систему, на которой он работал в целом.
Я не возьмусь утверждать что PowerDNS не обладает ошибками и не способен привести к взлому, но во всяком случае PowerDNS менее распространен, при атаке на систему вероятность того, что нападающий будет ожидать увидеть там PowerDNS значительно ниже, значит и безопасность несколько возрастет.
PowerDNS присутствует в портах FreeBSD, но начнем мы с установки PowerDNS-recursor.
cd /usr/ports/dns/powerdns-recursor/ make install clean |
Перед сборкой появляется диалоговое окно настройки:
┌────────────────────────────────────────────────────────────────────┐ │ Options for powerdns-recursor 3.1.7.1 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ [X] SETUID Run as pdns_recursor user │ │ │ │ [ ] LUA Enable Lua bindings │ │ │ │ [X] STATIC Build static binaries │ │ ├─└────────────────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘ |
Конфигурационный файл /usr/local/etc/pdns/recursor.conf выглядит так :
#Принимаем запросы от 127.0.0.1 allow-from=127.0.0.0/8 #Прибиваемся к адресу 127.0.0.1 local-address=127.0.0.1 #Порт 5353 для приема соединений local-port=5353 |
В принципе в конфигурационном файле по умолчанию довольно так много настроек, но фактически нам нужно определить адрес на котором будет слушать рекурсор, порт и адреса с которых можно обращаться к рекурсору. Поскольку мы будем работать с PowerDNS, а он уже будет работать, при необходимости, с рекурсором, то оставляет только такой небольшой файл настройки.
Теперь можно перейти к установке самого PowerDNS, ставим естественно из портов:
cd /usr/ports/dns/powerdns make install clean |
и в начале опять небольшой диалог настройки:
┌────────────────────────────────────────────────────────────────────┐ │ Options for powerdns 2.9.22_2 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ [ ] PGSQL PostgreSQL backend │ │ │ │ [X] MYSQL MySQL backend │ │ │ │ [ ] SQLITE SQLite 2 backend │ │ │ │ [ ] SQLITE3 SQLite 3 backend │ │ │ │ [ ] OPENDBX OpenDBX backend │ │ │ │ [ ] OPENLDAP OpenLDAP backend │ │ │ │ [ ] GEO Geo backend │ │ │ │ │ │ ├─└────────────────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘ |
Поскольку мы решили базу доменов держать в MySQL, то в диалоге настройки выберем только его.
После того, как все соберется можно переходить к настройке PowerDNS.
Теперь создадим базу MySQL и пользователя для PowerDNS:
mysql -uroot -p create database pdns; grant all on pdns.* to 'pdns'@'localhost' identified by 'pdns-777'; |
И теперь создадим таблицы в базе:
mysql -uroot -p pdns < /usr/local/share/examples/powerdns/tables-mysql.sql |
Теперь можно переходить к настройкам PowerDNS.
Конфигурационный файл /usr/local/etc/pdns/pdns.conf.
У меня он выглядит так:
#Разрешаем передачу доменов с адресов 192.168.0.0/24, можно указывать # несколько адресов или сетей через запятую allow-axfr-ips=192.168.0.0/24 #Рекурсивные запросы разрешаем обрабатывать из локальной сети и с локального адреса allow-recursion=192.168.0.0/24, 127.0.0.1 #Время жизни кеша cache-ttl=20 #Переходим в фоновый режим работы daemon=yes #SOA запись по умолчанию default-soa-name=ns.hilik.org.ua #Количество подпроцессов для обработки запросов distributor-threads=3 #При включенном guardian при падении PowerDNS будет автоматически стартовать guardian=yes #Хранилище для доменов будет база MySQL launch=gmysql #адрес MySQL сервера gmysql-host=127.0.0.1 #Пользователь для соендинения с базой gmysql-user=pdns #Пароль gmysql-password=pdns-777 #Имя базы MySQL gmysql-dbname=pdns #Разрешаем рекурсию при отсутствии информации о домене lazy-recursion=yes #Порт на котором принимаем запросы local-port=53 #PowerDNS в режиме мастера master=yes max-tcp-connections=10 #Адрес рекурсивного сервера - ему будут передаваться рекурсивные запросы #в нашем случае адрес PowerDNS-recursor recursor=127.0.0.1:5353 |
Теперь нам нужно запустить и PowerDNS-recursor и PowerDNS. Сначала разрешим, а затем и запустим PowerDNS-recursor:
echo 'pdns_recursor_enable="YES"' >> /etc/rc.conf |
и запустим:
/usr/local/etc/rc.d/pdns-recursor start |
Теперь разрешим запуск PowerDNS:
echo 'pdns_enable="YES"' >> /etc/rc.conf |
и запустим:
/usr/local/etc/rc.d/pdns start |
Теперь проверим. Проверять будем с помощью dig:
dig @localhost ya.ru |
и если увидим:
; <<>> DiG 9.4.2-P2 <<>> @localhost ya.ru ; (2 servers found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35106 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ya.ru. IN A ;; ANSWER SECTION: ya.ru. 7049 IN A 213.180.204.8 ya.ru. 7049 IN A 77.88.21.8 ya.ru. 7049 IN A 93.158.134.8 ;; Query time: 43 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Aug 21 23:10:35 2009 ;; MSG SIZE rcvd: 71 |
Рекурсия работает. Можно переходить к настройке доменов.
Для работы PowerAdmin нужен установленный Apache с PHP. Либо любой другой вебсервер с PHP.
Если все это есть, устанавливаем PowerAdmin:
cd /usr/ports/dns/poweradmin/ make install clean |
В начале будет диалог настройки, выбирать там ничего не надо. По умолчанию PowerAdmin собирается с поддержкой MySQL по умолчанию.
Устанавливается PowerAdmin в каталог /usr/local/www/poweradmin. Теперь нужно переопределить владельца файлов PowerAdmin:
chown -R www:www /usr/local/www/poweradmin |
далее создадим недостающие для работы PowerAdmin таблицы:
mysql -uroot -p pdns </usr/local/www/poweradmin/docs/poweradmin-mysql-db-structure.sql |
и теперь настроим доступ к базе MySQL, настраивается доступ в файле /usr/local/www/poweradmin/inc/config.inc.php.
Определяем такие параметры:
$db_host = "localhost"; $db_user = "pdns"; $db_pass = "pdns-777"; $db_name = "pdns"; $db_type = "mysql"; |
Теперь настроим Apache, сделаем такой виртуальный сервер:
<VirtualHost *:80> ServerAdmin webmaster@hilik.org.ua DocumentRoot /usr/local/www/poweradmin ServerName poweradmin.hilik.org.ua </VirtualHost> |
После того как апачь будет перенастроен, можно подключиться к PowerAdmin браузером. Пароль и логин для доступа admin. Лучше всего его конечно сменить. С помощью PowerAdmin можно полностью управлять DNS сервером. Создавать и удалять записи и домены. На этом настройка окончена.