我已经build立了一个BIND 9服务器并configuration了encryption密钥,以允许来自客户端的更新。 现在在我的named.conf ,我设置了以下内容:
allow-update { key dns1.example.org.; };
这工作,我可以从我的客户端( nsupdate命令)执行更新(添加,删除区域logging)。
我想知道是否可以将它与ACL结合使用。 基本上我希望客户端需要正确的密钥,但也必须来自某个子网或IP地址。 我能不能做到这一点? 我在文档中找不到有关该场景的任何信息。
第一场比赛 如果您排除了所需的地址,则可以使用任何地址拒绝所有不匹配的地址; 然后检查密钥是否匹配。
allow-update { !{ !allowed; any; }; key keyname; };
丑陋的答案#1
只有当你愿意有创造性,丑陋和野蛮的时候,你才能做到这一点。
只允许从1.2.3.0/24更新关键字dns1.example.com。
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.; };
如何做这个按位math:
我没有尝试,但应该工作。
如果你有多个允许的子网,祝你好运。
为了这个答案的目的,我很高兴IPv6还没有被广泛部署。 🙂
丑陋的答案#2
设置单独隐形 (即未列为NS)的主要名称服务器,在其防火墙规则中允许数据包仅来自“允许”子网和来自其从属名称服务器。 在这个秘密,只允许更新与密钥。 configuration从站以通过AXFR / IXFR和NOTIFY获取区域数据。 不要忘记禁用从站上的更新转发。
一旦你做到了丑陋的一面 ,记住任何来自任何地方的 人 都可以欺骗UDP DNS更新包中的源地址,这使得所有这些努力完全没有意义。 (虽然你可以禁用UDP来使这个努力略显毫无意义)。
我知道你可以定义一个match_list,但是我不确定你是否可以结合键和匹配列表。
allow-update { address_match_list };
例如:
options { allow-update { !192.168.2.7;192.168.2/24;}; };
我没有尝试过,但根据我的理解,定义是:
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 }; };
因此区域传输现在被限制在那些具有密钥的区域(超出匹配列表)。