Bind

Bind9 中的 ACL 條件區域

  • February 25, 2020

我正在嘗試僅為孩子應用“restrictmoderate.youtube.com”,並讓其他人使用 Bind9 訪問標準的“youtube.com”。

# 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 區域可能會被查詢(如果一個 master 只能由一個 slave 讀取它的 SOA RR,如果是一個 slave,則從不)

. . .

如上所述,RPZ 主站只需要被有效的從站查詢以讀取其 SOA RR(用於區域傳輸操作)。列出所有從屬伺服器或引用 ACL 子句的允許查詢語句是合適的。根本不需要查詢 RPZ 從站。允許查詢 {none;}; 聲明適合實現這一點。

您最好的方法可能是使用您的 ACL 來實現視圖(不缺少指南和操作方法),而 rpz 區域僅位於“兒童”視圖中。此外,您可能需要考慮像這樣重寫您的 ACL 以獲得相同的效果{ kids; !adults; }(或添加“其他”ACL 以擷取不在您列出的 2 個子網中的所有內容):

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

完全取決於你。

祝你好運!

引用自:https://serverfault.com/questions/1004550