LINUX.ORG.RU
ФорумAdmin

Настройка первичного DNS, защищённого от DNS Amplification


1

2

Хостер тут ругается, что мой первичный DNS подвержен DNS Amplification. Но я нифига не понимаю, как настроить сервер, чтобы не реагировал на запросы по сторонним доменам. Свои-то «на сторону» отдавать нужно.

Это не помогает:

    allow-recursion {
        /* Only trusted addresses are allowed to use recursion. */
        trusted;
    };

Вообще, any включено только для

    allow-query {
        /*
         * Accept queries from our "trusted" ACL.  We will
         * allow anyone to query our master zones below.
         * This prevents us from becoming a free DNS server
         * to the masses.
         */
        trusted;
        any;
    };

    allow-query-cache {
        /* Use the cache for the "trusted" ACL. */
        trusted;
        any;
    };

Больше никакой из сервисов для сторонних IP не разрешён.

Куда копать?

★★★★★

Защиты от DNS Amp нет, хостер тебя вводит в блуд. Единственное, что можно реализовать - включить Response Rate Limiting, чтобы не отвечать особенно рьяным ботам. Мне он вполне помог, named жрал до 100% процессора на моем dedicated сервере мутузя какого-то товарища (он мне даже письмо гневное написал :). После включения RRL нагрузка упала раз в 10-20.

Раньше он был патчем поверх бинда, но с какой-то версии его вроде как добавили в основной код.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

Защиты от DNS Amp нет, хостер тебя вводит в блуд

Ясно. А что, нельзя тупо указать, чтобы сервер обслуживал только запросы по своим доменам?

Единственное, что можно реализовать - включить Response Rate Limiting, чтобы не отвечать особенно рьяным ботам.

На этот счёт, вроде, народ правила для iptables пишет. Так-то пока проблема DDoS не стоит, просто хостер напрягает :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Ясно. А что, нельзя тупо указать, чтобы сервер обслуживал только запросы по своим доменам?

allow-recursion {} это оно и есть. По чужим доменам будет разрешать только тем, кто trusted.

Но c DNS Amp это не поможет т.к. долбят ответами как раз по твоему домену.

На этот счёт, вроде, народ правила для iptables пишет. Так-то пока проблема DDoS не стоит, просто хостер напрягает :)

Можно и так но внутри самого бинда это надёжнее.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

allow-recursion {} это оно и есть. По чужим доменам будет разрешать только тем, кто trusted.

Странно, но запрос со стороны (с неразрешённого IP) по dig @my-server google.com возвращает корректный ответ.

...

Хотя сейчас смотрю, там стоит WARNING: recursion requested but not available

$ dig @xxxxxxxxxxxxxx google.com

; <<>> DiG 9.9.3-P2 <<>> @xxxxxxxxxx google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43520
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 5
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com.                    IN      A

;; AUTHORITY SECTION:
google.com.             172798  IN      NS      ns1.google.com.
google.com.             172798  IN      NS      ns3.google.com.
google.com.             172798  IN      NS      ns2.google.com.
google.com.             172798  IN      NS      ns4.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.         345598  IN      A       216.239.32.10
ns2.google.com.         345598  IN      A       216.239.34.10
ns3.google.com.         345598  IN      A       216.239.36.10
ns4.google.com.         345598  IN      A       216.239.38.10

;; Query time: 2 msec
;; SERVER: xx.xxx.xxx.xx#53(xx.xxx.xxx.xx)
;; WHEN: Fri Oct 25 21:26:35 MSK 2013
;; MSG SIZE  rcvd: 175

Но c DNS Amp это не поможет т.к. долбят ответами как раз по твоему домену.

Ну, тут хотя бы тогда с вариантом по чужому домену решить, хостер именно его как пример приводит. Пусть хоть тут отвяжутся :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от sin_a

Он ее и так уже запретил, тут не в этом дело.

Он у тебя возвращает просто additional-section, т.е. NS сервера, на которых можно найти ответ.

Чтобы он не возвращал ничего, нужно сделать так:

options {
...
     allow-query {
        trusted;
    };
...
}
...
zone "domain.ru" {
...
    allow-query { any; };
...
}
Тогда он будет отвечать так:
# dig ya.ru @ns1.domain.ru

; <<>> DiG 9.7.3 <<>> ya.ru @ns1.domain.ru
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 25578
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;ya.ru.                         IN      A

;; Query time: 1 msec
;; SERVER: x.x.x.x#53(x.x.x.x)
;; WHEN: Fri Oct 25 21:39:51 2013
;; MSG SIZE  rcvd: 23
Что еще больше снизит эффективность DNS Amp.

blind_oracle ★★★★★
()
Ответ на: комментарий от sin_a

Прописал

   allow-recursion {
        /* Only trusted addresses are allowed to use recursion. */
//      trusted;
        127.0.0.1/32;
    };

Выхлоп при запросе с посторонней машины равно такой же, как в предыдущем сообщении.

Сервер, естественно, перезагружал. Результат проверил и с другой машины, с которой до этого не обращался (вдруг кеширование какое-то).

...

С другой стороны, сейчас посмотрел — я, вроде, основные доменные имена-то уже перетащил на CloudFlare. Так что сейчас тупо вообще вырубил bind, посмотрю, если ничего не отвалится — то и фиг с ним :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от blind_oracle
zone "domain.ru" {
...
    allow-query { any; };
...
}

Ага, вот, походу, это я и искал. Ну да сейчас посмотрим, может мне свой DNS уже и вообще не нужен :D

Смутило просто то, что письмо такое от хостера было с месяц назад, я запретил полностью все запросы со стороны и что-то у меня отвалилось, раз я вернул потом назад. Но что — уже не помню. Так что придётся отрубить второй раз и посмотреть, что получится :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

На центоси бинд с параметрами практически по умолчанию, только разрешена и ограничена рекурсия, даёт такой же результат как у проклятого_оракла. Хотя на поверхности вроде никаких значимых параметров не видно.

sin_a ★★★★★
()

Сделай два отдельных view - для запросов извне и для запросов из твоих сетей.

router ★★★★★
()
Ответ на: комментарий от KRoN73

Мне кажется это должно иметь значение если у тебя есть зоны, которые нельзя отдавать во внешний мир. Иначе, мне кажется, можно просто разрешить запросы, всё равно с отрезанной рекурсией только твои зоны и остаются.

sin_a ★★★★★
()
Ответ на: комментарий от router

З.Ы. Ещё нужно трансфер зоны ограничить своими DNS'ами, т.к. у него самый длинный вывод и для dns amplification проще всего использовать

router ★★★★★
()
Ответ на: комментарий от router

Перенос зоны лучше в любом случае ограничивать. Политика по умолчанию: запрещено всё, что не разрешено.

sin_a ★★★★★
()
Ответ на: комментарий от sin_a

:D

Вообще странно, т.к. только прямое ограничение allow-query{} на всех и разрешение на свою зону дает такой эффект. Возможно редхатовцы просто пропатчили бинд чтобы он так делал по дефолту, они любят там что-то мутить.

blind_oracle ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.