使用 BIND 进行白名单/黑名单

使用 BIND 进行白名单/黑名单

因此,我正在研究限制学校网络互联网访问的可能方法。比较多个选项并得出在特定环境中哪个选项最好。到目前为止,我知道怎么做:防火墙(PFSense)、使用特定浏览器(Safe Exam Browser)、在路由器上使用 ACL。但我的老师也非常坚持让我使用 DNS 白名单/黑名单。

这将基于 BIND DNS 服务器,并可能使用 dnsmasq。如果我理解正确的话,它只允许我编辑 /etc/hosts 文件并将所有“烦人”的网站放入其中,以便将它们转换为虚假 IP(0.0.0.0)。

现在我的问题是,如何将网站列入白名单?如何列出我希望通过外部 DNS 进行翻译的网站并阻止所有其他网站?因为到目前为止,我还没有找到关于如何做到这一点的明确解释。

答案1

您说得对,与其他方法(例如基于 IP 地址的 ACL 或基于主机名的透明 HTTP 代理)相比,DNS 白名单并没有添加任何新内容,并且可以通过使用其他递归名称服务器、将名称添加到hosts文件或使用代理轻松规避。

域名管理系统会更容易实现这一点,因为你可以用每个域名两行简单的代码来制作白名单,从Dnsmasq 白名单作者:加里·道尔顿:

# Don't resolve any DNS, Blacklist all
no-resolv

# Whitelist domains to DNS lookup; 
# domain and forwarder NS (line for each pair)
server=/example.com/8.8.8.8
server=/example.com/1.1.1.1
server=/example.net/8.8.8.8
server=/example.net/1.1.1.1

# all other domains to localhost
address=/#/127.0.0.1

绑定,同样会有点棘手,需要更多配置。您可以添加递归,但使用无效的 DNS 服务器作为转发器。然后,使用真实的递归名称服务器将白名单域添加为转发区域。

此示例创建一个看法198.51.100.0/24网络中的客户端并添加白名单域(相当于上面的 Dnsmasq 配置):

view "limitedrecursion" {
     // Network of your clients
     match-clients { 198.51.100.0/24; };
     allow-recursion { 198.51.100.0/24; };
     recursion yes;
     forward only;
     // INVALID FORWARDER
     forwarders { 10.10.10.10; };

     // Forward zones for whitelisted domains
     zone "example.com" in { type forward; forwarders {8.8.8.8; 1.1.1.1; }; };
     zone "example.net" in { type forward; forwarders {8.8.8.8; 1.1.1.1; }; };
};

相关内容