DNS基础介绍
关于DNS的内容社区里很多,这里之所以发布这篇文章,主要是参照自身工作,提供给身边刚参加工作的新同事了解相关的基础知识。
文章内容来主要是参考了两篇博文内容,根据需要进行了简单整理。见文章最后
什么是DNS
DNS(Domain name system),也称为:域名系统,是一种互联网协议,主要功能是把容易记忆域名转换为计算机通信使用的IP地址(IP:61.166.150.123,IP地址一般是些数字组成,难以记忆,也不能表达其他文字可用体现的意义),例如www.baidu.com,就是百度收索的主页域名,当我们使用此域名时,通过DNS就会解释返回其所在服务器的公网IP地址给计算机,计算机通过获取的IP地址就可以访问对应服务器上的内容(计算机在网络上进行通信都是依靠IP地址来进行的);
我们把DNS的工作,称为域名解析:把域名转换成IP地址
DNS也可以把IP转换为域名,这就是俗称的反向解析
DNS的结构
DNS是以一种树状结构的方式,提供互联网上所有域名的查询、解析的,负责网络中不断增长的网络设备名称列表,它通过建立责任层次来实现这一点。
DNS域名空间像一颗倒立的树,如图一,其中根服务器位于最顶部(分布式部署),逐级分层,图中的叶片就代表着互联网上的终端逐级节点。
域名服务器
域名的组成
最顶层的域名是根域名(root),然后是顶级域名(top-level domain,简写 TLD),再是一级域名、二级域名、三级域名。
(1)根域名
所有域名的起点都是根域名,它写作一个点.
,放在域名的结尾。因为这部分对于所有域名都是相同的,所以就省略不写了,比如example.com
等同于example.com.
(结尾多一个点)。
你可以试试,任何一个域名结尾加一个点,浏览器都可以正常解读。
(2)顶级域名
根域名的下一级是顶级域名。它分成两种:通用顶级域名(gTLD,比如 .com 和 .net)和国别顶级域名(ccTLD,比如 .cn 和 .us)。
顶级域名由国际域名管理机构 ICANN 控制,它委托商业公司管理 gTLD,委托各国管理自己的国别域名。
(3)一级域名
一级域名就是你在某个顶级域名下面,自己注册的域名。比如,ruanyifeng.com
就是我在顶级域名.com
下面注册的。
(4)二级域名
二级域名是一级域名的子域名,是域名拥有者自行设置的,不用得到许可。比如,es6
就是 ruanyifeng.com
的二级域名。
根名称服务器(root server)
将DNS查询定向到每个顶级域的名称服务器,这些顶级域是其下方的主要分支(例如:.com、.net)。根名称服务器是DNS根区域的权威域名服务器,对区域具有权威意味着对该域负责,但委派给不同权威名称服务器的部分除外。
全世界一共有13个根域名服务(root server)用英文字母a——m标记,当然它们并不是单独的服务器,而是一些服务器集群。它们的域名和IP地址如下:
Root Server | IP |
---|---|
a.root-servers.net | 198.41.0.4 |
b.root-servers.net | 199.9.14.201 |
c.root-servers.net | 192.33.4.12 |
d.root-servers.net | 199.7.91.13 |
e.root-servers.net | 192.203.230.10 |
f.root-servers.net | 192.5.5.241 |
g.root-servers.net | 192.112.36.4 |
h.root-servers.net | 198.97.190.53 |
i.root-servers.net | 192.36.148.17 |
j.root-servers.net | 192.58.128.30 |
k.root-servers.net | 193.0.14.129 |
l.root-servers.net | 199.7.83.42 |
m.root-servers.net | 202.12.27.33 |
根域名服务器的IP地址是不变的,集成在操作系统里面。 | |
操作系统会选其中一台,查询TLD服务器的IP地址。 |
DNS域和从属域名服务器
DNS域是由一方负责维护的域,减去该方委派给另一方的控制权的任何子域。责任方使用该域来维护该域的资源记录。资源记录(Resource records)将信息映射到公用域名。参与编辑资源记录的服务器通常称为主名称服务器(Primary name server 或者 master name server)。由于仅一台服务器不足以提供可靠的解决方案,因此通过称为“域传输(zone transfer)”的方式从主域名服务器获取区域数据的副本,这些附加服务器称为辅助域名服务器或者从属域名服务器。
DNS Server上配置的资源记录类型
- A记录(A Record)
A记录是DNS中最常用的记录。指的是主机名对应的IPV4地址记录,这些记录将容易记住的主机名与资源的IP地址相匹配。
NAME | TTL | TYPE | RDATA |
---|---|---|---|
eot.example.com | 3600 | A | 93.125.216.33 |
- AAAA记录
AAAA记录(通常称为quad A)与A记录类似,不同的是它对应的是IPV6地址。
NAME | TTL | TYPE | RDATA |
---|---|---|---|
eot.example.com | 3600 | AAAA | 3c::90:22a1:fa:33 |
- SOA记录
SOA记录代表权限记录的开始,它提供查询器(包括辅助服务器和递归服务器)、有关区域本身的信息,包括主名称服务器(mname)、负责方(rname)以及如何处理区域及其记录的计时器。
可以说是DNS提供服务的最初始记录,大多数时候在配置安装配置DNS服务器的时候就配置完成了,并不需要我们经常的进行修改。
-
CNAME记录
别名记录,记录将其他名称映射回主机名。此类记录的一个常见用法是将多个服务器名称映射到主服务器名称上。例如,ftp1.example.com指向ftp.example.com的服务器。 -
PTR记录
记录将IP地址映射回该IP地址存在的主机名。PTR记录主要用于应用程序和系统用来确定与IP地址关联的名称,也可以说就是反向解析记录。 -
NS记录
记录发布域的域名服务器名称,就是指定到这台DNS服务器的解析要求由哪台服务器来进行处理。其他DNS服务器使用它来查找域的权威域名服务器。 -
MX记录
记录允许DNS客户端查找该域的邮件服务器,就是指定使用该域名的邮件地址适用的邮件服务器域名或IP地址。
域名的查询原理
查询路径:递归和迭代
当客户机需要访问互联网上的某台有域名的服务器时,就会向DNS询问此台服务器的IP地址,然后根据IP地址开始访问。
查询路径指的是一组查询,从客户机的初始问题开始,到客户机收到答案结束。它可以像客户机询问服务器并直接接受答案一样简单。但是,查询路径也可能很复杂,在不能直接接受答案时,就需要多个服务器协同工作跟踪答案。
客户端提出问题时,它无法使用其他域名服务器提供的转介来自行跟踪答案,必须依赖一个成熟的DNS服务来完成,帮助客户机调用其他域名服务器来寻找答案。
这个过程其实就是递归查询:
递归是指在找到带有答案的域名服务器之前,反复向网络中的域名服务器询问问题并跟踪引用的过程。可以简单概述为“我想知道这个问题的答案,如果你不知道答案,请询问其他人,直到找到答案,最后告诉我”
提供递归的域名服务器接受递归查询,并通过在后台执行迭代查询来跟踪答案,作为处理递归查询的机构,递归域名服务器随着时间的推移建立了丰富的答案缓存,因此他们也被称为缓存域名服务器。
下面是查询路径发生方式的分解:
1.客户端查询配置好的DNS服务器
2.DNS服务检查内部缓存,返回客户端答案。如果找不到问题的答案,那么DNS服务就会充当递归域名服务器,检查其“根”提示文件(root hint file),将查询发送到文件中列出的13个根域名服务器之一
3.根域名服务器不包含回答问题的特定记录,但是它知道TLD服务器在哪里,比如.com的定级域名服务器的位置。它以NSRRSET的形式为com名称服务器发送引用,并为这些名称服务器发送A记录。这些匹配的A记录称为粘合记录。
4.递归服务器缓存来自根名称服务器的响应,并向它为www.example.com提供的其中一个com服务器查询。
5.com域名服务不包含www.example.com,但有人注册了example.com的一级域名,并向com服务器提供其域名服务的服务器信息。com服务器发送对example.com的NS和A记录的引用。
6.递归服务器缓存来自com的记录,并查询引用中提供的example.com名称服务器之一。
7.example.com域名服务器从权威域example.com返回答案。
8.递归名称服务器(即:客户端配置的DNS服务器)缓存example.com名称服务器返回的答案,并将响应发送到客户端。
值得一提的是,这时的DNS缓存了www.example.com的信息,在一段时间内,任何客户端如果问到它www.example.com的问题时,它会直接回复。
一个查询示例
树状结构的意义在于,只有上级域名,才知道下一级域名的 IP 地址,需要逐级查询。
每一级域名都有自己的 DNS 服务器,存放下级域名的 IP 地址。
所以,如果想要查询二级域名 es6.ruanyifeng.com
的 IP 地址,需要三个步骤。
第一步,查询根域名服务器,获得顶级域名服务器
.com
(又称 TLD 服务器)的 IP 地址。第二步,查询 TLD 服务器
.com
,获得一级域名服务器ruanyifeng.com
的 IP 地址。第三步,查询一级域名服务器
ruanyifeng.com
,获得二级域名es6
的 IP 地址。
下面依次演示这三个步骤。
第一步:根域名服务器查询,使用命令:
$ dig @192.33.4.12 es6.ruanyifeng.com
我们选择根服务器地址为192.33.4.12
,向它发出查询,询问es6.ruanyifeng.com
的 TLD 服务器的 IP 地址。
dig 命令的输出结果如下。
因为它给不了 es6.ruanyifeng.com
的 IP 地址,所以输出结果中没有 ANSWER SECTION,只有一个 AUTHORITY SECTION,给出了com.
的13台 TLD 服务器的域名。
下面还有一个 ADDITIONAL SECTION,给出了这13台 TLD 服务器的 IP 地址(包含 IPv4 和 IPv6 两个地址)。
第二步 查询TLD 服务器
有了 TLD 服务器的 IP 地址以后,选择其中一台接着查询,输入命令:
$ dig @192.41.162.30 es6.ruanyifeng.com
命令中,192.41.162.30 是随便选的一台 .com 的 TLD 服务器,我们向它询问 es6.ruanyifeng.com
的 IP 地址。
返回结果如下。
它依然没有 ANSWER SECTION 的部分,只有 AUTHORITY SECTION,给出了一级域名 ruanyifeng.com 的两台 DNS 服务器。
下面的 ADDITIONAL SECTION 就是这两台 DNS 服务器对应的 IP 地址。
第三步,再向一级域名的 DNS 服务器查询二级域名的 IP 地址。输入命令
$ dig @172.64.32.123 es6.ruanyifeng.com
返回结果如下。
这次终于有了 ANSWER SECTION,得到了最终的二级域名的 IP 地址为:104.198.14.52
至此,三个步骤的 DNS 查询全部完成。
DNS服务可以分成四种类型
- 根域名服务器 (Root Name Server)
- TLD 服务器 (TLD Name Server)
- 权威域名服务器 (Authoritative Name Server)
- 递归域名服务器 (DNS Resolver)
他们的关系如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kDTLDze7-1685406900260)(/imgs/2023-05-23/mvDZf0bLaFTdFo5F.png)]
常见的几种DNS安全威胁
DDoS攻击
放大
放大攻击是一种技术,在这种技术中,小查询可以触发大响应。在没有对区域传送保护到仅受信任的源时,查询TXT记录或者区域传输,通过将需要长响应的短请求充斥到服务器中,会造成DNS服务过载,使DNS忙于处理这些伪造请求,以至于么有时间响应合法的请求。下面是一个简单的例子:
如果用户对“isc.org/ANY”进行DNS查询,查询长度为44字节,响应长度为4077字节,放大了93倍。
反射
使DNS成为欺骗性DDoS的更大目标的原因是反射
反射攻击发送的查询看起来像是来自攻击的受害者。响应(通常是一个大的、放大的响应)被发送给从未询问过的受害者,响应通信量可能会淹没受害者的网络。
在反射攻击中,攻击者不使用实际的IP地址,而使用伪造的源IP地址(目标,即受害者IP)向递归名称服务器发送查询,递归服务器执行任务后,将从权威名称服务器检索查询的答案发送给受害者,致使大量占用网络资源。
组合攻击
利用放大和反射技术的结合,导致大量负载,不仅消耗受害者的资源,还消耗递归名称服务器的资源。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-newJmtb5-1685406900262)(/imgs/2023-05-23/cwYlNXJ9UJmOGpM6.png)]
缓存中毒
DNS缓存中毒会使用虚假数据(例如流氓地址)破坏DNS服务器缓存,返回客户端虚假的IP地址,指向伪造的与原网站相似的假网站,并通过Web服务向客户端发送恶意软件、病毒或木马等,进行某些违法操作和行为。
恶意软件与过滤
一般通过Web服务器和邮件服务器分发。
一旦它感染了计算机,就可以将敏感数据从你的网络中盗取出来,造成数据泄露(data exfitration),因为是利用DNS完成,所以数据过滤也称为DNS隧道(DNS tunneling)。
原理是利用客户端执行DNS查询的功能,让客户端将数据分解为查询大小的块,伪装为DNS查询发送到恶意DNS服务器,达到逃避安全监测的目的,最后攻击者可以解包这些查询并重建数据。
DNS安全解决方案
DNS服务器安全解决 方案主要有:
- 响应速率限制(RRL)。通过限制客户端限制时间内的请求次数,避免Ddos攻击
- DNS安全扩展(DNSSEC)。在权威域服务器和递归服务器上进行部署,增加额外的安全信息验证机制。除了阻止缓存中毒和其他基于DNS的攻击外,还支持其他安全功能,如发布反垃圾邮件信息,如SPF(发件人策略框架)或DKIM(域密匙标识邮件)等。
- QNAME触发器。对查询的NAME字段进行操作,通配符格式可以阻止站点和所有子域。
- IP触发器。与DNS响应中资源记录的RDATA字段中的IPV4或IPV6地址匹配。对已知有害的IP地址阻止。
- 客户端IP地址触发器。与发起查询的客户端源IP地址匹配,用于阻止已知受到危害的主机时候非常有效。
- NSDNAME触发器。与递归期间的权威名称服务器的名称匹配,目标是真个DNS名称服务器,影响名称服务器提供服务的所有域,使用是必须及其小心,并且仅当知道整个名称服务器是恶意的才能使用此触发器。
- NSIP触发器。与IPV4记录中IP地址和对应于与域关联的名称服务器(粘合记录)的IPV6 AAAA记录中的IP地址匹配。它根据NSDNAME策略记录检查这些记录,NSDNAME策略记录可以防止具有多个或者更改名称的名称服务器。可以阻止名称服务器及其服务的所有域名。
参考
1.DNS 查询原理详解 - 阮一峰的网络日志 (ruanyifeng.com)
2.(3条消息) DNS与安全简述(未完成)_dns安全-CSDN博客