Вы уже устали от кучи сообщений от logcheck'а об откаpе в обслуживании запросов к named? Ниже будет написано как ограничить себя от DDoS к named'у при помощи пакета fail2ban.
События о которых идёт речь выглядят так:
Однако следует отметить, что в большинстве случаев ip-адрес источника может быть сфальсифицирован. Каждый узел в бот-сети может послать один или несколько пакетов в секунду к DNS-серверу. Сервер в свою очередь отвечает сообщением об ошибке в запросе сфальсифицированному адресу, вызывая отказ в обслуживании у источника.
Устали от того, что ваш DNS сервер используется в качестве оружия в чужих DDoS-атаках? Попробуйте установить себе пакет fail2ban (Debian GNU/Linux). Оригинальный сайт проекта www.fail2ban.org.
Сначала установим себе пакет fail2ban. По умолчанию будут отслеживаться и блокироваться только атаки на службу ssh. Это неплохая идея. В пакете fail2ban могут контролироваться и другие службы, более того можно самостоятельно написать обработчики и фильтры к нему, но обсуждение этих вопросов выходит за рамки данной статьи.
После того как пакет будет установлен проверяем содержимое файла /etc/fail2ban/jail.conf.
В конце файла находим описание которое надо произвести в настройках сервера named чтобы fail2ban смог нормально обрабатывать события для службы DNS.
Для начала создадим каталог в котором будет сохраняться журнал работы DNS-сервера:
После этого отредактируем /etc/bind/named.conf.local (У вас он может находиться в другом месте. Указанное имя актуально для пакета bind9 в Debian) добавив следующие строки:
Перестартовываем Bind:
Убеждаемся в том, что создаётся и заполняется журнал /var/log/named/security.log:
Отлично, теперь внесём изменения в наструйку fail2ban. Открываем на редактирование /etc/fail2ban/jail.conf и вносим следующие изменения:
заменяем на
а также:
на
Перестартовываем fail2ban:
Убеждаемся, что fail2ban создаёт свой журнал /var/log/fail2ban.log, он будет содержать что-то вроде:
Убеждаемся так-же в том, что fail2ban внёс соответствующие изменения в iptables:
Теперь можно проверить насколько актуально и своевременно fail2ban ограничивает доступ:
Теперь DNS сообщения об ошибках будут находиться в нескольких минутах друг от друга, а не в секундах.
Теперь о некоторых доработках напильником.
Скажем сервису logcheck смотреть в новое место для нахождения сообщений об ошибках. Правим файл /etc/logcheck/logcheck.logfiles добавив в конец файла строку:
Убеждаемся, что мы теперь получаем сообщения от fail2ban по e-mail'у.
Хорошей идеей будет исследование опций в секции [DEFAULT] сервиса fail2ban в файле /etc/fail2ban/jail.conf. Возможно вы также захотите включить контроль других служб, кроме named. Может быть имеет смысл внести изменения в правила для игнорирования сетей из RFC1918 (смотрим в сторону опции ignoreip).
Также можно подумать об изменении bantime = 600 на более длительный срок.
Можно попробовать написать самостоятельно свои фильтры для fail2ban если вы в достаточной степени владеете магией составления регулярных выражений ;)
Короче дерзаем и исследуем :)
ps: Да, ещё, это всего лишь вольный перевод "Blocking a DNS DDOS using the fail2ban package" с некоторыми дополнениями из практики ;)
События о которых идёт речь выглядят так:
System Events =-=-=-=-=-=-= Jan 21 06:02:13 www named[32410]: client 66.230.128.15#15333: query (cache) +'./NS/IN' denied
Однако следует отметить, что в большинстве случаев ip-адрес источника может быть сфальсифицирован. Каждый узел в бот-сети может послать один или несколько пакетов в секунду к DNS-серверу. Сервер в свою очередь отвечает сообщением об ошибке в запросе сфальсифицированному адресу, вызывая отказ в обслуживании у источника.
Устали от того, что ваш DNS сервер используется в качестве оружия в чужих DDoS-атаках? Попробуйте установить себе пакет fail2ban (Debian GNU/Linux). Оригинальный сайт проекта www.fail2ban.org.
Сначала установим себе пакет fail2ban. По умолчанию будут отслеживаться и блокироваться только атаки на службу ssh. Это неплохая идея. В пакете fail2ban могут контролироваться и другие службы, более того можно самостоятельно написать обработчики и фильтры к нему, но обсуждение этих вопросов выходит за рамки данной статьи.
aptitude install fail2ban
После того как пакет будет установлен проверяем содержимое файла /etc/fail2ban/jail.conf.
В конце файла находим описание которое надо произвести в настройках сервера named чтобы fail2ban смог нормально обрабатывать события для службы DNS.
Для начала создадим каталог в котором будет сохраняться журнал работы DNS-сервера:
mkdir /var/log/named chown bind.bind /var/log/named chmod 750 /var/log/named
После этого отредактируем /etc/bind/named.conf.local (У вас он может находиться в другом месте. Указанное имя актуально для пакета bind9 в Debian) добавив следующие строки:
logging { channel security_file { file "/var/log/named/security.log" versions 3 size 30m; severity dynamic; print-time yes; }; category security { security_file; }; };
Перестартовываем Bind:
/etc/init.d/bind9 restart
Убеждаемся в том, что создаётся и заполняется журнал /var/log/named/security.log:
21-Jan-2010 07:19:54.835 client 66.230.160.1#28310: query (cache) './NS/IN' denied
Отлично, теперь внесём изменения в наструйку fail2ban. Открываем на редактирование /etc/fail2ban/jail.conf и вносим следующие изменения:
[named-refused-udp] enabled = false
заменяем на
[named-refused-udp] enabled = true
а также:
[named-refused-tcp] enabled = false
на
[named-refused-tcp] enabled = true
Перестартовываем fail2ban:
/etc/init.d/fail2ban restart
Убеждаемся, что fail2ban создаёт свой журнал /var/log/fail2ban.log, он будет содержать что-то вроде:
2010-01-21 07:34:32,800 fail2ban.actions: WARNING [named-refused-udp] Ban 76.9.16.171 2010-01-21 07:34:32,902 fail2ban.actions: WARNING [named-refused-tcp] Ban 76.9.16.171
Убеждаемся так-же в том, что fail2ban внёс соответствующие изменения в iptables:
$ sudo iptables-save | grep fail2ban
Теперь можно проверить насколько актуально и своевременно fail2ban ограничивает доступ:
tail -f /var/log/named/security.log
Теперь DNS сообщения об ошибках будут находиться в нескольких минутах друг от друга, а не в секундах.
Теперь о некоторых доработках напильником.
Скажем сервису logcheck смотреть в новое место для нахождения сообщений об ошибках. Правим файл /etc/logcheck/logcheck.logfiles добавив в конец файла строку:
/var/log/named/security.log
Убеждаемся, что мы теперь получаем сообщения от fail2ban по e-mail'у.
Хорошей идеей будет исследование опций в секции [DEFAULT] сервиса fail2ban в файле /etc/fail2ban/jail.conf. Возможно вы также захотите включить контроль других служб, кроме named. Может быть имеет смысл внести изменения в правила для игнорирования сетей из RFC1918 (смотрим в сторону опции ignoreip).
Также можно подумать об изменении bantime = 600 на более длительный срок.
Можно попробовать написать самостоятельно свои фильтры для fail2ban если вы в достаточной степени владеете магией составления регулярных выражений ;)
Короче дерзаем и исследуем :)
ps: Да, ещё, это всего лишь вольный перевод "Blocking a DNS DDOS using the fail2ban package" с некоторыми дополнениями из практики ;)