前言:文件 /Applications/Server.app/Contents/ServerRoot/private/etc/named.conf 在你的问题中提到的是 不 macOS服务器使用的配置文件。而是文件位于 /Library/Server/named/named.conf 。
ServerRoot中的文件或多或少是空的默认named.conf文件。首次启动Server.app时的初始配置将ServerRoot named.conf复制到 /库/服务器/命名/ 。
对DNS服务器的各种功能的访问权限由ACL确定。 macOS服务器中预先配置的acl是 com.apple.ServerAdmin.DNS.public 。
取决于您在DNS主面板中的设置ACL com.apple.ServerAdmin.DNS.public 填充网络:
如果为所有客户端执行查找:
named.conf中的相应ACL如下所示:
acl "com.apple.ServerAdmin.DNS.public" {
any;
};
如果为某些客户端执行查找(仅限示例):
named.conf中的相应ACL如下所示:
acl "com.apple.ServerAdmin.DNS.public" {
172.16.0.0/16;
localhost;
localnets;
};
初始设置后,named.conf中唯一可用的ACL是 com.apple.ServerAdmin.DNS.public 。
默认情况下,此ACL允许在中查找 视图 所有成员网络的部分:
view "com.apple.ServerAdmin.DNS.public" { ⬅︎
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update {
none;
};
};
并且还允许区域转移 视图> zone [zone_name]>让 - 转让 所有成员网络的部分。
...
zone "test.home" IN {
type master;
file "db.test.home";
allow-transfer { ⬅︎
com.apple.ServerAdmin.DNS.public; ⬅︎
};
allow-update {
none;
};
...
要将查找客户端与区域传输客户端(AKA从属服务器)分开,只需创建一个新的ACL“slave”(示例):
acl "com.apple.ServerAdmin.DNS.public" {
172.16.0.0/16;
localhost;
localnets;
};
acl "slaves" {
172.16.1.8/32; #first DNS slave
172.16.1.18/32; #second DNS slave
};
要将特定区域的区域传输限制为仅限从属,请将allow-transfer指令ACL修改为从属:
...
zone "test.home" IN {
type master;
file "db.test.home";
allow-transfer { ⬅︎
slaves; ⬅︎
};
allow-update {
none;
};
...
不要意外包含箭头,然后重新启动DNS服务!
更高级的&安全的方法是使用共享的秘密/密钥,这里解释: 使用TSIG在Bind 9.x服务器之间启用安全区域传输 。我没有让这个在塞拉利昂工作。
要检查区域传输是否可以在(攻击)客户端上使用任意主机:
dig @dns_server_ip example.org axfr