标签:
目录:
BIND简易教程(1):安装及基本配置
BIND简易教程(2):BIND视图配置
BIND简易教程(3):DNSSec配置 (本篇)
DNSSec,有个半英半中的名字叫DNS安全扩展。说的好听一点,它是对域名进行签名认证,保证域名的完整性和正确性,不会被修改。DNSSec不能防御对DNS服务器的攻击,也不会对请求和应答的数据进行加密,甚至如果你不知道DNSSec这个东西的话,域名是不是完整正确的你也不知道。
实际上,给我的感觉就是,DNSSec是在花很大的力气去配置一个不怎么有用的东西。然并卵。该用还是得用。当然,也有可能是我才疏学浅,蜩与学鸠笑鹏起不知若何
好了不拽文了,还是说正事。大概要分好几步:
1、开启DNSSec功能:
(1)要在options里面添加几个选项,开启DNSSec功能:
options { dnssec-enable yes; dnssec-validation auto; dnssec-lookaside auto; notify yes; allow-transfer { none; }; };
之前有dnssec-enable no;这个选项,改为yes,其余4个是新增的。
(2)建立目录留作生成key放置:
mkdir -p views/dnssec_keys
(3)zone中添加相关参数:
zone “apple.tree” IN { type master; auto-dnssec maintain; update-policy local; file “/etc/bind/views/zones/dianxin.apple.tree.zone”; key-directory “/etc/bind/views/dnssec_keys”; };
其中type和file是原来就有的,其余几个选项是新增的。但是,file后面的文件一会是要改的。暂时先不改放在这儿。
2,生成密钥
在新增的dnssec_keys目录中生成密钥
sudo dnssec-keygen -f KSK -a RSASHA1 -r /dev/urandom -b 512 -n ZONE apple.tree. sudo dnssec-keygen -a RSASHA1 -r /dev/urandom -b 512 -n ZONE apple.tree.
分别采用KSK和RSA加密。关于dnssec-keygen的使用方法,有时候需要百度查一下,或者用-h看看。比如-r /dev/urandom,这是随机数生成器,如果不加的话,生成key的时候可能要等上好几分钟都没结果。
之后在dnssec_keys目录中可以看到4个文件:
Kapple.tree.+005+54124.key Kapple.tree.+005+54124.private Kapple.tree.+005+61152.key Kapple.tree.+005+61152.private
两个公钥和两个私钥,一会配置解析库的时候会用到>
3,签名
(1)将前面生成的两个公钥添加到区域配置文件末尾
$TTL 86400
@ IN SOA apple.tree. apple.apple.tree. (
2016090100 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400 ; Negative Cache TTL
)
@ IN NS apple.tree.
@ IN A 192.168.4.135
aaa IN A 192.168.4.100
bbb IN A 192.168.4.101
ccc IN CNAME bbb
$INCLUDE "/etc/bind/views/dnssec_keys/Kapple.tree.+005+54124.key"
$INCLUDE "/etc/bind/views/dnssec_keys/Kapple.tree.+005+61152.key"
(2)对zone签名
sudo dnssec-signzone -K /etc/bind/views/dnssec_keys -o apple.tree. /etc/bind/views/zones/dianxin.apple.tree.zone
会生成一个后缀为.signed的文件,这个就是签名后的zone。把这个zone文件的名字写到前面zone一节的file选项中。zone变为
zone "apple.tree" IN {
type master;
auto-dnssec maintain;
update-policy local;
file "/etc/bind/views/zones/dianxin.apple.tree.zone.signed";
key-directory "/etc/bind/views/dnssec_keys";
};
4,生成信任锚
(1)生成信任锚文件:查看刚才生成的两个公钥
$ ls Kccgslb.bokecs.com.+005+54124.key Kccgslb.bokecs.com.+005+54124.private Kccgslb.bokecs.com.+005+61152.key Kccgslb.bokecs.com.+005+61152.private
$ sudo cat Kapple.tree.+005+54124.key ; This is a key-signing key, keyid 54124, for apple.tree. ; Created: 20160825061813 (Thu Aug 25 14:18:13 2016) ; Publish: 20160825061813 (Thu Aug 25 14:18:13 2016) ; Activate: 20160825061813 (Thu Aug 25 14:18:13 2016) apple.tree. IN DNSKEY 257 3 5 AwEAAbfkw0jfR6MAIInduMR1WAj6XZIRj3Zso8xyiOSmeQRNVVyS9dOz tBemhoCWhOk5RnEZpu/ITJVEzSZHY3bA1Tc=
$ sudo cat Kapple.tree.+005+61152.key ; This is a zone-signing key, keyid 61152, for apple.tree. ; Created: 20160825062349 (Thu Aug 25 14:23:49 2016) ; Publish: 20160825062349 (Thu Aug 25 14:23:49 2016) ; Activate: 20160825062349 (Thu Aug 25 14:23:49 2016) apple.tree. IN DNSKEY 256 3 5 AwEAAb8mO4dN8I1mCt/f575aACdeSr+Q0igouAWrJa5DGJNZfAoX39eW z3QfG6nmiDdgtT/CoPL+uqH46BERgqk9POc=
在 /etc/bind 目录下生成文件 sec-trust-anchors.conf
trusted-keys { apple.tree. 257 3 5 "AwEAAbfkw0jfR6MAIInduMR1WAj6XZIRj3Zso8xyiOSmeQRNVVyS9dOz tBemhoCWhOk5RnEZpu/ITJVEzSZHY3bA1Tc="; apple.tree. 256 3 5 "AwEAAb8mO4dN8I1mCt/f575aACdeSr+Q0igouAWrJa5DGJNZfAoX39eW z3QfG6nmiDdgtT/CoPL+uqH46BERgqk9POc="; };
这里面的两条内容是刚才生成的两个密钥的内容。用公钥比较方便(也就是.key的文件)。注意复制的时候去掉“IN”和“DNSKEY”这两个词,以及后面的key要加引号。
(2)在named.conf中添加
include "/etc/bind/sec-trust-anchors.conf";
5,重启bind
sudo service bind9 restart
如果重启成功,就可以测试了
$ dig +dnssec aaa.apple.tree @192.168.4.43 ; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> aaa.apple.tree @192.168.4.43 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53833 ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;aaa.apple.tree. IN A ;; ANSWER SECTION: aaa.apple.tree. 86400 IN A 192.168.4.100 aaa.apple.tree. 86400 IN RRSIG CNAME 5 6 86400 20160924084355 20160825075619 61152 apple.tree. PLHn/VCVSb6mcvYZgM66qH2/19gKxrrfogCDWMWj3n5ZU+iqpu4W5XoY 9osK/d9BM9LM3YfltEubmCDlFBrUKw== ;; Query time: 4 msec ;; SERVER: 192.168.4.43#53(192.168.4.43) ;; WHEN: Fri Jan 08 14:47:48 CST 2016 ;; MSG SIZE rcvd: 59
我们看到除了正常的一行解析到192.168.4.100之外,还有一行乱七八糟的字符串,这个就是对aaa.apple.tree的签名。出现这个就代表DNSSec配好了。OK,至此,三篇BIND的介绍就算完成了。其实对于整个BIND来说,这只是冰山一角。但是我的精力也有限,只能写这么点东西了。
题外话:
(1)开始以为BIND的效率挺差的,但是后来真正用起来发现还是相当快的,加上功能多,真不愧是当今世界上应用最广泛的DNS服务器。我关闭日志,测试了一下QPS,有将近12万的表现。比PowerDNS要高出一大截。而且,开启DNSSec后效率并没有降低,我估计是因为缓存的关系。
(2)DNS安全问题是个挺严肃的问题。我所知道的极少,又片面,所以不敢写。前几天跟群里的一位同学谈到了“分布式放大攻击”,简直恐慌。简单说下,比如有攻击者A和受害者B,A将自己的IP地址伪装成B,然后向DNS服务器发送请求。请求是精心准备的,这个请求的应答要比请求本身要大上很多倍。之后,DNS服务器向B发送了应答包。从外部看起来,就是A利用DNS服务器作为放大器,向B发动攻击。当然,一个DNS包再大也不会有什么问题。但是很多的DNS应答包就会出问题了——受害者的计算机毕竟不是服务器,能不能承受住如此大量的网络数据包?这就是放大攻击。而所谓的分布式就是,A可以向很多很多DNS服务器发送请求,这样就会成为N多服务器攻击同一台计算机(服务器:我是冤枉的/(ㄒoㄒ)/~~)。别看我,我也不知道这怎么解决。
标签:
原文地址:http://www.cnblogs.com/anpengapple/p/5879363.html