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

本教程将向您展示如何使用 BIND DNS 解析器覆盖公共 DNS 记录 应对政策区 (RPZ) 在 CentOS/RHEL 上。

什么是响应策略区?

应对政策区 (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 记录,这不是很好吗?

先决条件

为了学习本教程,假设您在 CentOS/RHEL 服务器上运行了 BIND DNS 解析器。 如果没有,请阅读以下教程以设置 BIND 解析器。

  • 在 CentOS 8/RHEL 8 上设置您自己的 BIND9 DNS 解析器

一旦您的 BIND 解析器启动并运行,请按照以下说明进行操作。

如何在 CentOS/RHEL 服务器上设置 BIND 响应策略区

首先,编辑 named.conf 文件使用命令行文本编辑器,如 Nano。

sudo nano /etc/named.conf

options {...} 子句以启用响应策略区域。 (第一行是注释。)

//enable response policy zone.  response-policy {      zone "rpz.local";  };

然后向下滚动到此文件的底部并在此文件中添加 RPZ 区域。

zone "rpz.local" {     type master;     file "rpz.local";     allow-query { localhost; };     allow-transfer { 12.34.56.78; }; };

笔记:

  • 您可以使用绝对路径而不是简单的文件名 file 指示。 BIND 会假设文件在 /var/named/.
  • RPZ 区域应该只允许来自本地主机的查询。 您不需要添加本地网络客户端。
  • 代替 12.34.56.78 使用从属 BIND DNS 解析器的 IP 地址,允许进行区域传输。 如果只有一个 DNS 解析器,您可以使用 localhost 像这样: allow-transfer { localhost; };

建议RPZ使用单独的日志文件,以便更好地分析日志,因此在 logging {...}; 条款。

    channel rpzlog {   	file "/var/log/named/rpz.log" versions unlimited size 100m;     	print-time yes;     	print-category yes;     	print-severity yes;     	severity info;     };     category rpz { rpzlog; }; 

centos RPZ 日志

Save 和 close 文件。 然后创建 /var/log/named/ 目录并制作 named 作为业主。

sudo mkdir /var/log/named/ sudo chown named:named /var/log/named/ -R

然后我们需要创建区域文件。 我们可以使用区域模板文件,而不是从头开始创建区域文件。 复制内容 named.empty 到一个新文件。

sudo cp /var/named/named.empty /var/named/rpz.local

编辑区域文件。

sudo nano /var/named/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.

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

response-policy-zone-bind9-centos-redhat
Save 和 close 文件。 接下来,我们应该设置 named 作为群主 /var/named/rpz.local 文件,或命名将无法加载此区域。

sudo chown root:named /var/named/rpz.local

接下来,运行以下命令检查主配置文件中是否存在语法错误。 静默输出表示未发现错误。

sudo named-checkconf

然后检查 RPZ 区域文件的语法。

sudo named-checkzone rpz /var/named/rpz.local

如果没有发现错误,则重新启动 BIND。

sudo systemctl restart named

现在你可以运行 dig BIND 服务器上的命令以查看 RPZ 是否正常工作。 例如,查询包含在响应策略区域中的域名的 DNS 记录。

dig A nextcloud.your-domain.com @127.0.0.1

您应该在命令输出中看到类似下面的内容,这表明 DNS 响应是从本地 RPZ 提供的。

;; AUTHORITY SECTION: rpz.local			86400	IN	NS	localhost.

您还可以查看 BIND9 查询日志。

sudo tail /var/log/named/rpz.log

您会看到类似下面的内容,这意味着响应是从本地 RPZ 提供的。

(example.com): rpz QNAME Local-Data rewrite example.com via example.com.rpz.local

将 RPZ 与转发器一起使用

如果你添加一个 fowarders 指令如下 options 条款中的 /etc/named.conf 文件,然后您的 BIND 解析器成为转发器,它将 DNS 请求转发到上游 DNS 解析器,例如 8.8.8.8.

options { //      listen-on port 53 { 127.0.0.1; }; //      listen-on-v6 port 53 { ::1; };         directory       "/var/named";         max-cache-size 100m;         dump-file       "/var/named/data/cache_dump.db";         statistics-file "/var/named/data/named_stats.txt";         memstatistics-file "/var/named/data/named_mem_stats.txt";         secroots-file   "/var/named/data/named.secroots";         recursing-file  "/var/named/data/named.recursing";         allow-query     { localhost; 10.10.60.0/24;};          //enable response policy zone.          response-policy {             zone "rpz.local";          };          forwarders {                 8.8.8.8;                 8.8.4.4;         };         ... };

响应策略区域与此转发器设置一起使用。 绑定将首先查询本地响应策略区域。 如果在 RPZ 中找不到 DNS 记录,则请求将转发到上游 DNS 解析器。 当您自己的 BIND 解析器花费太多时间解析 DNS 名称时,您可能希望使用转发器来加速 DNS 解析。

配置区域传输

如果您有另一个 BIND DNS 解析器,您可以将其配置为从解析器以自动接收来自主 DNS 解析器的更新。

首先,您需要编辑 /etc/named.conf 文件在 主 DNS 解析器.

sudo nano /etc/named.conf

将从 DNS 解析器的 IP 地址添加到 allow-transfer 指示。

zone "rpz.local" {     type master;     file "/etc/bind/db.rpz.local";     allow-query { localhost; };     allow-transfer { 12.34.56.78; };     also-notify { 12.34.56.78; }; };

如果您有多个从属 DNS 解析器,则添加多个 IP 地址,如下所示。

 allow-transfer { 12.34.56.78; 12.34.56.79; };

also-notify 指令将使主 DNS 解析器在 RPZ 区域更改时向从解析器发送通知消息。 Save 和 close 文件。 重新启动 BIND 以使更改生效。

sudo systemctl restart named

如果主 DNS 解析器上运行了防火墙,则需要允许从属 DNS 解析器连接到端口 53。

sudo firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="12.34.56.78" accept" sudo systemctl reload firewalld

接下来,编辑 /etc/named.conf 文件在 从属 DNS 解析器.

sudo nano /etc/named.conf

options {...} 子句以启用响应策略区域。 (第一行是注释。)

//enable response policy zone.  response-policy {      zone "rpz.local";  };

然后在此文件的末尾添加一个从属 RPZ 区域。 代替 11.22.33.44 使用主 DNS 解析器的 IP 地址。

zone "rpz.local" {     type slave;     file "rpz.local";     masters { 11.22.33.44;};     allow-notify { 11.22.33.44; };     allow-transfer { none; };     allow-query { localhost; }; };

Save 和 close 文件。

您还需要配置从解析器的防火墙以允许主 DNS 解析器发送 notify 消息。

sudo firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="11.22.33.44" accept" sudo systemctl reload firewalld

接下来,运行以下命令检查主配置文件中是否存在语法错误。 静默输出表示未发现错误。

sudo named-checkconf

如果没有发现错误,则重新启动 BIND。

sudo systemctl restart named

BIND 重新启动后,区域传输将立即开始。 使用以下命令检查 BIND9 日志。

sudo journalctl -eu named

您可以看到如下消息,这表明区域传输成功。

transfer of 'rpz.local/IN' from xx.xx.xx.xx#53: Transfer status: success transfer of 'rpz.local/IN' from xx.xx.xx.xx#53: Transfer completed: 1 messages, 34 records, 899 bytes, 0.248 secs (3625 bytes/sec)

区域文件将保存为 /var/named/rpz.local 在从解析器上。

笔记: 无论何时修改主解析器上的 RPZ 区域,都需要更新序列号。 使它更大,以便从解析器知道 RPZ 区域已更改。

创建多个 RPZ 区域

有时您可能不希望某些 DNS 记录传输到从属解析器。 您可以创建单独的 RPZ 区域。 编辑 /etc/named.conf 文件。

sudo nano /etcnamed.conf

添加新的 RPZ 区域。

//enable response policy zone.  response-policy {      zone "rpz.local";     zone "rpz.local.notransfer";  };

在此文件的底部添加新区域的定义。

zone "rpz.local.notransfer" {     type master;     file "/var/named/rpz.local.notransfer";     allow-query { localhost; };     allow-transfer { localhost; }; };

Save 和 close 文件。 然后我们需要创建区域文件。 我们可以使用区域模板文件,而不是从头开始创建区域文件。 复制内容 named.empty 到一个新文件。

sudo cp /var/named/named.empty /var/named/rpz.local.notransfer

编辑区域文件。

sudo nano /var/named/rpz.local.notransfer

包起来

我希望本教程可以帮助您在 CentOS/RHEL 上设置响应策略区域/DNS 防火墙。 与往常一样,如果您发现这篇文章有用,请订阅我们的免费时事通讯以获取更多提示和技巧。 保重?