GNU/Linux → Запуск BIND9 в chroot з AppArmor
Нещодавно вирішив на домашньому сервері налаштувати власний сервер DNS, так як уже трохи набридло прописувати в hosts усі нові сайти, що розробляються. Зупинився на bind9, в гуглі знайшлося багато мануалів, але усюди були нюанси, й щоб не забути про них, пишу нотатку.
У більшості прикладів bind запускався в chroot, для прокачування навичок я зробив так само. Нагадую, що у мене на сервері ubuntu 10.04, тому всі дії описані для неї.
Встановлюємо bind і зупиняємо його
root:~# /etc/init.d/bind9 stop
Тепер налаштовуємо оточення chroot
root:~# mknod /var/chroot/bind9/dev/null c 1 3
root:~# mknod /var/chroot/bind9/dev/random c 1 8
root:~# mv /etc/bind /var/chroot/bind9/etc
root:~# ln -s /var/chroot/bind9/etc/bind /etc/bind
root:~# ln -s /var/chroot/bind9/var/log /var/log/named
root:~# ln -s /var/chroot/bind9/var/cache/bind/master /var/chroot/bind9/etc/bind/master
root:~# ln -s /var/chroot/bind9/var/cache/bind/slave /var/chroot/bind9/etc/bind/slave
root:~# chmod 666 /var/chroot/bind9/dev/null /var/chroot/bind9/dev/random
root:~# chown -R bind:bind /var/lib/named/var/*
root:~# chown -R bind:bind /var/lib/named/etc/bind
root:~# cp /usr/lib/x86_64-linux-gnu/openssl-1.0.0/engines/libgost.so /var/chroot/bind9/usr/lib/x86_64-linux-gnu/openssl-1.0.0/engines/libgost.so
Створюємо файл /etc/rsyslog.d/bind-chroot.conf
$AddUnixListenSocket /var/chroot/bind9/dev/log
Вносимо зміни в /etc/default/bind9
# run resolvconf?
RESOLVCONF=yes# startup options for the server
OPTIONS=”-u bind -t /var/chroot/bind9″
Для того, щоб в логах був правильний час, виконуємо
Тепер перезапускаємо rsyslog і запускаємо bind9
root:~#/etc/init.d/bind9 start
Все вищезазначене, це збірка з різноманітних мануалів, після виконання даних процедур я спостерігав, як bind9 відмовляється запускатися взагалі.
Першим ділом шукаємо причину
Не пригадую помилку дослівно, але bind повідомляв, що йому заборонений доступ до його ж файлів конфігурації, тому стартувати він не буде. Ще трохи гугла й стає зрозуміло, що причиною всього є AppArmor.
Я не є спеціалістом в безпеці linux, тому важко судити наскільки доцільно використовувати одночасно chroot та apparmor (адже служать вони одній меті), але оскільки сумістити ці два захисти можливо — я так і роблю.
Відкриваємо /etc/apparmor.d/usr.sbin.named і додаємо в кінець
/var/chroot/bind9/dev/random r,
/var/chroot/bind9/var/run/named/* rw,
/var/chroot/bind9/var/log/named/** rw,
/var/chroot/bind9/etc/localtime r,
/var/chroot/bind9/usr/lib/x86_64-linux-gnu/openssl-1.0.0/engines/libgost.so mr,
Перезапускаємо AppArmor
Після цього bind успішно завантажується, але не веде логів, зовсім. Тому останнім штрихом вносимо зміни в named.conf.options
logging { channel update_debug { file "/var/log/named/named_update.log"; severity debug 5; print-time yes; print-severity yes; print-category yes; }; channel security_info { file "/var/log/named/named_auth.log"; severity notice; print-time yes; print-severity yes; print-category yes; }; channel info { file "/var/log/named/named_info.log"; severity info; print-time yes; print-severity yes; print-category yes; }; category update { update_debug; }; category security { security_info; }; category queries { info; }; };
P.S.
Далі планую написати скріпт автоматичного додавання нового хоста в конфіги nginx, apache, bind9, створення БД та дерева каталогів проекту.
Коментарів 5
Напишіть відгук
Ви мусите увійти, щоби коментувати.
Я б для таких цілей вибрав powerdns.
Бонуси: легший, простіше ставиться, тримає всі настройки у БД, і має веб гуі.
bind, якщо не використовувати chroot, ставиться однією командою, ну й це стандарт де-факто як на мене.
Стараюсь вибирати складніші рішення, той же nginx мені на домашньому сервері в принципі й не потрібен, але є.
Ну тоді по логіці замість nginx мав би бути дефакто апач. (:
Але тут, як кажуть, на смак і колір всі фломастери різні.
nginx де-факто на усіх хостингах)
але так, про фломастери то чиста правда =)
http://w3techs.com/technologies/details/ws-nginx/all/all
Так, це супер рішення для впсів та інших “порізаних” хостингів.
Але я б з “всіх” не розписувався.
І так, він супер класний для роботи зі статикою, сам його для кешування використовую.