Фильтрация запросов на уровне DNS

Начиная с версии 9.8.1 DNS-сервера bind появилась новая возможность — DNS RPZ. Это интересный инструмент, который может оказаться весьма полезным для многих сисадминов. Странно, но в русскоязычном сегменте интернета эта тема совершенно не освещена. Спешу восполнить этот пробел.

Что это за зверь и с чем его едят?


Аббревиатура RPZ означает response policy zone — зона с политикой ответов. Это технология, разработанная ISC, которая предоставляет опрераторам связи простой способ блокирования DNS-запросов к некоторым ресурсам или перенаправления их на альтернативный адрес. RPZ — это зона, которая может передаваться между серверами (DNS AXFR/IXFR), защищена подписями транзакций (DNS TSIG) и обновляется в режиме реального времени (DNS NOTIFY).

Формат зоны


Как и для любой другой DNS-зоны, требуется SOA-запись и, как минимум, одна NS-запись. SOA — действительная, имеющая серийный номер и таймеры запись, используемая для делегирования зоны и указывающая времени жизни записей (TTL). NS-запись никогда не используется и служит для совместимости. Обычно, единственная NS-запись имеет фиктивное значение localhost. Остальная часть зоны — это выражения для DNS-политик. Политики могут применяться к именам доменов или к их шаблонам.

Как работает


Упрощенно работу RPZ можно представить следующей схемой:

В правой части показана схема работы с обычным кеширующим DNS-сервером, который возвращает клиенту все ответы от коневых серверов, как есть. В случае с RPZ появляется Security Policy Provider (провайдер политик безопасности) — DNS-сервер с которого мы берем политики разрешения доменных имен. Наличие стороннего провайдера совершенно не обязательно, мы можем сами задать свои локальные политики. Об этом чуть позже, в примерe.

Провайдеров может быть несколько, в том числе мы можем создать свой собственный сервер RPZ:

Более подробно о работе протокола можно прочитать в официальной документации (ссылки ниже) — думаю, те, кому нужны детали, осилят ее самостоятельно.

Покажем работу RPZ на примере рабочих конфигов. Здесь подразумевается что у вас уже есть настроенный DNS-сервер, я лишь покажу опции, которые нужно включить, чтобы все заработало. Действо разворачивается в Ubuntu 12.10.

Сперва в файле /etc/bind/named.conf.options опцией «response-policy» включаем RPZ:
response-policy { 
    zone "rpz.zone";
  };


Внутри «response-policy» зон может быть несколько, причем у каждой может быть своя политика (подробности см. в спецификации).

В файле /etc/bind/named.conf.local помещаем описание зоны:
zone "rpz.zone" {
       type master;
       file "/etc/bind/db.rpz.zone";
       allow-query {any;};
       allow-update {none;};
};


И, наконец, сама зона (файл /etc/bind/db.rpz.zone):
;RPZ
$TTL 10
@       IN SOA rpz.zone. rpz.zone. (
       5;
       3600;
       300;
       86400;
       60 )
       IN      NS      localhost.

vk.com          CNAME   habrahabr.ru.
*.gov.by        CNAME   .
gov.by          MX      0       gmail.com.
*.blabla.com    A       1.2.3.4
*.xxx           A       127.0.0.1 
1.by               CNAME   abcde-net.by.



Применяем новые настройки:
sudo rndc reload

и смотрим, что у нас вышло:
dig vk.com

; <<>> DiG 9.8.1-P1 <<>> vk.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11880
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;vk.com.                                IN      A

;; ANSWER SECTION:
vk.com.                 10      IN      CNAME   habrahabr.ru.
habrahabr.ru.           466     IN      A       212.24.43.44

;; Query time: 0 msec
;; SERVER: 192.168.3.204#53(192.168.3.204)
;; WHEN: Thu Apr 25 00:56:49 2013
;; MSG SIZE  rcvd: 66


Как видно из ответа сервера, адрес подменен на habrahabr.ru.
В браузере увидим следующее:

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

dig gov.by

; <<>> DiG 9.8.1-P1 <<>> gov.by
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10961
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;gov.by.                                IN      A

;; AUTHORITY SECTION:
rpz.zone.               10      IN      SOA     rpz.zone. rpz.zone. 8 3600 300 86400 60

;; Query time: 11 msec
;; SERVER: 192.168.3.204#53(192.168.3.204)
;; WHEN: Thu Apr 25 00:59:18 2013
;; MSG SIZE  rcvd: 68


Здесь запрос остался без ответа. То же самое произойдет с любым поддоменом gov.by:

Нетрудно догадаться, что все субдомены домена blabla.com будут подменены на адрес 1.2.3.4, а все домены зоны xxx будут заменены на localhost.

Последнюю строчку зоны поясню отдельно. Являясь мелким провайдером в провинциальном городке, часто сталкиваемся с проблемой совершенно тугих юзеров, для которых набрать адрес нашей домашней странички является непосильной задачей (а это отправная точка для всех наших внутренних ресурсов).
Дело порой доходит до комических случаев, когда техподдержка бьется в истерике головой об стол. Именно для этого была создана эта запись. Клиенту достаточно набрать в адресной строке браузера «1.by» (без кавычек), и он попадает туда, куда нужно:


А чтобы подобное безобразие не мозолило глаз более-менее грамотным пользователям, средствами веб-сервера (RewriteRule в Apache) хост «1.by» перенаправляется на валидный адрес сервера.

Ссылки:
ftp.isc.org/isc/dnsrpz/isc-tn-2010-1.txt
kb.isc.org/category/110/0/10/Software-Products/BIND9/Features/DNSRPZ
Share post

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 11

    +1
    Остается надеятся что хотя бы некоторые провайдеры возьмут это на вооружение и будут блокировать хосты по спискам роскомнадзора именно так, а не по ip адресам. Хотя уже столько времени прошло с момента выхода 9.8.1, а толку 0…
      +1
      Если уж некоторые провайдеры блокируют адреса, вообще не входящие ни в список Минюста, ни в реестр Роскомнадзора, то зачем им заморачиваться?
        +1
        Да нет, наоборот пусть используют. Это же самая простая блокировка.
        Обходится прописыванием DNS гугла
          +2
          до того момента пока трафик до публичных днс не будет завернут на такой бинд.
        0
        Ну так-то я и сейчас могу у себя на DNS прописать те же gov.by, vk.com и т.д. И юзеру точно также будут возвращаться данные, которые я захочу. В чем преимущество RPZ?
          0
          Формально, не можете, если не являетесь владельцем этих доменов. И потом, предположим ситуацию, когда вам нужно заблокировать 1000 хостов, каждый из которых находится в разных доменах. Будете у себя прописывать 1000 авторитативных зон? Ерунда получится
            0
            Формально я не вижу разницы между прописыванием RPZ и простой зоны — обе изменяют оригинальный адрес.
            По поводу прописывания 1000 зон — согласен, удобнее. Но я не верю, что это придумывалось только для удобства. Должны быть какие-то другие преимущества.
            PS. Мне не «не нравится эта фигня». Мне действительно интересно, что же в этой фиче по-настоящему полезного.
              0
              Не скажите. Это две большие разницы. Если в RPZ вы прописываете исключения для хостов любых зон, то в зонах вы описываете все хосты этих зон. Это во-первых. Во-вторых, как вы собираетесь получить список хостов чужого домена, если на корневом сервере этого домена запрещен трансфер зоны налево? Сравните, например, вывод
              dig @u1.hoster.by -t AXFR any gov.by
              и
              dig @ns1.vkontakte.ru -t AXFR any vk.com
              Список хостов gov.by вы получите, а vk.com — уже нет. И таких, как vk.com, я думаю, большинство. Т.е. ничего не получится.
              Что касается других преимуществ — не готов пока ответить на этот вопрос, т.к. сам еще не разобрался досконально в этой технологии.
                0
                Исключения или нет, все равно идет подмена адреса, что формально не есть хорошо.
                В приведенных примерах у Вас почти все записи — *.домен. Про исключения в статье ни слова.
                > сам еще не разобрался досконально в этой технологии.
                Вот про это я и говорю. «Нашел фичу в чейнджлоге, прикольно, зачем нужно — пока не разобрался». А тут интереснее все-таки нормальные юз-кейсы
                  0
                  юз-кейс простой — создание списков не хороших ресурсов и быстрое распостранение их до пописчиков. ака spamhaus для dns.
                    0
                    Вот как раз этот момент как раз и не освещен в статье

        Only users with full accounts can post comments. Log in, please.