BIND9:结合密钥和 ACL 以允许更新

BIND9:结合密钥和 ACL 以允许更新

我已经设置了 BIND 9 服务器并配置了加密密钥,以便允许从客户端进行更新。现在,在我的 中named.conf,我已设置以下内容:

allow-update { key dns1.example.org.; };

这有效,我可以从我的客户端(nsupdate命令)执行更新(添加,删除区域记录)。

我想知道是否可以将其与 ACL 结合使用。基本上,我希望客户端需要正确的密钥,但也必须来自某个子网或 IP 地址。我能以某种方式做到这一点吗?我在文档中找不到有关该场景的任何信息。

答案1

Alcs 是第一个匹配项。如果您排除了想要的地址,则可以使用 any 拒绝所有不匹配的地址;然后检查密钥是否匹配。

   allow-update { !{ !allowed; any; }; key keyname; };

答案2

丑陋的答案#1

你只有愿意发挥创造力、愿意忍受丑陋和粗暴才能做到这一点。

仅允许来自具有密钥 dns1.example.com 的 1.2.3.0/24 的更新。

acl “mix-match” {
! 128.0.0.0/1;
! 64.0.0.0/2
! 32.0.0.0/3
! 16.0.0.0/4
! 8.0.0.0/5
! 4.0.0.0/6
! 2.0.0.0/7
! 0.0.0.0/8     //0 instead of 1 since bit is set in the desired network
! 1.128.0.0/9
! 1.64.0.0/10
! 1.32.0.0/11
! 1.16.0.0/12
! 1.8.0.0/13
! 1.4.0.0/14
! 1.0.0.0/15    //0 instead of 2 since bit is set in the desired network
! 1.3.0.0/16    //1-st bit = 1: we DENY hosts with 1.3.0.0/16 but allow 1.2.0.0/16
! 1.2.128.0/17
! 1.2.64.0/18
! 1.2.32.0/19
! 1.2.16.0/20
! 1.2.8.0/21
! 1.2.4.0/22
! 1.2.0.0/23    //0 instead of 2 since bit is set in the desired network
! 1.2.2.0/24    //1-st bit = 9: we DENY hosts with 1.2.2.0/24 but allow 1.2.3.0/24

key dns1.example.com.;
};

如何进行按位运算:

  1. 对于/X 子网,需要 X 行。
  2. 将子网IP转换为二进制形式。
  3. 您从第 1 位开始 - 如果允许的子网设置了此位,则您拒绝的规则将使其清除,并且如果允许的子网中的位为 0,那么您的规则将拒绝该位设置。
  4. 对于规则 #N,前 N-1 位与所需子网掩码相同,位 N 如步骤 3 中所述。

我实际上没有尝试过,但应该可行。

如果您有多个允许的子网,我祝您好运。

就这个答案而言,我很高兴 IPv6 尚未被广泛部署。:)

丑陋的答案#2

单独设置隐身(即未列为 NS)主名称服务器,其防火墙规则仅允许来自“允许”子网的数据包从其从属名称服务器。在此隐身状态下,仅允许使用密钥进行更新。配置从属服务器以通过 AXFR/IXFR 和 NOTIFY 获取区域数据。并且不要忘记在从属服务器上禁用更新转发。

一旦你以丑陋的方式做了这件事,请记住任何人任何地方可以伪造该 UDP DNS 更新数据包中的源地址,这使得所有这些努力都毫无意义。(尽管您可以禁用 UDP,以使这些努力稍微不那么毫无意义)。

答案3

我知道您可以定义一个 match_list,但我不确定您是否可以组合键和匹配列表。

allow-update { address_match_list };

例如:

options {
    allow-update { !192.168.2.7;192.168.2/24;};
};

答案4

我没有尝试过,但根据我的理解,定义是:

address_match_list = element ; [ element; ... ]
element = [!] (ip [/prefix] | key key-name | "acl_name" | { address_match_list } )

因此你可以做类似的事情

acl “mix-match” {
“two-subnets”;
! 10.10.30.101;
10.10.30.0/24;
key dns1-dns2.example.com;
};
zone "abc.def.example.com" in {
        type master;
        file "named.abc.data";
        allow-update{ mix-match };
};

因此区域转移现在仅限于拥有密钥的区域(超出匹配列表)。

相关内容