Назад | Перейти на главную страницу

Условная зона ACL в Bind9

Я пытаюсь применить restrictmoderate.youtube.com только для детей, а другим разрешить доступ к стандартному youtube.com с помощью Bind9.

# cat named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
==========================================================================
# cat named.conf.options 
acl goodclients {
    192.168.0.0/16;
    localhost;
    localnets;
};
acl kids   { 192.168.2.0/24; };
acl adults { 192.168.1.0/24; };

options {
    directory "/var/cache/bind";

    recursion yes;
    allow-query { goodclients; };

    // forward traffic to opendns
    forwarders { 208.67.222.222; 208.67.220.220; };

    forward only;

    dnssec-enable yes;
    dnssec-validation yes;

    // Conform to RFC1035
    auth-nxdomain no;

    // Force youtube.com to restrictmoderate.youtube.com
    response-policy { zone "rpz"; };

    listen-on-v6 { none; };
    querylog yes;
};
==========================================================================
# cat named.conf.local 
//include "/etc/bind/zones.rfc1918";
logging{
    channel simple_log {
        file "/var/log/bind/query.log" versions 3;
        severity info;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
    category default{
        simple_log;
    };
};

zone "rpz" IN {
    type master;
    file "/etc/bind/rpdb.zone";
    allow-query { kids; !adults; };
};
==========================================================================
# cat rpdb.zone 
$ORIGIN rpz.
$TTL 1H
@       IN       SOA       localhost. root.localhost. (
                           7
                           1H
                           15m
                           30d
                           2h )
                           NS LOCALHOST.

www.youtube.com           IN CNAME restrictmoderate.youtube.com.
m.youtube.com             IN CNAME restrictmoderate.youtube.com.
youtubei.googleapis.com   IN CNAME restrictmoderate.youtube.com.
youtube.googleapis.com    IN CNAME restrictmoderate.youtube.com.
www.youtube-nocookie.com  IN CNAME restrictmoderate.youtube.com.
google.com                IN CNAME forcesafesearch.google.com.
www.google.com            IN CNAME forcesafesearch.google.com.

Я не понимаю, почему зона "rpz" применяется ко всем (192.168.1.0/24 и 192.168.2.0/24), в то время как я ожидаю, что она будет применяться только к ACL для детей (192.168.2.0/24) :

allow-query { kids; !adults; };

Что я делаю не так? Спасибо за вашу помощь.

Зоны RPZ не являются обычными зонами DNS, и allow-query Директива ведет себя не так, как вы обычно ожидаете. В основном он используется для ограничения репликации. Из https://www.zytrax.com/books/dns/ch7/rpz.html :

Зоны RPZ могут быть запрошены (если ведущее устройство только ведомое устройство для чтения его SOA RR, если ведомое устройство, никогда)

. . .

Как отмечалось выше, ведущему устройству RPZ требуется только запрос от действующего ведомого устройства, чтобы прочитать его SOA RR (для действия передачи зоны). Оператор allow-query со списком всех подчиненных серверов или ссылкой на предложение ACL подходит. Подчиненное устройство RPZ вообще не нужно опрашивать. Разрешить-запрос {none;}; заявление подходит для реализации этого.

Лучше всего, вероятно, будет использовать ваши ACL для реализации представлений (нет недостатка в руководствах и практических рекомендациях для этого), при этом зона rpz находится только в представлении для детей. Кроме того, вы можете подумать о том, чтобы переписать ваши ACL, чтобы получить тот же эффект { kids; !adults; } (или добавление «другого» ACL для перехвата всего, что не входит в ваши 2 перечисленные подсети):

acl adults { 192.168.1.0/24; 127.0.0.1; };
acl kids   { !adults; };

Но все зависит от вас.

Удачи!