命名配置文件

命名配置文件

我的设置变得越来越复杂,通常我倾向于将事物分成几部分,然后自己将它们组装在一起。但这次我似乎需要更多帮助才能让整个齿轮协同工作。这就是为什么用户 @Rui F Ribeiro 要求我将这个问题作为一个单独的问题提出。


我想实现什么目标?基本上我在互联网上发现的称为 DNS 防火墙。
我需要一个配置有以下功能的 BIND 服务器:

  • 它希望它能够默认将所有请求转发到外部 DNS(在我的例子中 OpenDNS:208.67.222.222、208.67.220.220)
  • 它不能在任何情况下查询根服务器,因为 OpenDNS 有一些有用的域阻止/操作功能。因此,如果我的绑定服务器开始随机向 OpenDNS 和根服务器询问,我每次都会得到不同的结果。(注意:由于各种原因,此转发必须在加密模式下完成,包括不被中间的其他服务器拦截和进一步操纵)
  • 绑定服务器还必须充当缓存,可以将查询发送到 OpenDNS,但如果我已经有新鲜数据,则无需一次又一次查询,浪费带宽和时间。
  • 这是我的另一个主要请求,这使我的配置变得更加复杂:我想设置一个包含大量域列表的 RPZ 区域,我不希望它们能够被解析,基本上我想让它们解析为 127.0.0.1 或我的局域网的另一个 ip/主机,这应该作为捕获-所有用于广告目的的http服务器等等。

我怎样才能实现如此复杂的配置?

这是我的配置文件,我想这里有些东西没有按需要工作,所以请帮助我进行配置。


命名配置文件

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

命名.conf.选项

acl "trusted" {
        127.0.0.1/8;
        10.0.0.0/8;
        172.16.0.0/12;
        192.168.0.0/16;
        ::1;
};

options {

        directory "/var/cache/bind";    # bind cache directory

        recursion yes;                  # enables resursive queries

        allow-query { trusted; } ;

        allow-recursion { trusted; };   # allows recursive queries from "trusted" clients

        //listen-on { 0.0.0.0; };       # interfaces where to listen

        allow-transfer { none; };       # disable zone transfers by default

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        forward only;

        forwarders {
                208.67.222.222;
                208.67.220.220;
        };


        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================

        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside auto;


        auth-nxdomain no;               # conform to RFC1035
        #listen-on-v6 { any; };

        response-policy {
                zone "rpz-white" policy PASSTHRU; // my own white list
                zone "rpz-foreign";    // obtained from producer
        };

};

zone "rpz-white" {
  type master;
  file "/etc/bind/rpz-white.db";
};

zone "rpz-foreign" {
  type master;
  file "/etc/bind/rpz-foreign.db";
};

命名.conf.local

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

命名.conf.默认区域

// prime the server with knowledge of the root servers
//zone "." {
//      type hint;
//      file "/etc/bind/db.root";
//};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

答案1

因此,让我们检查一下您的所有愿望。我改变顺序只是为了首先解决更容易的问题。

1)BIND必须充当缓存。

这就是它默认所做的;无需配置任何东西。

2) 我们不会与根名称服务器交谈。

我看到你已经评论了根提示;现在,当我们与组织/家庭外部的 DNS 服务器通信时,我建议不要转发带有 IP 地址的请求。所以评论forward only;和取消评论include "/etc/bind/zones.rfc1918";

3)这里的 RPZ 看起来不错。在中,rpz-foreign.db您必须定义 DNS 名称/域正则表达式

www.domaintoblacklist.xxx CNAME myserver

或者

www.domaintoblacklist.xxx A 127.0.0.1

4)至于加密连接;我正在这样做域名加密。 DNS crypt 让您可以通过 TLS/SSL 与包括 OpenDNS 在内的多个 DNS 提供商讨论 DNS;另一个优点是人们无法监听或更改您的 DNS 请求。

最简单的安装方法是下载脚本dnscrypt 自动安装

要下载脚本,请执行以下操作:

git clone https://github.com/simonclausen/dnscrypt-autoinstall

该脚本是为独立的 dnscrypt 使用而完成的,因此在其之上使用 BIND 需要一些额外的工作。

那么开始吧:

./dnscrypt-autoinstall.sh

该脚本将询问一系列问题,包括您是否喜欢使用 DNS 服务。

它将更改您的 /etc/resolv.conf 以指向您的本地主机,即 dnscrypt。您必须将 resolv.conf 更改为 BIND。稍后会详细介绍。

在 localhost 中,你的 BIND 将会监听;守护dnscrypt-proxy进程将监听 127.0.0.2 和 127.0.0.3。dnscrypt-proxy将是与 opendns 服务器对话的人。

转发器 BIND 还必须配置为与以下对象通信dnscrypt

options {
  ...
    forwarders {
            127.0.0.2;
            172.0.0.3;
    };
  ...

}

我还编辑了 /etc/init.d/dnscrypt-proxy 并将 127.0.0.1 行更改为 127.0.0.3

$DAEMON --daemonize --ephemeral-keys --user=dnscrypt --local-address=127.0.0.3 --resolver-address=$ADDRESS1 --provider-name=$PNAME1 --provider-key=$PKEY1

剧本也发生了变化/etc/resolv.conf;你必须将其更改为指向 BIND/0.0.0.0(在 DNS 术语中又名 127.0.0.1)

chattr -i /etc/resolv.conf

并编辑它。

完成:

service dnscrypt-proxy restart
service bind9 restart

加密配置完成后:

  • 使用 BIND 作为缓存进行通信的客户端
  • BIND 将与仍使用“正常”DNS 协议的 dnsproxy 的两个实例进行通信
  • dnsproxy 与选定的提供商交谈,并通过 443/UDP 和 443/TCP 加密 DNS。

如果要监控发往外部的数据包:

sudo tcpdump -n port 443

相关内容