BIND(Berkeley Internet Name Domain)是20世纪80年代由加州大学伯克利分校开发的开源DNS软件,广泛应用于基于UNIX的操作系统。BIND的主要功能是进行域名到IP地址的转换,也就是我们常说的域名解析,本期为大家分享最新的BIND配置与设置指南。
要配置BIND,首先需要登录到服务器。默认情况下,BIND仅会监听本地回环地址。如果希望BIND能够在所有IP地址上监听请求,我们可以修改其配置文件/etc/named.conf
。
使用您喜欢的文本编辑器(例如vi
、nano
等),找到并注释掉以下两行,以便让BIND监听所有IP地址上的53端口。
# listen-on port 53 { 127.0.0.1; };
# listen-on-v6 port 53 { ::1; };
修改为:
bashlisten-on port 53 { any; };
listen-on-v6 port 53 { any; };
这会使BIND监听服务器上的所有网络接口。
接下来,您需要配置允许查询的IP范围。如果希望仅允许本地网络或特定IP范围的机器进行DNS查询,您可以在配置文件中添加如下行:
bashallow-query { localhost; 192.168.32.0/24; };
这表示只有localhost
和192.168.32.0/24
范围内的IP地址能够查询DNS。
如果希望任何人都可以查询DNS,可以将allow-query
设置为any
:
allow-query { any; };
如果您有配置从服务器并希望将区域数据传输到从服务器,可以添加以下行。请确保将SLAVE_SERVER_IP_HERE
替换为从服务器的实际IP地址。
allow-transfer { SLAVE_SERVER_IP_HERE; };
如果没有配置从服务器,或者不需要区域传输,可以跳过此步骤。
为了确保您的服务器不会被用于执行反射型DDoS攻击,您应该关闭递归查询。打开/etc/named.conf
文件,找到并设置:
recursion no;
这将禁用递归查询,只允许该服务器处理直接的DNS解析请求。
配置完成后,保存文件并重启BIND服务以使更改生效:
bashsudo systemctl restart named
或者使用旧版CentOS的命令:
bashsudo service named restart
问题:
BIND默认只监听127.0.0.1地址,这意味着它只能接受本机的DNS查询请求。如果你希望其他设备也能使用这个DNS服务器,你需要修改配置文件让BIND监听所有网络接口。
解决方法:
如前所述,可以通过修改/etc/named.conf
中的listen-on
和listen-on-v6
配置来允许服务器监听所有的IP地址。例如:
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
问题:
默认情况下,BIND会允许任何IP地址进行DNS查询,这虽然方便,但也可能成为潜在的安全隐患。例如,攻击者可能会利用你服务器的DNS服务发起反射式DDoS攻击。
解决方法:
为了提高安全性,建议限制允许查询的IP范围。可以通过以下方式,仅允许特定网络访问DNS服务:
allow-query { localhost; 192.168.32.0/24; };
如果你只希望特定的机器或内网使用你的DNS服务器,这种方法是最有效的。
问题:
递归查询(recursive query)功能允许BIND服务器帮助客户端查询不在本地DNS服务器上的域名。虽然递归查询在大多数情况下很有用,但它也可能被用来发动反射式DDoS攻击,尤其是当服务器对外开放时。
解决方法:
建议关闭递归查询,尤其是当服务器是对外公开时。通过在/etc/named.conf
文件中加入以下配置,可以禁止递归查询:
recursion no;
如果你需要提供递归查询功能,可以根据实际需求在允许的IP范围内进行配置。
问题:
在BIND中,主服务器(Master)会将DNS区域(Zone)数据传输给从服务器(Slave)。如果配置不当,区域传输可能会成为攻击目标或泄露敏感信息。
解决方法:
为了确保安全,只有特定的从服务器能够进行区域传输。可以在/etc/named.conf
中配置allow-transfer
来限制区域传输:
allow-transfer { 192.168.32.10; }; # 将192.168.32.10替换为你的从服务器IP地址
如果不使用从服务器,建议删除或注释掉该行。
问题:
有时你可能需要精细化控制哪些IP地址可以访问DNS服务。这时可以使用BIND的访问控制列表(ACL)。
解决方法:
在BIND中,你可以定义ACL来限制哪些IP可以访问DNS服务器。例如:
acl "trusted" { 192.168.32.0/24; 10.0.0.0/8; };
然后,你可以在allow-query
中引用这个ACL:
allow-query { trusted; };
这样,只有在trusted
ACL内的IP地址才能进行查询。