目录:
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  -n ZONE apple.tree.
sudo dnssec-keygen -a RSASHA1 -r /dev/urandom -b -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.++.private
Kccgslb.bokecs.com.+005+61152.key
Kccgslb.bokecs.com.++.private
$ sudo cat Kapple.tree.++.key
; This is a key-signing key, keyid , for apple.tree.
; Created: (Thu Aug :: )
; Publish: (Thu Aug :: )
; Activate: (Thu Aug :: )
apple.tree. IN DNSKEY 257 3 5 AwEAAbfkw0jfR6MAIInduMR1WAj6XZIRj3Zso8xyiOSmeQRNVVyS9dOz tBemhoCWhOk5RnEZpu/ITJVEzSZHY3bA1Tc=
$ sudo cat Kapple.tree.++.key
; This is a zone-signing key, keyid , for apple.tree.
; Created: (Thu Aug :: )
; Publish: (Thu Aug :: )
; Activate: (Thu Aug :: )
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ㄒ)/~~)。别看我,我也不知道这怎么解决。

BIND简易教程(3):DNSSec配置的更多相关文章

  1. BIND简易教程(2):BIND视图配置

    目录:BIND简易教程(1):安装及基本配置BIND简易教程(2):BIND视图配置(本篇)BIND简易教程(3):DNSSec配置 上文书说到,我们把aaa.apple.tree解析到192.168 ...

  2. BIND简易教程(1):安装及基本配置

    首先,为什么说是简易教程呢?因为BIND的功能实在太多,全写出来的话要连载好久,我觉得我没有那么多精力去写:而我了解的仅仅是有限的一点点,不敢造次.百度上的文章也是一抓一大把呐!所以,教点基本使用方法 ...

  3. BIND简易教程(0):在Ubuntu下源码安装BIND(其实跟前面的教程没太大关系)

    之前介绍过BIND的基本使用啦.关于BIND的入门级使用方法见:http://www.cnblogs.com/anpengapple/p/5877661.html简易教程系列,本篇只讲BIND安装. ...

  4. Ocelot简易教程(五)之集成IdentityServer认证以及授权

    Ocelot简易教程目录 Ocelot简易教程(一)之Ocelot是什么 Ocelot简易教程(二)之快速开始1 Ocelot简易教程(二)之快速开始2 Ocelot简易教程(三)之主要特性及路由详解 ...

  5. [转载]Ocelot简易教程(五)之集成IdentityServer认证以及授权

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9807125.html 最近比较懒,所以隔了N天才来继续更新第五篇Ocelot简易教程,本篇教程会先简单介 ...

  6. WebGL简易教程(十三):帧缓存对象(离屏渲染)

    目录 1. 概述 2. 示例 2.1. 着色器部分 2.2. 初始化/准备工作 2.2.1. 着色器切换 2.2.2. 帧缓冲区 2.3. 绘制函数 2.3.1. 初始化顶点数组 2.3.2. 传递非 ...

  7. JavaScript简易教程(转)

    原文:http://www.cnblogs.com/yanhaijing/p/3685304.html 这是我所知道的最完整最简洁的JavaScript基础教程. 这篇文章带你尽快走进JavaScri ...

  8. Ant 简易教程

    转载:http://www.cnblogs.com/jingmoxukong/p/4433945.html Ant 简易教程 Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动 ...

  9. Intellj IDEA 简易教程

    Intellj IDEA 简易教程 目录 JDK 安装测试 IDEA 安装测试 调试 单元测试 重构 Git Android 其他 参考资料 Java开发IDE(Integrated Developm ...

随机推荐

  1. Java ConcurrentModificationException异常原因和解决方法(转)

    摘自:http://www.cnblogs.com/dolphin0520/p/3933551.html#undefined 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同 ...

  2. 常用软件下载开发环境七牛镜像Java、Node、Mongo

    [jdk1.8] Linux:http://soft.yzeng.cc/jdk18/jdk-8u202-linux-x64.tar.gz Windows:http://soft.yzeng.cc/jd ...

  3. JavaScript对象中的constructor属性

    constructor属性始终指向创建当前对象的构造函数. 比如下面的例子: // 等价于 var foo = new Array(1, 56, 34, 12); var arr = [1, 56, ...

  4. 使用connect-multiparty限制nodejs图片上传

    connect-multiparty中间件,可用于获取文件上传时各种参数,比如文件大小.格式等,具体使用: var multipart = require('connect-multiparty'); ...

  5. json转化的时候如何忽略某些属性字段值

    一.有时候在将对象或list对象转化为json的时候,我们可能不需要所有的属性值,这就需要我们去过滤掉这些属性了 我下面说两种比较流行的json包如何来忽略某些属性值 二. 使用jaskson包 1. ...

  6. Python基础学习总结(三)

    4.if语句 If语句可以检查判定当前条件,并执行相应措施. if a in A: if a 条件: 执行命令1 4 else: 执行命令2 if判断条件还可以简写 if x: print('True ...

  7. 基于easyUI实现权限管理系统(三)——角色管理

    此文章是基于 EasyUI+Knockout实现经典表单的查看.编辑 一. 相关文件介绍 1. role.jsp:角色管理界面 <!DOCTYPE html PUBLIC "-//W3 ...

  8. PHP打印日期

    <?php header("content-type:text/html;charset=utf-8"); echo "今天是 " . date(&quo ...

  9. JavaEE之HttpServletRequest

    HttpServletRequest //要下载的这个文件的类型--客户端会通过文件的MIME类型去区分类型 response.setContentType( getServletContext(). ...

  10. Linux基础之-正则表达式(grep,sed,awk)

    一. 正则表达式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式是对字符串操作的一种逻辑公 ...