本教程将向您展示如何使用 BIND DNS 解析器覆盖公共 DNS 记录 应对政策区 (RPZ) 在 Debian/Ubuntu 上。
什么是响应策略区?
应对政策区 (RPZ) 允许 DNS 解析器修改 DNS 记录。 它最初是为了阻止访问危险网站而开发的。 例如,如果计算机查询传播恶意软件的已知危险站点的 IP 地址,DNS 解析器可以返回 127.0.0.1
作为 DNS 响应,因此计算机无法连接到危险站点。 这是原始用例。 因此,响应政策区也被称为 DNS防火墙.
您可以通过其他方式使用 RPZ。 例如,
- 如果您在本地网络中有 Nextcloud 等自托管服务,您可以使用 RPZ 将您的 Nextcloud 域(nextcloud.your-domain.com)指向本地 IP 地址,这样您就不必外出上网然后返回到您的本地网络以访问 Nextcloud 服务器。
- 父母可以使用 RPZ 来阻止他们的孩子访问色情网站。
- 您可以阻止不需要的广告。
- 我在我的 VPS 上安装了许多 Web 应用程序。 当 Web 应用程序不适用于公共访问时,我仅在 BIND RPZ 中添加 DNS 记录,并且不在我的域注册商处发布 DNS 记录以防止黑客入侵。
是的,您可以在 /etc/hosts
本地计算机上的文件以覆盖公共 DNS 记录,但它不能很好地扩展。 此外,iOS 和 Android 不允许您创建本地 DNS 条目。 如果 BIND DNS 解析器覆盖公共 DNS 记录,那么网络中使用 BIND 解析器的所有设备都可以使用自定义 DNS 记录,这不是很好吗?
先决条件
要学习本教程,假设您在 Debian/Ubuntu 服务器上运行了 BIND DNS 解析器。 如果没有,请阅读以下教程之一来设置 BIND 解析器。
- 在 Debian 10 Buster 上设置您自己的 BIND9 DNS 解析器
- 在 Ubuntu 16.04/18.04 上设置你自己的 BIND9 DNS 解析器
- 在 Ubuntu 20.04 上设置你自己的 BIND9 DNS 解析器
一旦您的 BIND 解析器启动并运行,请按照以下说明进行操作。
如何在 Debian/Ubuntu 服务器上设置 BIND 响应策略区
首先,编辑 named.conf.options
文件。
sudo nano /etc/bind/named.conf.options
在 options {...}
子句以启用响应策略区域。 (第一行是注释。)
//enable response policy zone. response-policy { zone "rpz.local"; };
Save 和 close 文件。 然后打开 named.conf.local
文件。
sudo nano /etc/bind/named.conf.local
在此文件中添加一个 RPZ 区域。
zone "rpz.local" { type master; file "/etc/bind/db.rpz.local"; allow-query { localhost; }; allow-transfer { 12.34.56.78; }; };
笔记:
- 在目录中使用绝对路径而不是简单的文件名很重要
file
指令,否则 BIND 会假设文件在/var/cache/bind/
. - RPZ 区域应该只允许来自本地主机的查询。 您不需要添加本地网络客户端。
- 代替
12.34.56.78
使用从属 BIND DNS 解析器的 IP 地址,允许进行区域传输。 如果只有一个 DNS 解析器,您可以使用localhost
像这样:allow-transfer { localhost; };
Save 和 close 文件。 然后我们需要创建区域文件。 我们可以使用区域模板文件,而不是从头开始创建区域文件。 复制内容 db.empty
到一个新文件。
sudo cp /etc/bind/db.empty /etc/bind/db.rpz.local
然后编辑 db.rpz
文件。
sudo nano /etc/bind/db.rpz.local
无需更改现有内容。 我们只需添加我们的自定义 DNS 记录。 例如,如果您在本地网络上有一个 IP 地址为 192.168.0.103 的 Nextcloud 服务器,那么您添加以下 DNS 记录,这样 Nextcloud 客户端就不必为了连接到 Nextcloud 服务器而上网.
nextcloud.your-domain.com A 192.168.0.103
如果您不希望您的孩子访问诸如 pornhub.com 之类的色情网站,请在此文件中添加以下行以阻止整个 pornhub.com 域。
*.pornhub.com CNAME .
如果您不喜欢在网页上看到 Google Adsense 广告,可以添加以下行来阻止 doubleclick.net
域,用于投放 Adsense 广告。
*.doubleclick.net CNAME .
要覆盖域名的 MX 记录,请添加如下一行。
example.com MX 0 mail.example.com.
笔记 所有左手名称不得以点结尾,所有右手名称必须以点结尾。