DNS安全与访问控制

news2024/9/28 7:15:48

一、DNS安全

1、DNSSEC原理

DNSSEC依靠数字签名保证DNS应答报文的真实性和完整性。权威域名服务器用自己的私有密钥对资源记录(Resource Record, RR)进行签名,解析服务器用权威服务器的公开密钥对收到的应答信息进行验证。如果验证失败,表明这一报文可能是假冒的,或者在传输过程、缓存过程中被篡改了。

一个支持DNSSEC的解析服务器(RFC4033中Security-Aware Resolver)向支持DNSSEC的权威域名服务器(Security-Aware Name Server)请求域名www.test.net.时,它除了得到一个标准的A记录(包含IPv4地址)以外,还收到一个同名的RRSIG记录,其中包含test.net这个权威域的数字签名,它是用test.net.的私有密钥来签名的。为了验证这一签名的正确性,解析服务器可以再次向test.net的域名服务器查询响应的公开密钥,即名为test.net的DNSKEY类型的资源记录。然后解析服务器就可以用其中的公钥验证上述www.test.net. 记录的真实性与完整性。

配置或布署DNSSEC有两种场景:

(1)配置安全的域名解析服务器(Resolver),该服务器可以保护使用它的用户,防止被DNS 欺骗攻击。这里只涉及数字签名的验证工作。

(2)配置安全的权威域名服务器(Name Server),对权威域的资源记录进行签名,保护服务器不被域名欺骗攻击。

2、配置安全解析服务器

首先,在BIND的配置文件(一般是/etc/named.conf)中打开DNSSEC选项,比如:

options {

directory “/var/named”;

dnssec-validation yes;

….

};

1)配置Trust anchor

其次,要给解析服务器配置可信锚(Trust Anchors),也就是你所信任的权威域的DNSKEY。理想情况下我们可以配置一个根的密钥就够了,但是目前DNSSEC还没有完全布署的情况下,我们需要配置很多安全岛(Secure Island)的密钥。可以从很多公开的网站下载这些可信域的DNSKEY文件,包括:

(1)Root Zone DNSSEC Trust Anchors:https://www.iana.org/dnssec/。2010年7月布署实施。如果DNSSEC全部布署成功,这一个公开密钥就足够了。

(2)The UCLA secspider : https://secspider.cs.ucla.edu,由美国加州大学洛杉矶分校(UCLA)张丽霞教授的实验室维护。

(3)The IKS Jena TAR:https://www.iks-jena.de/leistungen/dnssec.php

这些文件大概是这样的格式:

trusted-keys {

“test.net.”  256 3 5  “AQPzzTWMz8qS…3mbz7Fh

……

….fHm9bHzMG1UBYtEIQ==”;

“193.in-addr.arpa.” 257 3 5 “AwEAAc2Rn…HlCKscYl

kf2kOcq9xCmZv….XXPN8E=”;

};

假设上述trust anchors的文件为/var/named/trust-anchors.conf,则在/etc/named.conf中增加下面一行:

include “/var/named/sec-trust-anchors.conf”;

2)测试

在完成上述配置修改之后重新启动named进程,然后选择一个trust anchor文件中有的区或者它下一级的域名,在解析服务器上用dig测试一下,例如:

#dig @127.0.0.1 +dnssec   test.net.  SOA

如果配置正确,应该返回test.net的SOA记录和相应的RRSIG记录,另外返回的头部中应该包含AD标志位,表示DNSSEC相关的数字签名验证是正确的,类似下面的样子:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1397

;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3

如果没有得到期望的结果,需要查看DNS的日志来找出问题。BIND为DNSSEC相关的事件增加了一个dnssec类别,可以在/etc/named.conf配置日志如下:

logging {

channel dnssec_log {

file “log/dnssec” size 20m;   // a DNSSEC log channel 20m;

print-time yes;                   // timestamp the entries

print-category yes;          // add category name to entries

print-severity yes;          // add severity level to entries

severity debug 3;         // print debug message <= 3 t

};

};

category dnssec { dnssec_log; };

3、配置权威服务器

1)生成签名密钥对

首先为你的区(zone)文件生成密钥签名密钥KSK:

# cd /var/named

# dnssec-keygen -f KSK -a RSASHA1 -b 512 -n ZONE test.net.

Ktest.edu.+005+15480

然后生成区签名密钥ZSK:

# dnssec-keygen -a RSASHA1 -b 512 -n ZONE test.net.

Ktest.edu.+005+03674

其中的-a 参数是签名算法,-b是密钥长度。上述命令共产生两对DNSKEY密钥(共四个文件),分别以.key和.private结尾,表明这个文件存储的是公开密钥或私有密钥。

2)签名

签名之前,你需要把上面的两个DNSKEY写入到区文件中

#cat “$INCLUDE Ktest.net.+005+15480.key” >> db.test.net

# cat “$INCLUDE Ktest.net.+005+03674.key” >> db.test.net

然后执行签名操作:

# dnssec-signzone -o test.net. db.test.net

db.test.net.signed

上面的-o选项指定代签名区的名字。生成的db.test.net.signed

然后修改/etc/named.conf如下:

options  {

directory “/var/named”;

dnssec-enable yes;

};

zone “test.net” {

type master;

file “db.test.net.signed”;

};

记住,你每次修改区中的数据时,都要重新签名:

# dnssec-signzone -o test.net -f db.test.net.signed.new db.test.net.signed

# mv db.test.net.signed db.test.net.signed.bak

# mv db.test.net.signed.new db.test.net.signed

# rndc reload test.net

3)发布公钥

要让其他人验证你的数字签名,其他人必须有一个可靠的途径获得你的公开密钥。DNSSEC通过上一级域名服务器数字签名的方式签发你的公钥。

用dnssec-signzone时,会自动生成keyset-文件和dsset-开头的两个文件,分别存储着KSK的DNSKEY记录和DS记录。作为test.net区的管理员,你需要把这两个文件发送给.net的管理员,.net的管理员需要把这两条记录增加到.net区中,并且用.net的密钥重新签名。

test.net.              86400   IN NS   ns.test.net.

86400   DS      15480 5 1 (

F340F3A05DB4D081B6D3D749F300636DCE3D

6C17 )

86400   RRSIG   DS 5 2 86400 20060219234934 (

20060120234934 23912   net.

Nw4xLOhtFoP0cE6ECIC8GgpJKtGWstzk0uH6

YWInWvWx12IiPKfkVU3F0EbosBA= )

二、DNS访问控制 

   因为安全和DNS服务器性能,如果没有ACL,那么任何人都可以到我们的DNS服务器上做递归查询,这样是非常危险的。而且DNS的区域传送是多主复制,如果不设置ACL,那么任何主机都可以到我们的DNS上来做完全区域传送,这也是很危险的。

1、BIND中常用4个常用的控制指令

allow-transfer { ip;|none;}; //允许做区域传送的指令。

allow-query { ip;|none;}; //允许做查询的指令。

allow-recursion { ip;|none;}; //允许做递归查询的ip列表,一般来说只允许给本地客户端做递归查询。

allow-update { ip;|none; }; //用于DDNS(动态DNS:与DHCP联动),比较危险,一般不允许更新数据文件。

以上4段可以放到全局配置中对全局配置生效,也可放在某个区域中,只针对于某个区域生效;而allow-recursion参数要加入到全局配置中,其他两项一般是放到区域配置中。

2、BIND的ACL

如果allow-transfer 和 allow-query 放到区域配置中一般后期修改ip地址会非常的麻烦,所以可以定义acl访问规则:

acl只有先定义才可以使用,因此acl定义必须在acl调用的最上方即放在配置文件的最上方。

acl  string  { address_match_element; ...};

acl acl_name {

ip;具体的ip地址

net/prelen;表示一个网段

};

例如:

acl mynet {

172.168.179.110

172.168.179.0/24

};

allow-query     { localhost; };

allow-query     { mynet; };

bind 内置的 acl:

none :没有一个主机

any :任意主机

localhost :本地主机

localnets:本机的IP同掩码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1363886.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5年经验之谈 —— 探索自动化测试用例设计粒度!

自动化测试用例的粒度指的是测试用例的细致程度&#xff0c;即每个测试用例检查的功能点的数量和范围。 通常&#xff0c;根据测试用例的粒度&#xff0c;可以被分为3种不同的层次&#xff0c;从更低层次的细粒度到更高层次的粗粒度。 第一种&#xff1a;单元测试 - 细粒度 单…

【IC设计】移位寄存器

目录 理论讲解背景介绍什么是移位寄存器按工作模式分类verilog语法注意事项 设计实例循环移位寄存器算术双向移位寄存器5位线性反馈移位寄存器伪随机码发生器3位线性反馈移位寄存器32位线性反馈移位寄存器串行移位寄存器&#xff08;打4拍&#xff09;双向移位寄存器&#xff1…

设置输入法默认为英文

1、进入语言首选项 2、添加首选的语言&#xff0c;选英文 3、 选择始终默认使用的输入法 4、选择默认语言 5、输入语言热键

LeetCode刷题:面试题 02.01. 移除重复节点

题目&#xff1a; 是否独立完成&#xff1a;算是&#xff0c;但是使用自己的办法时间复杂度会超标 解题思路&#xff1a; 1.双循环嵌套&#xff0c;定义快慢节点&#xff0c;双层嵌套循环&#xff0c;如果值一样则剔除&#xff0c;但是时间复杂度为O&#xff08;n&#xff09;…

数据交互系列:认识 cookie

cookie的原理 http本身是一个无状态的请求&#xff0c;cookie最初的原始目的是为了维持状态而产生的。在首次访问网站时&#xff0c;浏览发送请求中并未携带cookie&#xff0c;即发送无状态请求服务器接受请求之后会在请求上的respond header上加入cookie相关信息并返回给浏览…

【计算机组成原理】通过带符号整数的减法运算中加法器的溢出标志 OF 和符号标志 SF 对两个带符号整数的大小进行比较

对于带符号整数的减法运算&#xff0c;能否直接根据 CF 的值对两个带符号整数的大小进行比较&#xff1f; 对于带符号整数的减法运算&#xff0c;不能直接根据CF&#xff08;进/借位标志&#xff09;的值对两个带符号整数的大小进行比较。 CF标志位在带符号整数运算中主要用于…

使用Python+selenium3.0实现第一个自动化测试脚本

这篇文章主要介绍了使用Pythonselenium实现第一个自动化测试脚本&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着小编来一起学习学习吧 最近在学web自动化&#xff0c;记录一下学习过程。…

冬天夺去的清爽,可爱,春天都会还给你

这款外套上身可太时尚好看了 春天日常穿着或者出行游玩 应对早晚温差&#xff0c;兼具时尚和温度两不误 干净率性闲适的洒脱范整件衣服干净不失细节 下摆有橡筋收紧更加保暖了工艺方面也毫不逊色&#xff0c;防水拉链 四合扣、猪鼻扣一应俱全简直就是一件实用与时尚并存的…

Spring Boot实现数据加密脱敏:注解 + 反射 + AOP

文章目录 1. 引言2. 数据加密和脱敏的需求3. Spring Boot项目初始化4. 敏感数据加密注解设计5. 实现加密和脱敏的工具类6. 实体类和加密脱敏注解的使用7. 利用AOP实现加密和脱敏8. 完善AOP切面9. 测试10. 拓展功能与未来展望10.1 加密算法的选择10.2 动态注解配置 11. 总结 &am…

ReentrantLock底层原理学习一

J.U.C 简介 Java.util.concurrent 是在并发编程中比较常用的工具类&#xff0c;里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。并发包的作者是大名鼎鼎的 Doug Lea。我们在接下来的课程中&#xff0c;回去剖析一些经典的比较…

【Docker基础三】Docker安装Redis

下载镜像 根据自己需要下载指定版本镜像&#xff0c;所有版本看这&#xff1a;Index of /releases/ (redis.io) 或 https://hub.docker.com/_/redis # 下载指定版本redis镜像 docker pull redis:7.2.0 # 查看镜像是否下载成功 docker images 创建挂载目录 # 宿主机上创建挂…

AQS 抽象队列同步器

AQS AQS &#xff08;抽象队列同步器&#xff09;&#xff1a; AbstractQueuedSynchronizer 是什么 来自jdk1.5&#xff0c;是用来实现锁或者其他同步器组件的公共基础部分的抽象实现&#xff0c;是重量级基础框架以及JUC的基石&#xff0c;主要用于解决锁分配给谁的问题整体…

vue2中vuex详细使用

1.安装 说明&#xff1a;也就是版本号&#xff0c;一般vue2安装vuex3。 npm i vuex3.6.2 2.搭建架子 执行流程如下&#xff1a; 初始化状态&#xff1a;在state对象中定义了一个名为message的属性&#xff0c;并将其初始值设置为"启动"。 定义变更函数&#xff08…

【算法专题】FloodFill 算法

FloodFill 算法 1. 图像渲染 题目链接 -> Leetcode -773.图像渲染 Leetcode -773.图像渲染 题目&#xff1a;有一幅以 m x n 的二维整数数组表示的图画 image &#xff0c;其中 image[i][j] 表示该图画的像素值大小。 你也被给予三个整数 sr, sc 和 newColor 。你应该从…

jumpServer-02-安装与配置

jumpServer-02-安装与配置 文章目录 jumpServer-02-安装与配置一、什么是jumpServer&#xff1f;二、jumpServer安装配置①&#xff1a;初始化配置01&#xff1a;Linux服务器准备02&#xff1a;环境准备&#xff0c;关闭防火墙03: 配置yum源04&#xff1a;安装系统初始化所需的…

Python 入门练习

练习1&#xff1a;打印“hello world” print(hello world) 练习2&#xff1a;用户输入一个三位自然数&#xff0c;计算并输出其百位&#xff0c;十位和个位上的数字。 x input(请输入一个三位自然数&#xff1a;) print(*map(int,x)) 运行结果&#xff1a; 练习3&#x…

学习JavaEE的日子 day10 一维数组的深入,二维数组

day10 1.eclipse的使用 Eclipse是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于开发Java应用程序。 1.项目&#xff08;Project&#xff09;&#xff1a;项目是为满足特定需求而创建的代码文件集合。一个工作区可以包含多个项目&#xff0c;而您…

超维空间M1无人机使用说明书——01、ROS机载电脑使用说明——远程连接

引言&#xff1a;远程连接通常采用两种方式&#xff0c;一种是通过可视化软件&#xff0c;如VNC、Nomachine等&#xff0c;另外一种是使用SSH。各有优缺点&#xff0c;两种远程登录方式的优缺点做一个简单的对比&#xff1a; 1、SSH优缺点 优点:1、消耗网络资源 2、运行稳定 …

基于SSM的网上购物平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

JavaScript常用事件演示

文章目录 一、在JavaScript中什么是事件&#xff1f;二、什么是JavaScript 常用事件&#xff1f;三、常用JS事件代码示例:四、事件总结 一、在JavaScript中什么是事件&#xff1f; JavaScript 使我们有能力创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个…