因此,我正在研究限制学校网络互联网访问的可能方法。比较多个选项并得出在特定环境中哪个选项最好。到目前为止,我知道怎么做:防火墙(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; }; };
};