将BIND配置为Debian上的仅捕获DNS服务器
时间:2020-03-21 11:42:27 来源:igfitidea点击:
DNS服务器解析查询时,会将答案返回给客户端。
DNS服务器还会在记录的TTL值所允许的时间段内,将答案存储在其缓存中。
这样,当要求名称服务器再次解析相同的名称时,可以更快地处理所有后续请求。
仅缓存服务器不转发任何区域。
软件
本文使用的软件:
- Debian Wheezy
- Bind 9.8.4
在我们开始之前
我们将要建立一个通用的DNS服务器,该服务器:
- 充当两个内部区域的主节点,以及
- 充当所有其他请求的缓存服务器。
BIND服务器的信息:
- 主机名:dns。
- IP:10.10.1.2.
- 局域网:10.10.1.0/24.
将设置两个内部DNS区域:
- lan.local –前向区域,可将域名转换为IP地址。
- 1.10.10 –反向区域,可将IP地址转换为域名。
DNS服务器将通过以下方式保护:
- 以较少的权限运行BIND。
- 将查询限制为仅LAN。
- 限制区域仅转移到LAN。
- 隐藏公开的BIND版本号和主机名。
- 配置iptables以仅允许从LAN访问TCP/UDP端口53.
安装
安装BIND和resolvconf软件包:
# apt-get update && apt-get install bind9 bind9utils resolvconf
在启动时启动BIND:
# update-rc.d bind9 defaults update-rc.d: using dependency based boot sequencing
dnsutils软件包包含dig和nslookup:
# apt-get install dnsutils
我们服务器的网络配置如下:
# cat /etc/network/interfaces auto lo iface lo inet loopback allow-hotplug eth0 iface eth0 inet static address 10.10.1.2 netmask 255.255.255.0 gateway 10.10.1.1 broadcast 10.10.1.255 dns-namesevers 127.0.0.1
如果进行了任何更改,请重新启动网络配置:
# nohup sh -c "ifdown eth0 && ifup eth0"
更新“ /etc/resolv.conf”文件:
# resolvconf -u
配置
首先要做的是确保BIND不会以root特权运行。
打开“/etc/default/bind9”并添加以下行(如果尚不存在):
OPTIONS="-u bind"
这告诉BIND服务在完成特权操作(例如创建侦听特权端口的套接字)之后将setuid设置为“绑定”用户。
/etc/bind/named.conf
提供了一些注释。
建议我们查看BIND v9.8文档以获取更多信息。
include "/etc/bind/rndc.key";
include "/etc/bind/named.conf.default-zones";
# Declaring control channels to be used by the rndc utility.
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
# Limiting access to local networks only.
acl "clients" {
127.0.0.0/8;
10.10.1.0/24;
};
# Global server configuration.
options {
directory "/var/cache/bind";
pid-file "/var/run/named/named.pid";
dump-file "/var/cache/bind/named.dump";
statistics-file "/var/cache/bind/named.stats";
# no forwarding, plus listen on IPv4 only
forwarders {};
listen-on-v6 { none; };
# Maximum number of simultaneous client TCP connections to accept.
tcp-clients 50;
# Disable built-in server information zones.
version none;
hostname none;
server-id none;
# Attempt to do all the work required to answer the query.
recursion yes;
recursive-clients 500;
allow-recursion { clients; };
allow-query { clients; };
# Only LAN users are allowed to receive zone transfers from the server.
allow-transfer { clients; };
auth-nxdomain no;
notify no;
dnssec-enable yes;
dnssec-validation auto;
};
# Specifications of what to log, and where the log messages are sent.
logging {
channel "common_log" {
file "/var/log/bind/named.log" versions 10 size 5m;
severity error;
print-category yes;
print-severity yes;
print-time yes;
};
category default { "common_log"; };
category general { "common_log"; };
category queries { "common_log"; };
category client { "common_log"; };
category security { "common_log"; };
category query-errors { "common_log"; };
category lame-servers { null; };
};
# Internal zone definitions.
zone "lan.local" {
type master;
file "/etc/bind/db.lan.local";
};
zone "1.10.10.in-addr.arpa" {
type master;
file "/etc/bind/db.1.10.10";
};
/etc/bind/db.lan.local
$TTL 86400
@ IN SOA localhost. root.localhost. (
2014082401 ; Serial
86400 ; Refresh
3600 ; Retry
604800 ; Expire
7200 ) ; Negative Cache TTL
@ IN NS localhost.
@ IN A 10.10.1.2
dns IN A 10.10.1.2
gw IN A 10.10.1.1
www IN A 10.10.1.17
/etc/bind/db.1.10.10
$TTL 86400
@ IN SOA localhost. root.localhost. (
2014082401 ; Serial
86400 ; Refresh
3600 ; Retry
604800 ; Expire
7200 ) ; Negative Cache TTL
@ IN NS localhost.
1 IN PTR gw.lan.local. ;10.10.1.1
2 IN PTR dns.lan.local. ;10.10.1.2
17 IN PTR www.lan.local. ;10.10.1.17
验证BIND配置
# named-checkconf /etc/bind/named.conf
重新启动服务
# service bind9 restart
验证服务正在侦听TCP/UDP端口53:
# netstat -nltup | grep :53 tcp 0 0 10.10.1.2:53 0.0.0.0:* LISTEN 10905/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 10905/named udp 0 0 10.10.1.2:53 0.0.0.0:* 10905/named udp 0 0 127.0.0.1:53 0.0.0.0:* 10905/named
在BIND服务器上配置iptables以允许LAN访问
# iptables -A INPUT -s 10.10.1.0/24 -p tcp --dport 53 -j ACCEPT # iptables -A INPUT -s 10.10.1.0/24 -p udp --dport 53 -j ACCEPT
从客户端PC查询DNS服务器
缓存DNS服务器
验证BIND服务器正在缓存查询:
$dig kernel.org | grep time ;; Query time: 237 msec
$dig kernel.org | grep time ;; Query time: 1 msec
请注意,重新启动BIND时,缓存数据将被丢弃。
DNS区域转移
如果“允许转移{无; };”在“ named.conf”中指定。
$host -l lan.local lan.local name server localhost. lan.local has address 10.10.1.2 dns.lan.local has address 10.10.1.2 gw.lan.local has address 10.10.1.1 www.lan.local has address 10.10.1.17
为了使挖掘输出更具可读性:
$alias dig='dig +noquestion +nocomments +nostats'
我们还可以使用“挖+ noall +答案”之类的方法。
$dig @lan.local lan.local axfr ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> +noquestion +nocomments +nostats @lan.local lan.local axfr ; (1 server found) ;; global options: +cmd lan.local. 3600 IN SOA localhost. root.localhost. 2014082401 86400 3600 604800 7200 lan.local. 3600 IN NS localhost. lan.local. 3600 IN A 10.10.1.2 dns.lan.local. 3600 IN A 10.10.1.2 gw.lan.local. 3600 IN A 10.10.1.1 www.lan.local. 3600 IN A 10.10.1.17 lan.local. 3600 IN SOA localhost. root.localhost. 2014082401 86400 3600 604800 7200
反向DNS查找
$dig -x 10.10.1.2 ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> +noquestion +nocomments +nostats -x 10.10.1.2 ;; global options: +cmd 2.1.10.10.in-addr.arpa. 3600 IN PTR dns.lan.local. 1.10.10.in-addr.arpa. 3600 IN NS localhost. localhost. 604800 IN A 127.0.0.1 localhost. 604800 IN AAAA ::1
查询BIND服务器的版本和主机名
获取BIND版本。
如果在“ named.conf”中指定了“ version none;”,则此方法不起作用。
$dig @lan.local version.bind chaos txt ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> +noquestion +nocomments +nostats @lan.local version.bind chaos txt ; (1 server found) ;; global options: +cmd version.bind. 0 CH TXT "9.8.4-rpz2+rl005.12-P1" version.bind. 0 CH NS version.bind.
获取BIND主机名。
如果在“ named.conf”中指定了“ hostname none;”,则此方法不起作用。
$dig @lan.local hostname.bind chaos txt ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> +noquestion +nocomments +nostats @lan.local hostname.bind chaos txt ; (1 server found) ;; global options: +cmd hostname.bind. 0 CH TXT "dns" hostname.bind. 0 CH NS hostname.bind.
故障排除
检查系统日志:
# grep named /var/log/syslog | less
检查BIND日志:
# tail /var/log/bind/named.log

