linux下dns的安装配置总结
--------------------------
1.基本的安装
2.建立一个简单的dns server
3.分离式dns和view语句
4.辅助域名服务器
5.单纯的cache-only域名服务器
6.域名服务器的日志配置
7.域名服务器的安全相关
7.1 acl控制语句
7.2 普通用户身份运行named
7.3 chroot环境
7.4 TSIG技术
7.5 DNSSEC技术
7.2 普通用户身份运行named
7.3 chroot环境
7.4 TSIG技术
7.5 DNSSEC技术
8.动态更新DNS
--------------------------
互联网的2个关键组成:route和dns,前者解决了主机的连接,后者解释了主机是谁,方便了人们的记忆。
dns建立了主机名和IP地址之间的映射关系。
dns是一个分布式数据库。
bind是使用最广泛的一种DNS实现。
dns工作原理:(以 www.example.com举例说明)
所有的域名服务器都知道根服务器(.),根服务器知道com、net、org、cn等顶级域,
而顶级域com又知道example.com子域,子域example.com知道主机 www.example.com的IP。
dns采取层层授权的形式建立起一种分布式的域名管理机制,授权是单向的,只能从父域到子域,
每个子域都必须向父域注册。
用户查询主机过程:
文件/etc/nsswitch.conf(hosts: files dns)说明查询主机信息顺序先从/etc/hosts开始,
先查看本地/etc/hosts文件,找不到主机名对应的IP,再进行dns查询,
到/etc/resolv.conf文件指定的本地域名服务器查询,如果有对应域example.com,则直接返回 www.example.com主机的IP(或没有对应主机的消息)
如果本地域名服务器不知道example.com这个域,也不知道com域的信息,不过它知道根域的信息(在named.ca中),
如果允许递归查询的话(recursion yes),它就发送一个查询到根域,根域返回一个com域服务器的IP,
然后再到com域查询example.com子域的信息,返回一个example.com域服务器的IP,
最后在example.com域的域名服务器上得到主机 www.example.com的IP,
本地域名服务器把查询结果返回给用户,并缓存查询结果。
dns建立了主机名和IP地址之间的映射关系。
dns是一个分布式数据库。
bind是使用最广泛的一种DNS实现。
dns工作原理:(以 www.example.com举例说明)
所有的域名服务器都知道根服务器(.),根服务器知道com、net、org、cn等顶级域,
而顶级域com又知道example.com子域,子域example.com知道主机 www.example.com的IP。
dns采取层层授权的形式建立起一种分布式的域名管理机制,授权是单向的,只能从父域到子域,
每个子域都必须向父域注册。
用户查询主机过程:
文件/etc/nsswitch.conf(hosts: files dns)说明查询主机信息顺序先从/etc/hosts开始,
先查看本地/etc/hosts文件,找不到主机名对应的IP,再进行dns查询,
到/etc/resolv.conf文件指定的本地域名服务器查询,如果有对应域example.com,则直接返回 www.example.com主机的IP(或没有对应主机的消息)
如果本地域名服务器不知道example.com这个域,也不知道com域的信息,不过它知道根域的信息(在named.ca中),
如果允许递归查询的话(recursion yes),它就发送一个查询到根域,根域返回一个com域服务器的IP,
然后再到com域查询example.com子域的信息,返回一个example.com域服务器的IP,
最后在example.com域的域名服务器上得到主机 www.example.com的IP,
本地域名服务器把查询结果返回给用户,并缓存查询结果。
1.基本的安装
tar -zxvf bind-9.7.0-p1.tar.gz
cd bind-9.7.0-p1
./configure --prefix=/usr/local/named \
--enable-threads \
--enable-largefile \
--disable-openssl-version-check
make && make install
tar -zxvf bind-9.7.0-p1.tar.gz
cd bind-9.7.0-p1
./configure --prefix=/usr/local/named \
--enable-threads \
--enable-largefile \
--disable-openssl-version-check
make && make install
环境设置;
可执行文件路径:
echo "export PATH=$PATH:/usr/local/named/bin:/usr/local/named/sbin" >>~/.bash-profile
. ~/.bash_profile
帮助文档:
echo "MANPATH /usr/local/named/share/man" >>/etc/man.config
可执行文件路径:
echo "export PATH=$PATH:/usr/local/named/bin:/usr/local/named/sbin" >>~/.bash-profile
. ~/.bash_profile
帮助文档:
echo "MANPATH /usr/local/named/share/man" >>/etc/man.config
2.建立一个简单的dns server
2.1 创建named.conf配置文件
cd /usr/local/named
vi etc/named.conf
options {
directory "/var/named";
pid-file "/var/named/named.pid';
dump-file "/var/named/named_dump.db";
statistics-file "/var/named/named.stats';
};
zone "." {
type hint;
file "named.ca";
};
zone "localhost" {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" {
type master;
file 127.0.0.rev";
};
zone "example.com" {
type master;
file "example.com.zone";
};
zone "10.10.in-addr.arpa" {
type master;
file "10.10.rev";
};
说明:
named.conf文件中的单行注释//或#,多行注释 /* */
options语句用于设置服务器全局参数
directory 指定程序运行基准文件存放目录
pid-file 指定named服务运行时pid存放文件
dump-file 指定缓存文件
statistics-file 指定服务器运行状态统计文件
2.2 创建数据存放目录:
mkdir /var/named
2.3 创建named.ca根线索文件
dig @61.139.2.69 -t NS .
dig @198.41.0.4 -t NS . >/var/named/named.ca
2.4 创建正向区文件localhost.zone和example.com.zone
;localhost
$TTL 1d
@ IN SOA localhost. root (
2010050101 ;serials
1h ;refresh
15m ;retry
1w ;expire
1d ) ;ttl
IN NS localhost.
IN A 127.0.0.1
;example.com
$TTL 1d
@ IN SOA log.example.com. root.log (
2010050101 1h 15m 1w 1d )
IN ns1.example.com.
IN ns2
IN MX 10 mail
IN A 10.10.0.10
ns1 IN A 10.10.0.2
ns2 IN A 10.10.0.3
mail IN A 10.10.0.11
log IN A 10.10.0.10
www IN A 10.10.1.1
ftp IN A 10.10.1.10
web IN CNAME www
2.5 创建反向区文件127.0.0.rev和10.10.rev
;127.0.0.rev
$TTL 1d
@ IN SOA localhost. root.localhost. (
2010050101 1h 15m 1w 1d )
IN NS localhost.
1 IN PTR localhost.
;10.10.rev
$TTL 1d
@ IN SOA log.example.com. root.log.example.com. (
2010050101 1h 15m 1w 1d )
IN NS ns1.example.com.
IN NS ns2.example.com.
10.0 IN PTR log.example.com.
11.0 IN PTR mail.example.com.
1.1 IN PTR www.example.com.
10.1 IN PTR ftp.example.com.
2.6 使用rndc来控制dns服务器
a)产生rndc控制文件
rndc-confgen -a
cd /usr/local/named
vi etc/named.conf
options {
directory "/var/named";
pid-file "/var/named/named.pid';
dump-file "/var/named/named_dump.db";
statistics-file "/var/named/named.stats';
};
zone "." {
type hint;
file "named.ca";
};
zone "localhost" {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" {
type master;
file 127.0.0.rev";
};
zone "example.com" {
type master;
file "example.com.zone";
};
zone "10.10.in-addr.arpa" {
type master;
file "10.10.rev";
};
说明:
named.conf文件中的单行注释//或#,多行注释 /* */
options语句用于设置服务器全局参数
directory 指定程序运行基准文件存放目录
pid-file 指定named服务运行时pid存放文件
dump-file 指定缓存文件
statistics-file 指定服务器运行状态统计文件
2.2 创建数据存放目录:
mkdir /var/named
2.3 创建named.ca根线索文件
dig @61.139.2.69 -t NS .
dig @198.41.0.4 -t NS . >/var/named/named.ca
2.4 创建正向区文件localhost.zone和example.com.zone
;localhost
$TTL 1d
@ IN SOA localhost. root (
2010050101 ;serials
1h ;refresh
15m ;retry
1w ;expire
1d ) ;ttl
IN NS localhost.
IN A 127.0.0.1
;example.com
$TTL 1d
@ IN SOA log.example.com. root.log (
2010050101 1h 15m 1w 1d )
IN ns1.example.com.
IN ns2
IN MX 10 mail
IN A 10.10.0.10
ns1 IN A 10.10.0.2
ns2 IN A 10.10.0.3
mail IN A 10.10.0.11
log IN A 10.10.0.10
www IN A 10.10.1.1
ftp IN A 10.10.1.10
web IN CNAME www
2.5 创建反向区文件127.0.0.rev和10.10.rev
;127.0.0.rev
$TTL 1d
@ IN SOA localhost. root.localhost. (
2010050101 1h 15m 1w 1d )
IN NS localhost.
1 IN PTR localhost.
;10.10.rev
$TTL 1d
@ IN SOA log.example.com. root.log.example.com. (
2010050101 1h 15m 1w 1d )
IN NS ns1.example.com.
IN NS ns2.example.com.
10.0 IN PTR log.example.com.
11.0 IN PTR mail.example.com.
1.1 IN PTR www.example.com.
10.1 IN PTR ftp.example.com.
2.6 使用rndc来控制dns服务器
a)产生rndc控制文件
rndc-confgen -a
修改named.conf配置文件,添加以下内容:
include "/usr/local/named/etc/rndc.key";
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
b)测试rndc和域名解析效果
启动前检查配置文件和区文件的语法:
named-chechkconf etc/named.conf
named-checkzone "example.com" /var/named/example.com.zone
启动域名服务:/usr/local/named/sbin/named
用rndc查看域名服务器状态:rndc status
测试域名解析:
echo "nameserver 127.0.0.1" >/etc/resolv.conf
host www.example.com
echo "search example.com" >> /etc/resolv.conf
host www
2.7 有关区文件的一些说明
区文件(zone file)包含2个部分:分析器命令和资源记录(Resource Records)
分析器命令有:
$TTL 存活时间(time to live)
$ORIGIN 默认域,区文件中不完整(不以.结尾)的任何域名自动在其后添加默认域,
没有设置此命令时,以named.conf文件中zone语句多指定的域名作为初始域。
$INCLUDE 引入外部文件,注意引入文件的格式要匹配
$GENERATER 创建一系列不同的资源记录
例如:
$ORIGIN 0.10.10.in-addr.arpa.
$GENERATOR 1-3 IN PTR www.example.org.
等同于:
$ORIGIN 0.10.10.in-addr.arpa.
1 IN PTR www.example.org.
2 IN PTR www.example.org.
3 IN PTR www.example.org.
区文件格式:
[name] [ttl] [class] type data
RR中的特殊符号:
; 注释(半角分号)
@ 代表当前域名,named.conf文件中zone语句指定的初始域,或$ORIGIN 指定的默认域
() 括号允许跨行
* 通配符(仅由name字段使用)
[name] 字段表示记录的实体(通常是一个主机或域),连续相同的[name],可以省略除第一个外的[name]字段,例如:
www IN 10.10.0.1
IN 10.10.0.10
IN 10.10.0.11
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
b)测试rndc和域名解析效果
启动前检查配置文件和区文件的语法:
named-chechkconf etc/named.conf
named-checkzone "example.com" /var/named/example.com.zone
启动域名服务:/usr/local/named/sbin/named
用rndc查看域名服务器状态:rndc status
测试域名解析:
echo "nameserver 127.0.0.1" >/etc/resolv.conf
host www.example.com
echo "search example.com" >> /etc/resolv.conf
host www
2.7 有关区文件的一些说明
区文件(zone file)包含2个部分:分析器命令和资源记录(Resource Records)
分析器命令有:
$TTL 存活时间(time to live)
$ORIGIN 默认域,区文件中不完整(不以.结尾)的任何域名自动在其后添加默认域,
没有设置此命令时,以named.conf文件中zone语句多指定的域名作为初始域。
$INCLUDE 引入外部文件,注意引入文件的格式要匹配
$GENERATER 创建一系列不同的资源记录
例如:
$ORIGIN 0.10.10.in-addr.arpa.
$GENERATOR 1-3 IN PTR www.example.org.
等同于:
$ORIGIN 0.10.10.in-addr.arpa.
1 IN PTR www.example.org.
2 IN PTR www.example.org.
3 IN PTR www.example.org.
区文件格式:
[name] [ttl] [class] type data
RR中的特殊符号:
; 注释(半角分号)
@ 代表当前域名,named.conf文件中zone语句指定的初始域,或$ORIGIN 指定的默认域
() 括号允许跨行
* 通配符(仅由name字段使用)
[name] 字段表示记录的实体(通常是一个主机或域),连续相同的[name],可以省略除第一个外的[name]字段,例如:
www IN 10.10.0.1
IN 10.10.0.10
IN 10.10.0.11
[ttl] (time to live存活时间)字段指定数据可以被缓存的时间,单位秒,也可以用w,d,h,m等后缀来表示周,天,小时,分钟。
后面记录的时间跟前面一条记录相同时,或区文件开头使用了$TTL命令设置了默认的值,可以省略[ttl]字段。例:
www 3600 IN 10.10.0.1
ftp IN 10.10.0.10
mail 1d IN 10.10.0.11
后面记录的时间跟前面一条记录相同时,或区文件开头使用了$TTL命令设置了默认的值,可以省略[ttl]字段。例:
www 3600 IN 10.10.0.1
ftp IN 10.10.0.10
mail 1d IN 10.10.0.11
[class] 字段指定网络类型,可识别的值有3个:IN(Internet)、HS(Hesiod)、CH(Chosnet)。默认值IN,其他的基本不用。
type字段指定了记录的类型。常用的有:
SOA 定义一个DNS区
NS 标识区的服务器,授权子域
MX 控制邮件的投递
A 名字到地址的转换
PTR 地址到名字的转换
CNAME 主机的别名
AAAA 名字到IPv6地址的转换
data字段的类容取决于记录类型(type)。例如:类型为A,data字段就是IP地址;SOA记录,data字段就包括区主名字服务器,联系人邮箱等;而MX记录,则包括优先级和邮件主机
举例:
chinaunix.net. 86400 IN SOA ns1.chinaunix.net. postmaster.chinaunix.net. (2010050101 1h 15m 1w 1d)
;上面第一个chinaunix.net.可用@替代,后面的联系人邮件地址postmaster.chinaunix.net.也可缩写为postmaster
IN NS ns1.chinaunix.net.
IN MX 10 mail
IN A 10.10.0.10
ns1 IN A 10.10.0.1
mail IN A 10.10.0.10
区文件SOA记录中的序列号不必连续,但必须单调递增。
3.分离式DNS和view语句
分离式DNS(split dns)实现了不同用户查询域名,返回不同的查询结果,
view语句控制哪些用户能看到哪个view的访问列表、用于view中所有区的一些选项和区本身。
如果启用了view,那么named.conf文件中所有的zone语句都必须在view中出现。
view "internal" {
match-clients { 10.10.0.0/16;};
recursion yes;
zone "example.com" {
type master;
file "internal/example.com.in.zone";
};
};
view "external" {
match-clients { any; };
recursion no;
zone "example.com" {
type master;
file "external/example.com.ex.zone";
};
};
注意:view是按顺序来处理的,所以要先加上限制最严格的view,
如果view次序反了,所有查询都首先匹配any,而不会匹配到10.10.0.0/16,从而造成谁都无法看到内部view了。
4.辅助域名服务器
主配置文件:/etc/named.conf
zone "chinaunix.net" {
type slave;
file "chinaunix.net.zone";
};
为了让辅助域名服务器自动根据主域名服务器自动建立区文件,
需要让运行named服务的用户在相应目录具有写权限
chgrp -R named /var/named
chmod g+w /var/named
主、辅域名服务器同步前需要同步时间:
ntpdate 0.cn.pool.ntp.org && hwclock -w
然后重新启动服务:
killall named && named
5. 单纯的Cacha-Only 域名服务器
仅用于帮助client端向外部dns主机请求查询,没有自己的域名解析数据库。
vi etc/named.conf
options {
directory "/var/named";
pid-file "/var/named/named.pid";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/named_stats.txt";
forward only;
forwar ders {
61.139.2.69;
};
};
include "/etc/rndc.key";
6.域名服务器的日志配置
logging {
channel <string>; {
file <logfile>;;
syslog <optional_facility>;;
null;
stderr;
severity <logseverity>;
print-time <boolean>;
print-severity <boolean>;
print-category <boolean>;
};
category <string>; { <string>;; ... };
};
日志中主要有2个概念:channel(通道)和category(类别)。
channel规定了日志应该发往哪里(file、syslog、null、stderr)
category指定了特定类别的日志通个哪个channel来发送。
syslog指定的facility(设备)主要有:kern, user, mail, daemon, auth, syslog, lpr, news, uucp, cron, authpriv, ftp, local0 - local7
severity(严重性):定义消息的等级,critical |error|warning|notice|info|debug[level]|dynamic
print-category yes|no 定义是否输出消息类别
print-severity yes|no 定义是否输出严重级别
print-time yes|no 定义是否输出消息的时间
bind中预定义的日志通道:
default_syslog 发送到syslog、设备为daemon,严重性为info
default_debug 日志记录到文件named.run中,严重性为dynamic
default_stderr 发送到named进程的标准出错设备(stderr),严重性为info
null 丢弃所有消息
SOA 定义一个DNS区
NS 标识区的服务器,授权子域
MX 控制邮件的投递
A 名字到地址的转换
PTR 地址到名字的转换
CNAME 主机的别名
AAAA 名字到IPv6地址的转换
data字段的类容取决于记录类型(type)。例如:类型为A,data字段就是IP地址;SOA记录,data字段就包括区主名字服务器,联系人邮箱等;而MX记录,则包括优先级和邮件主机
举例:
chinaunix.net. 86400 IN SOA ns1.chinaunix.net. postmaster.chinaunix.net. (2010050101 1h 15m 1w 1d)
;上面第一个chinaunix.net.可用@替代,后面的联系人邮件地址postmaster.chinaunix.net.也可缩写为postmaster
IN NS ns1.chinaunix.net.
IN MX 10 mail
IN A 10.10.0.10
ns1 IN A 10.10.0.1
mail IN A 10.10.0.10
区文件SOA记录中的序列号不必连续,但必须单调递增。
3.分离式DNS和view语句
分离式DNS(split dns)实现了不同用户查询域名,返回不同的查询结果,
view语句控制哪些用户能看到哪个view的访问列表、用于view中所有区的一些选项和区本身。
如果启用了view,那么named.conf文件中所有的zone语句都必须在view中出现。
view "internal" {
match-clients { 10.10.0.0/16;};
recursion yes;
zone "example.com" {
type master;
file "internal/example.com.in.zone";
};
};
view "external" {
match-clients { any; };
recursion no;
zone "example.com" {
type master;
file "external/example.com.ex.zone";
};
};
注意:view是按顺序来处理的,所以要先加上限制最严格的view,
如果view次序反了,所有查询都首先匹配any,而不会匹配到10.10.0.0/16,从而造成谁都无法看到内部view了。
4.辅助域名服务器
主配置文件:/etc/named.conf
zone "chinaunix.net" {
type slave;
file "chinaunix.net.zone";
};
为了让辅助域名服务器自动根据主域名服务器自动建立区文件,
需要让运行named服务的用户在相应目录具有写权限
chgrp -R named /var/named
chmod g+w /var/named
主、辅域名服务器同步前需要同步时间:
ntpdate 0.cn.pool.ntp.org && hwclock -w
然后重新启动服务:
killall named && named
5. 单纯的Cacha-Only 域名服务器
仅用于帮助client端向外部dns主机请求查询,没有自己的域名解析数据库。
vi etc/named.conf
options {
directory "/var/named";
pid-file "/var/named/named.pid";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/named_stats.txt";
forward only;
forwar ders {
61.139.2.69;
};
};
include "/etc/rndc.key";
6.域名服务器的日志配置
logging {
channel <string>; {
file <logfile>;;
syslog <optional_facility>;;
null;
stderr;
severity <logseverity>;
print-time <boolean>;
print-severity <boolean>;
print-category <boolean>;
};
category <string>; { <string>;; ... };
};
日志中主要有2个概念:channel(通道)和category(类别)。
channel规定了日志应该发往哪里(file、syslog、null、stderr)
category指定了特定类别的日志通个哪个channel来发送。
syslog指定的facility(设备)主要有:kern, user, mail, daemon, auth, syslog, lpr, news, uucp, cron, authpriv, ftp, local0 - local7
severity(严重性):定义消息的等级,critical |error|warning|notice|info|debug[level]|dynamic
print-category yes|no 定义是否输出消息类别
print-severity yes|no 定义是否输出严重级别
print-time yes|no 定义是否输出消息的时间
bind中预定义的日志通道:
default_syslog 发送到syslog、设备为daemon,严重性为info
default_debug 日志记录到文件named.run中,严重性为dynamic
default_stderr 发送到named进程的标准出错设备(stderr),严重性为info
null 丢弃所有消息
category(日志类别)主要有:
client 客户机请求
config 配置文件分析和处理
database 有关数据库操作的信息
default 没有明确分配通道的类别
delegation-only 按delegation-only区对NXDOMAIN的查询
dispatch 把传入的包分发给多个服务器模块
dnssec DNSSEC消息
general 未分类的消息
lame-servers 残缺服务器的错误消息
network 网络操作
notify 有关“区已更改”通知协议的消息
queries 服务器接受到的每个查询的简短日志消息
resolver DNS解析,如客户机的递归查询
security 批准/未批准的请求
unmatched named不能对查询进行分类(错误的类,没有view)
update 有关动态更新的消息
xfer-in 服务器正在接受的区传送
xfer-out 服务器正在发送的区传送
举例:把所有的dns查询日志单独写入一个文件,把lame-servers消息丢掉
logging {
channel queries_log {
file "/var/named/log/queries.log" version 3 size 50m;
severity info;
print-severity yes;
print-category yes;
print-time yes;
};
category queries {
queries_log;
};
client 客户机请求
config 配置文件分析和处理
database 有关数据库操作的信息
default 没有明确分配通道的类别
delegation-only 按delegation-only区对NXDOMAIN的查询
dispatch 把传入的包分发给多个服务器模块
dnssec DNSSEC消息
general 未分类的消息
lame-servers 残缺服务器的错误消息
network 网络操作
notify 有关“区已更改”通知协议的消息
queries 服务器接受到的每个查询的简短日志消息
resolver DNS解析,如客户机的递归查询
security 批准/未批准的请求
unmatched named不能对查询进行分类(错误的类,没有view)
update 有关动态更新的消息
xfer-in 服务器正在接受的区传送
xfer-out 服务器正在发送的区传送
举例:把所有的dns查询日志单独写入一个文件,把lame-servers消息丢掉
logging {
channel queries_log {
file "/var/named/log/queries.log" version 3 size 50m;
severity info;
print-severity yes;
print-category yes;
print-time yes;
};
category queries {
queries_log;
};
category lame-servers {
null;
};
7.域名服务器的安全相关
7.1 acl控制语句
acl "inside" {
10.10.0.0/16;
};
zone "example.org" {
type master;
file "example.org.zone";
allow-query { inside; };
};
acl定义的地址匹配列表可以出现在allow-query、allow-transfer、allow-update、allow-recursion、backhole、match-clients等语句中
acl有4个预定义的地址匹配:
any 匹配所有
none 所有都不匹配
localhost 匹配系统上所有本地网络接口地址(环回地址和接口地址)
localnets 匹配所有与本地网络接口地址在同一段的地址块
7.2 以普通用户身份运行named程序
创建用户和组
groupadd named
useradd -g named -s /sbin/nologin -d /var/named -M named
修改目录权限:
chown -R named.named /var/named
chmod -R 700 /var/named
修改named.conf文件:
options {
directory "/var/named";
pid-file "/var/named.named.pid";
statistics-file "/var/named/named.stats";
};
以普通用户权限运行服务:
/usr/local/named/sbin/ named -u named
7.3 chroot环境限制named
创建必要的目录:
mkdir -p /var/named/{etc,dev,var/{run,named}}
创建必要的设备文件:
cd /var/named
file /dev/{null,zero,random}
mknod dev/null c 1 3
mknod dev/zero c 1 5
mknod dev/random c 1 8
复制本地时区文件:
cp /etc/localtime etc/
创建bind的配置文件named.conf和zone区文件,并放入相应etc、var/named目录
文件和目录权限修改:
chown -R root.named /var/named
find /var/named -type f -print | xargs chmod u=rw,og=r
find /var/named -type d -print | xargs chmod u=rwx,og=rx
chmod -R ug=rwx,o=rx /var/named/var
启动服务:
/usr/local/named/sbin/ named -u named -t /var/named
7.4 TSIG技术
通过使用“事务签名(transaction signature)”来保障服务器之间的通信安全。TSIG能保护主、从服务器之间区传送的安全,并能实现安全的动态更新。
7.4.1使用dnssec-keygen产生加密密钥:
dnssec-keygen -a hmac-md5 -b 512 -n HOST chinaunix
产生公钥:Kchinaunix.+157+56132.key
私钥:Kchinaunix.+157+56132.private
文件内容一般包括以下内容:
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: hSPUdopy1pDYfu1ZEfTg3GhCWrR4uDB8R9RoQiQ+9x7JNdA97DfWjqe6je8nBe3i855hax3JlVS3yWAvTi4VpQ==
用scp复制密钥到主、从服务器: scp Kchinaunix.+157+56132.key root@10.10.0.253:/root
7.4.2 使用TSIG密钥分别对主、从服务器的named.conf设定:
key "chinaunix" {
Algorithm HMAC_MD5;
secret "hSPUdopy1pDYfu1ZEfTg3GhCWrR4uDB8R9RoQiQ+9x7JNdA97DfWjqe6je8nBe3i855hax3JlVS3yWAvTi4VpQ==";
};
7.4.3 在主服务器named.conf添加:
server 10.10.0.253 { #发往从服务器10.10.0.253的消息用key加密
keys ( chinaunix; };
};
zone "chinaunix.net" {
type master;
file "chinaunix.net.zone";
allow-transfer { key chinaunix; }; //本区传送只允许key
};
7.4.4 在辅助域名服务器named.conf添加:
server 10.10.0.254 { #发往主服务器10.10.0.254的消息用key加密
keys { chinaunix; };
};
7.4.5 验证TSIG技术是否生效:
删除辅助域名服务器的区文件chinaunix.net.zone
同步一下主、从域名服务器的时间
重新启动辅助域名服务器
检查辅助域名服务器的区文件是否自动建立。
7.5 DNSSEC技术
DNSSEC是一套对DNS的扩展,它使用公钥加密,对区数据的来源进行身份验证,并验证其完整性。
私钥用来加密,公钥用来解密。下面以chinaunix.net域来建立DNSSEC配置:
7.5.1 创建密钥对:
ZSK密钥对:dnssec-keygen -a DSA -b 768 -n ZONE chinaunix.net
产生公钥 Kchinaunix.net.+003+49219.key
私钥 Kchinaunix.net.+003+49219.private
密钥文件名包括:key name(chinaunix.net.)、algorithm(001表示RSAMD5,003表示DSA,005表示RSASHA1等)、key tag(此处是49219)
KSK密钥对: dnssec-keygen -a DSA -b 768 -f KSK -n ZONE chinaunix.net
产生的密钥文件为:Kchinaunix.net.+003+03483.key 和 Kchinaunix.net.+003+03483.private
7.5.2 对区文件签名
先在原区文件(chinaunix.net.zone)中引入密钥文件:
$TTL 1d
;chinaunix.net.
@ IN SOA localhost. root.localhost. (
2010050101 1h 15m 1w 1d )
IN NS ns1.chinaunix.net.
IN NS ns2
IN MX 10 mail
IN A 10.10.0.10
ns1 IN A 10.10.0.1
ns2 IN A 10.10.0.2
mail IN A 10.10.0.10
www IN A 10.10.0.11
web IN CNAME www
7.域名服务器的安全相关
7.1 acl控制语句
acl "inside" {
10.10.0.0/16;
};
zone "example.org" {
type master;
file "example.org.zone";
allow-query { inside; };
};
acl定义的地址匹配列表可以出现在allow-query、allow-transfer、allow-update、allow-recursion、backhole、match-clients等语句中
acl有4个预定义的地址匹配:
any 匹配所有
none 所有都不匹配
localhost 匹配系统上所有本地网络接口地址(环回地址和接口地址)
localnets 匹配所有与本地网络接口地址在同一段的地址块
7.2 以普通用户身份运行named程序
创建用户和组
groupadd named
useradd -g named -s /sbin/nologin -d /var/named -M named
修改目录权限:
chown -R named.named /var/named
chmod -R 700 /var/named
修改named.conf文件:
options {
directory "/var/named";
pid-file "/var/named.named.pid";
statistics-file "/var/named/named.stats";
};
以普通用户权限运行服务:
/usr/local/named/sbin/ named -u named
7.3 chroot环境限制named
创建必要的目录:
mkdir -p /var/named/{etc,dev,var/{run,named}}
创建必要的设备文件:
cd /var/named
file /dev/{null,zero,random}
mknod dev/null c 1 3
mknod dev/zero c 1 5
mknod dev/random c 1 8
复制本地时区文件:
cp /etc/localtime etc/
创建bind的配置文件named.conf和zone区文件,并放入相应etc、var/named目录
文件和目录权限修改:
chown -R root.named /var/named
find /var/named -type f -print | xargs chmod u=rw,og=r
find /var/named -type d -print | xargs chmod u=rwx,og=rx
chmod -R ug=rwx,o=rx /var/named/var
启动服务:
/usr/local/named/sbin/ named -u named -t /var/named
7.4 TSIG技术
通过使用“事务签名(transaction signature)”来保障服务器之间的通信安全。TSIG能保护主、从服务器之间区传送的安全,并能实现安全的动态更新。
7.4.1使用dnssec-keygen产生加密密钥:
dnssec-keygen -a hmac-md5 -b 512 -n HOST chinaunix
产生公钥:Kchinaunix.+157+56132.key
私钥:Kchinaunix.+157+56132.private
文件内容一般包括以下内容:
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: hSPUdopy1pDYfu1ZEfTg3GhCWrR4uDB8R9RoQiQ+9x7JNdA97DfWjqe6je8nBe3i855hax3JlVS3yWAvTi4VpQ==
用scp复制密钥到主、从服务器: scp Kchinaunix.+157+56132.key root@10.10.0.253:/root
7.4.2 使用TSIG密钥分别对主、从服务器的named.conf设定:
key "chinaunix" {
Algorithm HMAC_MD5;
secret "hSPUdopy1pDYfu1ZEfTg3GhCWrR4uDB8R9RoQiQ+9x7JNdA97DfWjqe6je8nBe3i855hax3JlVS3yWAvTi4VpQ==";
};
7.4.3 在主服务器named.conf添加:
server 10.10.0.253 { #发往从服务器10.10.0.253的消息用key加密
keys ( chinaunix; };
};
zone "chinaunix.net" {
type master;
file "chinaunix.net.zone";
allow-transfer { key chinaunix; }; //本区传送只允许key
};
7.4.4 在辅助域名服务器named.conf添加:
server 10.10.0.254 { #发往主服务器10.10.0.254的消息用key加密
keys { chinaunix; };
};
7.4.5 验证TSIG技术是否生效:
删除辅助域名服务器的区文件chinaunix.net.zone
同步一下主、从域名服务器的时间
重新启动辅助域名服务器
检查辅助域名服务器的区文件是否自动建立。
7.5 DNSSEC技术
DNSSEC是一套对DNS的扩展,它使用公钥加密,对区数据的来源进行身份验证,并验证其完整性。
私钥用来加密,公钥用来解密。下面以chinaunix.net域来建立DNSSEC配置:
7.5.1 创建密钥对:
ZSK密钥对:dnssec-keygen -a DSA -b 768 -n ZONE chinaunix.net
产生公钥 Kchinaunix.net.+003+49219.key
私钥 Kchinaunix.net.+003+49219.private
密钥文件名包括:key name(chinaunix.net.)、algorithm(001表示RSAMD5,003表示DSA,005表示RSASHA1等)、key tag(此处是49219)
KSK密钥对: dnssec-keygen -a DSA -b 768 -f KSK -n ZONE chinaunix.net
产生的密钥文件为:Kchinaunix.net.+003+03483.key 和 Kchinaunix.net.+003+03483.private
7.5.2 对区文件签名
先在原区文件(chinaunix.net.zone)中引入密钥文件:
$TTL 1d
;chinaunix.net.
@ IN SOA localhost. root.localhost. (
2010050101 1h 15m 1w 1d )
IN NS ns1.chinaunix.net.
IN NS ns2
IN MX 10 mail
IN A 10.10.0.10
ns1 IN A 10.10.0.1
ns2 IN A 10.10.0.2
mail IN A 10.10.0.10
www IN A 10.10.0.11
web IN CNAME www
$INCLUDE Kchinaunix.net.+003+49219.key ;ZSK
$INCLUDE Kchinaunix.net.+003+03483.key ;KSK
$INCLUDE Kchinaunix.net.+003+03483.key ;KSK
然后对区文件签名:
dnssec-signzone -o chinaunix.net chinaunix.net.zone Kchinaunix.net.+003+49219.key Kchinaunix.net.+003+03483.key
生成区文件的签名后版本:chinaunix.net.zone.signed
同时生成了密钥集文件: dsset-chinaunix.net.
dsset-chinaunix.net.文件内容:
chinaunix.net. IN DS 3483 3 1 5D46B000BC003AF35A9541B57F79923C71036185
chinaunix.net. IN DS 3483 3 2 36EC5EAD7E5C00917E294089EDB01FC64106F1D6C17E8BA749A02C00 E2AF4D61
此密钥集文件用于对密钥做签名
7.5.3 修改named.conf配置文件:
options {
directory "/var/named";
dnssec-enable yes;
dnssec-validation yes;
};
zone "chinaunix.net" {
type master;
file " chinaunix.net.zone.signed";
};
7.5.4 在DNSSEC中,什么是KSK和ZSK ?
dnssec-signzone -o chinaunix.net chinaunix.net.zone Kchinaunix.net.+003+49219.key Kchinaunix.net.+003+03483.key
生成区文件的签名后版本:chinaunix.net.zone.signed
同时生成了密钥集文件: dsset-chinaunix.net.
dsset-chinaunix.net.文件内容:
chinaunix.net. IN DS 3483 3 1 5D46B000BC003AF35A9541B57F79923C71036185
chinaunix.net. IN DS 3483 3 2 36EC5EAD7E5C00917E294089EDB01FC64106F1D6C17E8BA749A02C00 E2AF4D61
此密钥集文件用于对密钥做签名
7.5.3 修改named.conf配置文件:
options {
directory "/var/named";
dnssec-enable yes;
dnssec-validation yes;
};
zone "chinaunix.net" {
type master;
file " chinaunix.net.zone.signed";
};
7.5.4 在DNSSEC中,什么是KSK和ZSK ?
KSK 表示密钥签名密钥 (Key Signing key) (一种长期密钥),
ZSK 表示区域签名密钥 (Zone Signing Key) (一种短期密钥)。
如果有足够的时间和数据,加密密钥最终都会被破解。对于 DNSSECv 中使用的非对称密钥或公钥密码系统而言,
这意味着***者可通过强力***方法或其他方法确定公钥 – 私钥对的私钥部分(该部分用于创建对 DNS 记录的有效性进行验证的签名),从而使 DNSSEC 提供的保护失效。
DNSSEC 使用短期密钥(即区域签名密钥 (ZSK) ) 来定期计算 DNS 记录的签名,同时使用长期密钥(即密钥签名密钥 (KSK) ) 来计算 ZSK 上的签名,以使其可以得到验证,从而挫败了这些破解企图。
ZSK 被频繁更改或滚动,以使***者难以“猜测”,而期限较长的 KSK 则经过一个长得多的时段之后才更改(当前的最佳做法是以年为单位设置此时段)。
由于 KSK 对 ZSK 进行签名而 ZSK 对 DNS 记录进行签名,因此只需具有 KSK 即可对区域中的 DNS 记录进行验证。
它是以 授权签名者 (Delegation Signer, DS) 记录形式传递到“父”区域的一个 KSK 示例 。父区域(例如,根区域)使用其自己的、由其自己的 KSK 签名的 ZSK 对子区域(例如, .org )的 DS 记录进行签名
ZSK 表示区域签名密钥 (Zone Signing Key) (一种短期密钥)。
如果有足够的时间和数据,加密密钥最终都会被破解。对于 DNSSECv 中使用的非对称密钥或公钥密码系统而言,
这意味着***者可通过强力***方法或其他方法确定公钥 – 私钥对的私钥部分(该部分用于创建对 DNS 记录的有效性进行验证的签名),从而使 DNSSEC 提供的保护失效。
DNSSEC 使用短期密钥(即区域签名密钥 (ZSK) ) 来定期计算 DNS 记录的签名,同时使用长期密钥(即密钥签名密钥 (KSK) ) 来计算 ZSK 上的签名,以使其可以得到验证,从而挫败了这些破解企图。
ZSK 被频繁更改或滚动,以使***者难以“猜测”,而期限较长的 KSK 则经过一个长得多的时段之后才更改(当前的最佳做法是以年为单位设置此时段)。
由于 KSK 对 ZSK 进行签名而 ZSK 对 DNS 记录进行签名,因此只需具有 KSK 即可对区域中的 DNS 记录进行验证。
它是以 授权签名者 (Delegation Signer, DS) 记录形式传递到“父”区域的一个 KSK 示例 。父区域(例如,根区域)使用其自己的、由其自己的 KSK 签名的 ZSK 对子区域(例如, .org )的 DS 记录进行签名
7.5.4 DNSSEC的缺点:
标记和校验DNS数据会产生额外的开销,从而影响网络和服务器的性能
8. 动态更新DNS
下面主要以通过dhcp服务器来动态更新dns的A记录为例:
8.1 创建密钥对:
dnssec-keygen -a hmac-md5 -b 128 -n user dhcp_update
生成了两个密钥文件:Kdhcp_update.+157+53578.key 和 Kdhcp_update.+157+53578.private
公钥密钥文件Kdhcp_update.+157+53578.key的内容如下:
dhcp_update. IN KEY 0 3 157 Vb289/ZfG85RfrP8YTVCGg==
8.2 修改dhcpd.conf文件:
ddns-update-style interim;
ignore client-updates;
key dhcp_update { #更新dns的key,必须的
algorithm hmac-md5;
secret Vb289/ZfG85RfrP8YTVCGg==;
};
zone chinaunix.net. { #要更新的zone区
primary 127.0.0.1; #dns服务器的IP,此处为本机
key dhcp_update;
};
subnet 10.10.1.0 netmask 255.255.255.0 {
rang 10.10.1.10 10.10.1.254;
option routers 10.10.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 10.10.0.10 10.10.0.11;
option domain-name "chinaunix.net";
default-lease-time 86400; # 1 day
max-lease-time 259200; #3 days
};
8.3 修改named.conf文件:
options {
directory "/var/named";
};
include "/etc/rndc.key";
controls {
inet 127.0.0.1 allow { 127.0.0.1; } keys { rndc-key: };
key "dhcp_update" {
algorithm hmac-md5;
secret "Vb289/ZfG85RfrP8YTVCGg==";
};
zone "chinaunix.net" {
type master;
file "chinaunix.net.zone";
update-policy {
grant dhcp_update subdomain chinaunix.net. A;
};
};
上面的update-policy语句可以直接用allow-update { key dhcp_update; }; 替代
update-policy语句比allow-update语句能实现更精细的控制,二者不能同时存在。
update-policy语句的规则:
( grant | deny ) identity nametype name [types]
每个规则都说明是允许还是拒绝,一个信息如果与一条规则成功匹配,允许或拒绝立即执行,不再向下检查。
一个匹配是签名与inentity字段匹配,名字与name字段匹配,类型与type字段匹配。
identity 字段指授权更新需要的密钥名
nametype 字段有4个值: name, subdomain, wildcard, 和 self
name 名称:当更新名与name字段中的名字相同时匹配。
subdomain 子域:当更新名是name字段值的子域或name字段本身时匹配。
wildcard 通配名称:当更新名是name字段值的通配名称时匹配。
self 自已:当更新名是信息签名者自身时匹配,name字段被忽略
标记和校验DNS数据会产生额外的开销,从而影响网络和服务器的性能
8. 动态更新DNS
下面主要以通过dhcp服务器来动态更新dns的A记录为例:
8.1 创建密钥对:
dnssec-keygen -a hmac-md5 -b 128 -n user dhcp_update
生成了两个密钥文件:Kdhcp_update.+157+53578.key 和 Kdhcp_update.+157+53578.private
公钥密钥文件Kdhcp_update.+157+53578.key的内容如下:
dhcp_update. IN KEY 0 3 157 Vb289/ZfG85RfrP8YTVCGg==
8.2 修改dhcpd.conf文件:
ddns-update-style interim;
ignore client-updates;
key dhcp_update { #更新dns的key,必须的
algorithm hmac-md5;
secret Vb289/ZfG85RfrP8YTVCGg==;
};
zone chinaunix.net. { #要更新的zone区
primary 127.0.0.1; #dns服务器的IP,此处为本机
key dhcp_update;
};
subnet 10.10.1.0 netmask 255.255.255.0 {
rang 10.10.1.10 10.10.1.254;
option routers 10.10.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 10.10.0.10 10.10.0.11;
option domain-name "chinaunix.net";
default-lease-time 86400; # 1 day
max-lease-time 259200; #3 days
};
8.3 修改named.conf文件:
options {
directory "/var/named";
};
include "/etc/rndc.key";
controls {
inet 127.0.0.1 allow { 127.0.0.1; } keys { rndc-key: };
key "dhcp_update" {
algorithm hmac-md5;
secret "Vb289/ZfG85RfrP8YTVCGg==";
};
zone "chinaunix.net" {
type master;
file "chinaunix.net.zone";
update-policy {
grant dhcp_update subdomain chinaunix.net. A;
};
};
上面的update-policy语句可以直接用allow-update { key dhcp_update; }; 替代
update-policy语句比allow-update语句能实现更精细的控制,二者不能同时存在。
update-policy语句的规则:
( grant | deny ) identity nametype name [types]
每个规则都说明是允许还是拒绝,一个信息如果与一条规则成功匹配,允许或拒绝立即执行,不再向下检查。
一个匹配是签名与inentity字段匹配,名字与name字段匹配,类型与type字段匹配。
identity 字段指授权更新需要的密钥名
nametype 字段有4个值: name, subdomain, wildcard, 和 self
name 名称:当更新名与name字段中的名字相同时匹配。
subdomain 子域:当更新名是name字段值的子域或name字段本身时匹配。
wildcard 通配名称:当更新名是name字段值的通配名称时匹配。
self 自已:当更新名是信息签名者自身时匹配,name字段被忽略
转载于:https://blog.51cto.com/yxh51netsec/1293946