在 Debian/Ubuntu 上的 BIND 解析器中设置响应策略区 (RPZ)

本教程将向您展示如何使用 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.

笔记 所有左手名称不得以点结尾,所有右手名称必须以点结尾。