zoukankan      html  css  js  c++  java
  • BIND简易教程(3):DNSSec配置

    目录:
    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ㄒ)/~~)。别看我,我也不知道这怎么解决。

  • 相关阅读:
    技术学习博2
    正则匹配两个特定词组中间的内容的写法
    springboot mitre HTTP Proxy Servlet POST hang timeout 不执行的解决方案
    JAVA实现的HTTP反向代理 [smiley-http-proxy-servlet]学习
    get方式url传递map的写法,control传入map数据url格式&params[key]=value&params[key2]=value2
    angular7 学习笔记记录--1. TypeScript基础
    Operator '>' cannot be applied to types 'boolean' and 'number'?
    记录在linux环境redis如何重启版本5.x
    ElasticSearch (with docker )入门学习
    Dataway【实测】,让服务飞起来,让SpringBoot不再需要Controller、Service、DAO、Mapper
  • 原文地址:https://www.cnblogs.com/anpengapple/p/5879363.html
Copyright © 2011-2022 走看看