DNS BIND主辅同步之TSIG加密

2024-04-05 22:18
文章标签 加密 bind 同步 dns 主辅 tsig

本文主要是介绍DNS BIND主辅同步之TSIG加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Transaction signatures(TSIG)通常是一种确保DNS消息安全,并提供安全的服务器与服务器之间通讯(通常是在主从服务器之间)的机制。TSIG可以保护以下类型的DNS服务器:Zone转换、Notify、动态升级更新、递归查询邮件。TSIG适用于BIND v8.2及以上版本。TSIG使用共享秘密和单向散列函数来验证的DNS信息。 TSIG是易于使用的轻便解析器和命名机制。TSIG是一个安全的访问控制机制,保护信息在传输的过程中不会被改变。
一、工作原理
1、每个域名服务器增加了一个TSIG记录DNS服务器间的查询和信息的数据块
2、TSIG中记录了DNS消息签名,证明该邮件发件人与收件人共有一个共享密钥,并且在消息发送后不可被修改。
3、TSIG使用单向散列函数来验证身份和判断数据完整性。
要求:时间必须是准确的。

二、生成TSIG

使用bind提供的工具dnsssec-kengen生成共享密钥。

/home/slim/bind/sbin/dnssec-keygen -a HMAC-MD5 -b 128 -n HOST "test_key"

生成Ktest_key.+157+45410.key公用和Ktest_key.+157+45410.private私钥文件

# cat Ktest_key.+157+45410.private
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: epYaIl5VMJGRSG4WMeFW5g==
Bits: AAA=
Created: 20150418165400
Publish: 20150418165400
Activate: 20150418165400
将生成的key写到secret文件中
vi test_key

key "test_key" {                                  #注意:这里写的是生成key的名字algorithm hmac-md5;secret "epYaIl5VMJGRSG4WMeFW5g==";        #将生成的key复制到此处
};

注:尽管共有密钥和私有密钥是等价的,但为了确保安全通常dnssec-keygen采用例如HMAC-MD5的称加密算法来对生成的密钥进行加密。

三、主服务器配置

在named.conf增加如下配置:

include "/etc/test_key";

并在全局options配置中添加

allow-transfer { key test_key; };
notify yes;  

定义有key的主机才能同步。

四、从服务器

将主服务器的test_key文件复制过来

在named.conf增加如下配置:

include "/etc/test_key";

server 192.168.36.54{
        keys{
                test_key;
        };
};

修改zone test.com指定主服务器:

zone "test.com" IN {
        type slave;
        file "zone/test.com.zone";
        masters{
                192.168.36.54;
        };
};

四、测试

启动主辅服务器,检查是否能正常解析,然后修改主服务器zone/test.com.zone SOA中的Serial值+1,重启加载主服务器配置,查看是否同步。

/home/slim/bind/sbin/rndc -c /home/slim/chroot/etc/rndc.conf reload

可以看到同步日志如下:

主服务器:

18-Apr-2015 17:29:30.089 client 192.168.36.189#50319/key test_key (test.com): query: test.com IN SOA -SE (192.168.36.54)
18-Apr-2015 17:29:30.098 client 192.168.36.189#39445/key test_key (test.com): query: test.com IN IXFR -ST (192.168.36.54)
18-Apr-2015 17:29:30.099 client 192.168.36.189#39445/key test_key (test.com): transfer of 'test.com/IN': AXFR-style IXFR started: TSIG test_key
18-Apr-2015 17:29:30.100 client 192.168.36.189#39445/key test_key (test.com): transfer of 'test.com/IN': AXFR-style IXFR ended
辅服务器:

18-Apr-2015 17:27:12.156 client 192.168.36.54#1246: received notify for zone 'test.com'
18-Apr-2015 17:27:12.157 zone test.com/IN: notify from 192.168.36.54#1246: zone is up to date
18-Apr-2015 17:29:27.899 client 192.168.36.54#13088: received notify for zone 'test.com'
18-Apr-2015 17:29:28.099 zone test.com/IN: Transfer started.
18-Apr-2015 17:29:28.106 transfer of 'test.com/IN' from 192.168.36.54#53: connected using 192.168.36.189#39445
18-Apr-2015 17:29:28.109 zone test.com/IN: transferred serial 60: TSIG 'test_key'
18-Apr-2015 17:29:28.109 transfer of 'test.com/IN' from 192.168.36.54#53: Transfer completed: 1 messages, 8 records, 289 bytes, 0.003 secs (96333 bytes/sec)
18-Apr-2015 17:29:28.110 zone test.com/IN: sending notifies (serial 60)
可以看见同步过程中使用TSIG 'test_key'
五、配置zone同步key

由于bind的主辅同步可以控制到具体的zone,所以TSIG可以真不同zone,配置不同的TSIG,不过要通过view配置。

如主服务器:

view"tisg"{match-clients{key"tisg";192.168.36.0/24;};server192.168.36.189{keys"tisg";};zone"."IN{typehint;file"named.root";};zone"test.com"{typemaster;also-notify{192.168.36.189;};file"tisg/test.com.zone";};
};

辅服务器:

view"tisg"{match-clients{key"tisg";192.168.36.0/24;};server192.168.36.54{keys"tisg";};zone"."IN{typehint;file"/var/named/named.root";};zone"test.com"{typeslave;file"tisg/test.com.zone"masters{192.168.36.54;};};
};

如果主dns不设置server语句的话,则主服务器主动发送给从dns的notify会被拒绝;如果从服务器不设置server语句的话,则不能实现分view同步的功能;如果主从服务器时间不同步的话,则会导致验证失败;如果从dns的ip匹配到主dns的view,则会导致只同步这个view的数据下来,即使配置了key。

参考文章:http://www.cnblogs.com/qlight/archive/2012/08/30/2663314.html

这篇关于DNS BIND主辅同步之TSIG加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/878287

相关文章

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

DNS查询的利器! linux的dig命令基本用法详解

《DNS查询的利器!linux的dig命令基本用法详解》dig命令可以查询各种类型DNS记录信息,下面我们将通过实际示例和dig命令常用参数来详细说明如何使用dig实用程序... dig(Domain Information Groper)是一款功能强大的 linux 命令行实用程序,通过查询名称服务器并输

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

关于DNS域名解析服务

《关于DNS域名解析服务》:本文主要介绍关于DNS域名解析服务,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录DNS系统的作用及类型DNS使用的协议及端口号DNS系统的分布式数据结构DNS的分布式互联网解析库域名体系结构两种查询方式DNS服务器类型统计构建DNS域

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流