[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

bind9 allow-query



Привет.

Я знаю, тут есть опытных сисадминов...  Собственно, поводом для
исследования оказалось то, что Куклин заметил, что мой named, похоже,
участвует в DNS amplification attack и попросил быстро отключить
рекурсию.  Отключить-то я отключил, потом полез на slave, типа починить
и там, и...

Цитирую /usr/share/doc/bind9-doc/arm/Bv9ARM.ch06.html из bind9-doc
1:9.8.1.dfsg (ну и вообще интернет нам рассказывает то же самое):

allow-query

    Specifies which hosts are allowed to ask ordinary DNS
    questions. allow-query may also be specified in the zone statement,
    in which case it overrides the options allow-query statement. If not
    specified, the default is to allow queries from all hosts.

    Note

    allow-query-cache is now used to specify access to the cache.

Обратите внимание на "If not specified".

Теперь результаты экспериментов на slave.  Там версия бинда несколько
более старая, 1:9.6.ESV.R4+dfsg-0+lenny2, может, разница и есть, но
похоже, процитированное описание параметра достаточно давнее.

Итак.  Все запросы выполняются с внешнего по отношению к серверу хоста,
имитирующего абстрактный хост в интернете.  Изменения параметров
проводятся в глобальном блоке options, для простоты.

В отсутствие allow-query в named.conf.options:

    zsh% host minas.lasgalen.net nest.lasgalen.net; host www.ru nest.lasgalen.net 
    Using domain server:
    Name: nest.lasgalen.net
    Address: 31.28.5.91#53
    Aliases: 
    
    minas.lasgalen.net has address 178.63.209.8
    Using domain server:
    Name: nest.lasgalen.net
    Address: 31.28.5.91#53
    Aliases: 
    
    Host www.ru not found: 5(REFUSED)

То есть по умолчанию имеем то поведение, которого хотелось бы (за свою
зону отвечаем, с чужой посылаем).  Локально при этом тоже все хорошо,
т.е. локально оно на рекурсивные запросы отвечает.

Эквивалентное, согласно процитированнной документации, allow-query { any; };
дает, сюрприз, нифига не эквивалентный результат, как раз позволяющий
amplification (на мастере стояло именно оно):

    zsh% host minas.lasgalen.net nest.lasgalen.net; host www.ru nest.lasgalen.net
    Using domain server:
    Name: nest.lasgalen.net
    Address: 31.28.5.91#53
    Aliases: 
    
    minas.lasgalen.net has address 178.63.209.8
    Using domain server:
    Name: nest.lasgalen.net
    Address: 31.28.5.91#53
    Aliases: 
    
    www.ru has address 194.87.0.50
    www.ru mail is handled by 5 hq.demos.ru.

Если же поставить allow-query { localhost; };, то сервер перестает
отвечать наружу и за свои зоны:

    zsh% host minas.lasgalen.net nest.lasgalen.net; host www.ru nest.lasgalen.net
    Using domain server:
    Name: nest.lasgalen.net
    Address: 31.28.5.91#53
    Aliases: 
    
    Host minas.lasgalen.net not found: 5(REFUSED)
    [1]    23421 exit 1     host minas.lasgalen.net nest.lasgalen.net
    Using domain server:
    Name: nest.lasgalen.net
    Address: 31.28.5.91#53
    Aliases: 
    
    Host www.ru not found: 5(REFUSED)

Как же так, дорогая редакция?  Такое, гм, недокументированное поведение
вообще где-то документировано, или как?


Reply to: