The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Журналирование событий и обеспечение безопасности DNS сервера (dns log)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: dns, log,  (найти похожие документы)
From: Denis Frolov Date: Mon, 9 Nov 2008 17:02:14 +0000 (UTC) Subject: Журналирование событий и обеспечение безопасности DNS сервера Оригинал: http://www.redhat-club.org/Articles/DenisFrolov/DNSConfiguration Введение -------- Bind - это наиболее популярная реализация DNS сервера. Данный пакет входит в состав абсолютного большинства unix систем. Сайт проекта BIND www.isc.org. DNS сервер BIND уже есть в вашем дистрибутиве. Проверьте установленны ли пакеты bind и bind-chroot командами: rpm -q bind rpm -q bind-chroot. В данном руководстве указаны опции которые необходимо указать DNS серверу для обеспечения безопасности его функционирования. Журналирование событий Для своевременного реагирования на проблемы связанные с функционированием DNS сервера крайне важно вести журналирование событий Bind. Пакет Bind предоставляет администратору обширные возможности по настройке системы регистрации событий. Т.к. в стандартной конфигурации named настроен без включенной системы логирования и работает named в chroot окружении, то вам необходимо сделать некоторые дополнительные действия: В каталоге /var/named/chrrot/var создать каталог log в котором создайте каталог named. Создайте в каталоге /var/named/chroot/var/log/named файлы: xfer.log,lamers.log,conf.log, security.log. Установите права на эти файлы в 644 и установите владельца и группу на эти файлы named.named cd /var/named/chrrot/var/log/named touch xfer.log touch lamers.log touch conf.log touch security.log chmod 644 * chown named.named * logging{ channel "xfer" { file "/var/log/named/xfer.log" versions 3 size 10m; print-time yes; print-severity yes; severity info; }; channel "lame" { file "/var/log/named/lamers.log" versions 2 size 10m; print-time yes; print-severity yes; severity info; }; channel "config" { file "/var/log/named/conf.log" versions 3 size 10m; print-time yes; print-severity yes; severity info; }; channel "security" { file "/var/log/named/security.log" versions 3 size 10m; print-time yes; print-severity yes; severity info; }; //События связанные с получением зон category "xfer-in" { "xfer"; }; //События связанные с передачей зон category "xfer-out" { "xfer"; }; //События связанные с изменениями в зонах category "notify" { "xfer"; }; //События связанные с некорректным делегированием category "lame-servers" { "lame"; }; //События связанные с обработкой файла конфигурации category "config" { "config"; }; //События связанные с запрещением/разрешением запросов category "security" { "security"; }; //Если для события канал не определен category "default" { "default_syslog"; "default_debug"; }; }; Рассмотрим подробней один из каналов. Параметр file "имя" задает с каком файле будет храниться информация попадающая в данный канал. Опция version указывает уровень ротации данного канала, т.е.при достижении лимита указанного в параметре size файл переименовывается в "имя".0, "имя".1 и т.д. Для каждого из каналов в опции severity возможно указать события какой степени важности записывать в лог. Возможно указать следующие уровни: 1. critical , 2. error , 3. warning , 4. notice , 5. info , 6. debug , 7. dynamic . При указании уровня все события этого и вышестоящих уровней будут записываться в файл регистрации. Опция print-time yes; указывает на то, что в файле регистрации события должно указываться время в которое данное событие произошло. Опция print-severity yes; указывает DNS серверу записывать в файл регистрации уровень важности события. Рекомендуемые опции для обеспечения безопасности Для сокрытия версии bind в секции options добавьте строку version "DNS Server"; Для разрешения запросов только из своих сетей добавьте следующую строку allow-query { Список сетей; }; в секцию options. Если ваш DNS сервер является либо master либо slave для какой-либо зоны то Вам необходимо разрешить запросы для всех ip адресов. Данная опция разрешает запросы к DNS серверу только с ip адресов указанных в скобках. Для разрешения рекурсивных запросов добавьте allow-recursion { Список сетей; }; Обратите внимание на эту очень важную опцию. С помощью ее вы указываете своему серверу кому можно разрешать имена internet используя ваш DNS сервер. Обязательно используйте эту опцию, иначе вы можете столкнуться с ситуацией, когда запросами на разрешение имен к вашему DNS серверу будет сгенерированн большой объем входящего трафика за который в конечном итоге ваш провайдер заставит вас расчитаться (если у вас не безлимитный тариф конечно), либо ваш DNS сервер будет сильно загружен запросами на разрешение имен DNS, Данную опцию следует включить только для довереных сетей, без указания данной опции ваши клиенты не смогут делать преобразование символьных адресов в ip адреса. Если вы ведете master зону для домена, тогда для обновления информации о изменениях внесенных в файл зоны вам необходимо разрешить передачу зоны для slave серверов указанных у регистратора домена. Делается это опцией allow-transfer {список ip адресов slave серверов;}; Если вы ведете slave зону для какого-нибудь домена необходимо указать опцию allow-transfer { none; };. Данные опции могут задаваться как глобально в секции options так и для каждой зоны в отдельности. В случае если вы оплачиваете входящий либо исходящий трафик своему провайдеру, но ваш провайдер разрешил вам использовать его DNS сервера и стоимость обмена трафиком с данными серверами гораздо ниже чем глобальный трафик, либо обмен трафиком с данными серверами бесплатен, то я рекомендую использовать опции: forwarders {первый dns провайдера; второй dns провайдера;}; forward only; Данными параметрами Вы указываете вашему серверу BIND использовать DNS сервера провайдера для разрешения имен. Если Вы вместо forwarders only; укажете forward first; , то ваш DNS сервер будет пытаться разрешать имена с помощью DNS серверов указанных в параметре forwarders, и лишь в случае если разрешить имя с помощью данных серверов не удалось, то будет осуществлять попытки разрешения имени самостоятельно. В случае если ваш DNS сервер ведет несколько master зон имеет смысл установить ограничение на количество одновременных передач зон для каждого запрашивающего данные сервера. Делается это для того чтобы ваш DNS сервер не был загружен запросами на передачу зон. Для установки данного ограничения установите опцию transfers-per-ns 2; в секции options, тем самым мы разрешили одновременную передачу 2 зон для каждого slave сервера. В случае если ваш сервер обслуживает несколько сотен зон имеет смысл увеличить значение данного параметра. Можно также установить максимальное значение одновременно запрашиваемых зон вашим DNS сервером, за это отвечает параметр transfers-in 5; в секции options. Можно также установить значение одновременно запрашиваемых зон у вашего DNS сервера, за это отвечает параметр transfers-out 5; в секции options. Для того чтобы задать время в минутах которое DNS сервер может потратить на получение зоны с первичного DNS сервера служит параметр max-transfer-time-in 60;. Если по истечении времени зона так и не будет получена с первичного DNS сервера, то наш DNS сервер автоматически разорвет сессию. Для задание максимального времени на передачу зоны slave серверам служит параметр max-transfer-time-out 60;. Интервал обновления зоны может быть очень маленьким, таким образом вторичные DNS сервера будут зачастую выполнять ненужную работу. Для установления ограничений на минимальное и максимальное кол-во передач зоны можно использовать параметры: max-refresh-time 86400; // обновлять зону не реже чем раз в сутки. min-refresh-time 1800; // обновлять зону не чаще 1 раза в 30 минут. Также имеет смысл установить параметр recursive-clients 100; в секции options. Который ограничивает число клиентов параллельно обслуживаемых вашим DNS сервером. Параметр tcp-clients 200; Ограничивает число одновременных TCP (используется для передачи зон, и TCP запросов) соединений с вашим DNS сервером. Если в вашем сервере установлено несколько сетевых интерфейсов и вы хотите чтобы named работал только на одном из них, то вам необходимо использовать параметр listen-on {localhost; нужный сетевой интерфейс;}; Если вы не используете IPv6 отключите его поддержку в BIND listen-on-v6 { none; }; Работа под непривилегированным пользователем. Очень важным является указание BIND работать от имени непривилегированного пользователя а не от root-a. По умолчанию в RHEL bind так и работает от имени пользователя named. Убедиться в этом можно выполнив команду ps ax|grep named при запущеном демоне named, ответ должен выглядеть примерно так /usr/sbin/named -u named. Имя пользователя после параметра -u говорит под каким пользователем работает BIND. Другой способ убедиться у том, что BIND работает из под непривилегированного пользователя это проверить стартовый скрипт /etc/init.d/named на наличие строки daemon /usr/sbin/named -u named ${OPTIONS}; Пример кэширующего DNS сервера. Допустим ваш провайдер выделил вам 1 ip адрес. В вашей внутренней сети используется адресация 10.0.0.0/24 (10.0.0.0 по маске 255.255.255.0). У вашего шлюза в интернет внутренний ip адрес 10.0.0.1. Внешний ip адрес выделеный провайдером (192.168.0.10). IP адреса DNS серверов провайдера 192.168.0.1, 192.168.0.2. Данный DNS сервер должен разрешать имена используя только DNS сервера провайдера. \ //Настраиваем логирование logging { channel "xfer" { file "/var/log/named/xfer.log" versions 3 size 10m; print-time yes; print-severity yes; severity info; }; channel "lame" { file "/var/log/named/lamers.log" versions 2 size 10m; print-time yes; print-severity yes; severity info; }; channel "config" { file "/var/log/named/conf.log" versions 3 size 10m; print-time yes; print-severity yes; severity info; }; channel "security" { file "/var/log/named/security.log" versions 3 size 10m; print-time yes; print-severity yes; severity info; }; category "xfer-in" { "xfer"; }; category "xfer-out" { "xfer"; }; category "notify" { "xfer"; }; category "lame-servers" { "lame"; }; category "config" { "config"; }; category "security" { "security"; }; category "default" { "default_syslog"; "default_debug"; }; }; //Список сетей для которых разрешены рекурсивные запросы acl "my_net" { localhost; 10.0.0.0/24; }; options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; version "DNS Server"; allow-recursion { my_net; }; allow-query { my_net; }; forwarders { 192.168.0.1; 192.168.0.2; }; listen-on{localhost;10.0.0.1;}; forward only; recursive-clients 100; }; controls { inet 127.0.0.1 allow { localhost; } keys { rndckey; }; }; zone "." IN { type hint; file "named.ca"; }; zone "localdomain" IN { type master; file "localdomain.zone"; allow-update { none; }; }; zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { type master; file "named.local"; allow-update { none; }; }; include "/etc/rndc.key"; При данном подходе Вам не нужно открывать на внешнем интерфейсе 53 порт для запросов т.е. правила для iptables должны выглядеть так: В данном фрагменте правил предполагается, что eth0 - сетевой интерфейс с адресом 192.168.0.10 eth1 - сетевой интерфейс с адресом 10.0.0.1 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] #Разрешаем DNS запросы только к серверам провайдера -A INPUT -i eth0 -s 192.168.0.1/32 -d 192.168.0.10/32 -p tcp --sport 53 --dport 1025:65535 -j ACCEPT -A INPUT -i eth0 -s 192.168.0.1/32 -d 192.168.0.10/32 -p udp --sport 53 --dport 1025:65535 -j ACCEPT -A OUTPUT -o eth0 -d 192.168.0.1/32 -s 192.168.0.10/32 -p tcp --dport 53 --sport 1025:65535 -j ACCEPT -A OUTPUT -o eth0 -d 192.168.0.1/32 -s 192.168.0.10/32 -p udp --dport 53 --sport 1025:65535 -j ACCEPT -A INPUT -i eth0 -s 192.168.0.2/32 -d 192.168.0.10/32 -p tcp --sport 53 --dport 1025:65535 -j ACCEPT -A INPUT -i eth0 -s 192.168.0.2/32 -d 192.168.0.10/32 -p udp --sport 53 --dport 1025:65535 -j ACCEPT -A OUTPUT -o eth0 -d 192.168.0.2/32 -s 192.168.0.10/32 -p tcp --dport 53 --sport 1025:65535 -j ACCEPT -A OUTPUT -o eth0 -d 192.168.0.2/32 -s 192.168.0.10/32 -p udp --dport 53 --sport 1025:65535 -j ACCEPT #Разрешаем запросы из внутренней сети -A INPUT -i eth1 -s 10.0.0.0/24 -d 10.0.0.1/32 -p tcp --dport 53 --sport 1025:65535 -j ACCEPT -A INPUT -i eth1 -s 10.0.0.0/24 -d 10.0.0.1/32 -p udp --dport 53 --sport 1025:65535 -j ACCEPT -A OUTPUT -o eth1 -d 10.0.0.0/24 -s 10.0.0.1/32 -p tcp --sport 53 --dport 1025:65535 -j ACCEPT -A OUTPUT -o eth1 -d 10.0.0.0/24 -s 10.0.0.1/32 -p udp --sport 53 --dport 1025:65535 -j ACCEPT #Остальные правила iptables --//-- В /etc/resolv.conf пропишите nameserver 127.0.0.1 Может распространяться свободно при указании авторства. Автор: Фролов Денис.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру