|
Мой DNS - моя крепость
Xakep, номер #049, стр. 049-074-1 Обеспечь безопасность своему DNS-серверу! Andrushock (andrushock@fromru.com) Йоу! Сегодня мы с тобой затронем различные аспекты защиты пакета BIND (The Berkley Internet Domain Server), который на протяжении последних лет получил наибольшее распространение в интернете. Последней на момент написания этой статьи была версия 9.2.1, она и была взята мной для детального рассмотрения. Конечно, использование последней версии не гарантирует полную защиту, однако она менее уязвима для удаленных атак, обладает лучшей защищенностью и усовершенствованными механизмами безопасности, по сравнению с четвертыми и восьмыми версиями BIND. Domain Name System (DNS) - доменная система имен - это распределенная база данных, используемая в интернете для определения соответствия между именами хостов и их IP-адресами. Ставим на ноги Итак, забираем сырцы с ftp://ftp.isc.org/isc/bind9/9.2.1/bind-9.2.1.tar.gz, распаковываем архив tar zxvf bind-9.2.1.tar.gz, переходим в созданный каталог cd bind-9.2.1 и выполняем сценарий configure с такими аргументами: CFLAGS="-O2 -funroll-loops -ffast-math -malign-double -mcpu=i686 -march=i686 -fomit-frame-pointer -fno-exceptions" ./configure --prefix=/opt/bind --with-openssl=no --enable-ipv6=no --with-kame=no Этим мы запрещаем добавление в бинарики отладочной информации (не указываем флажок "-g", который идет по дефолту), включаем оптимизационные фишки, указываем, в какую директорию будем ставить, отменяем поддержку OpenSSL (эта поддержка необходима для DNSSEC - специальных расширений для обеспечения достоверной передачи DNS-данных в масштабах глобальной сети) и отключаем поддержку IPv6 - новой версии протокола IP, так как она пока не получила широкого распространения, естественно, если что нужно - включаем =). Для Linux-систем с версиями ядра меньше 2.2.18 и 2.3.99 необходимо также добавить параметр "--disable-threads". Производим сборку: make и устанавливаем: make install. Все, инсталляция завершена, но это только начало... Сажаем демона в песочницу По умолчанию демон named в системе работает с правами суперпользователя. Если злоумышленник успешно выполнит атаку на DNS-сервер, то он получит возможность выполнять команды от имени root. Как ты понимаешь - это не есть хорошо, и мы этого не допустим. Для того чтобы избежать связанного с этим возможного ущерба, нам необходимо запускать named от имени непривилегированного пользователя и в chroot()'ной среде - среде с измененным для демона корневым каталогом, который на самом деле является обычным каталогом в файловой системе. Если пользователя и группы named еще в системе не существует, то добавляем: groupadd -g 53 named adduser -c "Domain Name Service" -d /var/named -g named -u 53 -s /bin/false -r named В *BSD будет выглядеть так: useradd -c "Domain Name Service" -d /var/named -g named -u 53 -s /sbin/nologin named И строим песочницу - виртуальную файловую систему для нашего DNS-сервера: mkdir -p /var/named cd /var/named/ mkdir -p dev etc var/log var/named var/run var/stat Каталог /var/named будет корневым, а его подкаталоги необходимы для файлов устройств, конфигов, логов, зонных файлов, pid-файла и файлов статистики named. |