DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录 专题

  1. 云栖社区>
  2. 博客>
  3. 正文

DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录 专题

developerguy 2014-07-08 13:31:00 浏览1107
展开阅读全文

首先要做的就是配置域名的MX 记录啦:

先添加一条记录:

mail.abc.com 指向 你的服务器IP!

然后添加域名的MX 记录,指向mail.abc.com A 记录( 即域名MX 记录的值为mail.abc.com).

OK ,域名的配置就完成啦!

域名的A记录和MX记录的解析过程是彼此独立的


A (Address) records, which associate a domain name (example.com) with the IP address of the home page for the domain (192.0.2.3)
Mail server (MX) records
CNAME records, which reroute queries for one domain name (www.example1.com) to another domain name (example2.com)
Other A records, CNAME records, or other supported DNS record types. For a list of supported record types, see Supported DNS Resource Record Types.

 


1、什么是域名解析?
域名解析就是国际域名或者国内域名以及中文域名等域名申请后做的到IP地址的转换过程。IP地址是网路上标识您站点的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址。域名的解析工作由DNS服务器完成。

2、什么是A记录?
A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设置您域名的二级域名。

3、什么是CNAME记录?
即:别名记录。这种记录允许您将多个名字映射到另外一个域名。通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为“host.mydomain.com”(A记录)。它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL。这两个别名的全称就 http://www.mydomain.com/和“mail.mydomain.com”。实际上他们都指向 “host.mydomain.com”。

4、使用A记录和CNAME进行域名解析的区别
A记录就是把一个域名解析到一个IP地址(Address,特制数字IP地址),
CNAME记录就是把域名解析到另外一个域名
其功能是差不多,CNAME将几个主机名指向一个别名,其实跟指向IP地址是一样的,因为这个别名也要做一个A记录的。
但是使用CNAME记录可以很方便地变更IP地址。如果一台服务器有100个网站,他们都做了别名,该台服务器变更IP时,只需要变更别名的A记录就可以了。

5、使用A记录和CNAME哪个好?
域名解析CNAME记录A记录哪一种比较好?如果论对网站的影响,就没有多大区别。但是:CNAME有一个好处就是稳定,就好像一个IP与一个域名的区别。
服务商从方便维护的角度,一般也建议用户使用CNAME记录绑定域名的。如果主机使用了双线IP,显然使用CNAME也要方便一些。

A记录也有一些好处,例如可以在输入域名时不用输入WWW.来访问网站哦!从SEO优化角度来看,一些搜索引擎如alex或一些搜索查询工具网站等等则默认是自动去掉WWW.来辨别网站,CNAME记录是必须有如:WWW(别名)前缀的域名,有时候会遇到这样的麻烦,前缀去掉了默认网站无法访问。

有人认为,在SEO优化网站的时候,由于搜索引擎找不到去掉WWW.的域名时,对网站权重也会有些影响。因为有些网民客户也是不喜欢多写三个W来访问网站的,网站无法访问有少量网民客户会放弃继续尝试加WWW.访问域名了,因此网站访问浏览量也会减少一些。

也有人认为同一个域名加WWW.和不加WWW.访问网站也会使网站权重分散,这也是个问题。但是可以使用301跳转把不加WWW.跳转到加WWW.的域名,问题就解决了。

http://www.cnblogs.com/itcomputer/p/7169532.html

 

DNS修改和域名解析的含义完全不同: 

1、 DNS 修改(更改默认的DNS服务器设置)是指域名解析服务器(Domain Name System)的修改。 

如果您自己有独立 DNS 服务器,想通过此 DNS 解析已注册成功的域名,您可选择 DNS 修改业务(注:要改 DNS 的域名必须是在注册商注册或已成功转入至注册商的域名)。请您登陆域名管理区-点击相应域名-DNS修改处修改您的域名DNS信息 

2、 域名解析:域名与 IP 地址之间是一一对应的,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器(DNS)来完成。

https://help.aliyun.com/KnowledgeDetail.htm?spm=5176.2020520129.113.4.13e1000e06yuIP&knowledgeId=39860

 

域名  如在浏览器地址栏输入的 www.net.cn,www.wanwang.com 等我们称之为域名,域名即网站名称。如果说互联网的本质是连接一切,域名则为“一切”提供了身份标识功能,而 IP 为“一切”提供了寻址功能。域名和 IP 的关系可类比每个人的姓名与住址。

根域、顶级域、二级域、子域   域名采用层次化的方式进行组织,每一个点代表一个层级。一个域名完整的格 www.wanwang.com. 最末尾的点代表根域,常常省略;.com 即顶级域(TLD);wanwang.com 即二级域。依次类推,还有三级域、四级域等等。子域是一个相对的概念,wanwang.com 是 .com 的子域,www.wanwang.com 是 wanwang.com 的子域。

域名系统  即 DNS(Domain Name System)。DNS 主要解决两方面的问题:域名本身的增删改查以及域名到 IP 如何映射。

正向解析  查找域名对应 IP 的过程。

反向解析  查找 IP 对应域名的过程。

解析器  即 resolver,处于 DNS 客户端的一套系统,用于实现正向解析或者反向解析。

权威 DNS  处于 DNS 服务端的一套系统,该系统保存了相应域名的权威信息。权威 DNS 即通俗上“这个域名我说了算”的服务器。

递归 DNS  又叫 local dns。递归 DNS 可以理解为是一种功能复杂些的 resolver,其核心功能一个是缓存、一个是递归查询。收到域名查询请求后其首先看本地缓存是否有记录,如果没有则一级一级的查询根、顶级域、二级域……直到获取到结果然后返回给用户。日常上网中运营商分配的DNS即这里所说的递归 DNS。

转发 DNS  转发 DNS 是一种特殊的递归。如果本地的缓存记录中没有相应域名结果时,其将查询请求转发给另外一台 DNS 服务器,由另外一台 DNS 服务器来完成查询请求。

公共 DNS  公共 DNS 属于递归 DNS。其典型特征为对外一个 IP,为所有用户提供公共的递归查询服务。

https://help.aliyun.com/KnowledgeDetail.htm?spm=5176.2020520129.113.3.13e1000e06yuIP&knowledgeId=39861

 

 

 

 

 

 

时间2015年的某个周六凌晨5点,公司官方的QQ群有用户反馈官网打不开了,但有的用户反馈可以打开,客服爬起来自己用电脑试了一下没有问题,就给客户反馈说,可能是自己网络的问题,请过会在试试。早点8点,越来越多的用户反馈官网无法打开,并且有部分用户开发反馈app也打不开了,客服打电话叫起了还在梦乡中的我。

 

分析定位

被客服叫起来之后,一脸懵逼,不知道什么情况,给客服回复,知道了,立刻排查,待会有消息及时沟通。用凉水洗了一把脸清醒了一下,立刻根据经验回忆这两天生产投产的情况:上线了XX模块,不影响、修复了XXbug,应该也不影响、刚给服务器配置了https,看起来好像有点关系,但是app暂时没有投产https,怎么也出现问题,排除之。打开电脑核查了最近的投产记录应该都不至于发生这么严重的问题,随怀疑是不是网络方面有问题,立刻打电话叫起来运维经理以及相关人等一起排查。

一边让网络和运维排除问题,一边再次核查了web服务器、数据库服务器、业务日志、数据库日志,以及其它的一些监控数据,各项皆正常。试着在本机ping了一下域名确实不通,更加怀疑是网络问题,尝试这直接使用外网访问官,可以打开没有问题,可以基本确认服务没有问题,但运维部反馈网络设备什么都正常,肯定是你们投产代码出问题了,各方硬着头皮继续在排查。

9点,群里开始有大规模的用户反馈官网和app都打不开了,更有部分用户煽动,XXX公司跑出了(15年很多p2p公司跑路,导致用户都成了惊弓之鸟,稍微有问题便害怕公司跑路,个个都锻炼成了监控高手,天天看,实时刷,凌晨起来尿尿也都顺便看一下app上的今日收益),客服400热线基本被打爆了。一边继续排查问题,一边上报此问题给总监、公司各高管,给客服建议,给用户解释,IDC机房网络抖动,技术正在紧急解决,资金和数据都没有任何影响,稍安勿躁。

10点,开发和运维反复的检查后,开始怀疑dns解析有问题,但具体是什么问题还不清楚,CTO决定:1、大家都打车往公司走,来公司集体解决 2、在各QQ群、微信群给用户群发解释xxx问题,安抚客户。在车上的时候重新梳理了一下用户的整个访问流程,如下图:

到公司后,根据这个思路大家在一起验证了一下,通过外网IP和内网IP访问公司所有服务都正常,但是通过域名访问不行,另外监控服务器、防火墙、网络设备日志都正常,因此断定是DNS解析出现问题。

 

攻坚问题

既然确实是DNS解析问题,那么问题又来了?为什么DNS解析会出现问题?如何去解决这个问题?一边给万网提工单,我们也自己测试一下电信、移动、联通在不同的网络运营商下面的访问情况,发现只有在联通网络的环境下DNS解析不了。根据客服得到的反馈也验证了这个情况,电信和移动用户反馈很少,联通用户反馈最多。于是我们又开始给联通打电话,刚开始联通不受理我们的这个请求,于是又开始以用户的身份打电话给联通公司让立刻解决不能上网的问题。

于是就开始了万网和联通的扯皮大战,万网说从他们那边查看DNS解析都正常,一起指标都正常,我们又给联通打电话联通说我们已经知道了,待会由专业的人给我们回复,过了一会联通的网络工程师回复说,像这种情况一般都是域名解析的问题。早上10:30到公司开始短短的6各小时内,我们几个轮流给联通公司合计供打了近50、60通电话,给万网提了N个工单,接了N个电话。

期间领导也开始动用各种关系,联通内部的朋友、网络运维界的大拿帮忙来定位解决,我们也尝试了很多的办法,比如,使用ipconfig/flushdns命令清除本机的DNS缓存、在万网的官网把DNS解析重新更新一边、删除在重新添加等等,也不是完全没有收获。我们一直想找一个可以测试各个地方、运营商网络的办法,终于在各方推荐和搜索的情况下找了17ce 和 360奇云测两个网站,感觉非常实用,在以后的网络定位中,成了我必备使用的工具,可以非常方便的监控各个运营商、各个地区网站的访问是否通不通、访问的速度快不快等问题.

http://www.17ce.com/

http://ce.cloud.360.cn/task

我们也发现,公司的其它域名也都访问正常,就是官网的这个域名和相关的子域名不通。期间很多人都问了一个问题就是你们的域名有没有忘了缴费,刚开始大家也都问了运维这边说是没有这个问题,直到中午12:30的时候在我们再三的追问下才说8点多的时候登录上万网的时候显示这个域名是欠费状态,但是他已经立刻把费用补了上去了。哎呀差点把我们气死,问了不是域名到期有提示的吗?才知道因为上一个运维经理走后,他们没有及时的更新万网的电话和邮箱导致提示邮件和短信也没有收到。

通过和万网、联通公司、领导的相关朋友沟通以及我们的测试观察,初步明白了这个事情的原因:域名忘记缴费导致万网的DNS解析被停止,用户本机或者DNS服务器有缓存,所以部分用户可以访问部分用户不能访问;缴费过后万网的DNS已经进行了更新和推送,但是DNS解析有很多的层级需要一级一级的往下面发送更新,有的层级并没有更新到,导致部分没有更新到的DNS服务商下面的用户不能访问官网。

和万网进行了沟通,问最延迟的情况所有的DNS更新到最新的时间,回答是48小时内肯定都会好的,但是我们等不起呀,随着时间的推移越来越多的用户发现问题,QQ群、微信群已经沸腾,董事长也开始关注次问题,有的客户直接在群里面说,你们的技术太不给力了(像这种还是委婉的,有的直接打电话骂人)...

 

临时解决方案

不断的通过17ce测试发现,大部分地区的网络都已经恢复,就剩北京联通和部分地区联通网络环境下不通,也说明了这几个地区下的DNS解析记录没有被更新。那么既然我们在上面已经定位出了问题,又了解是什么原因,就想着试着换个DNS解析服务器会不会好一点呢,于是我们把本地的DNS地址换成8.8.8.8(谷歌的DNS服务解析)发现好了!于是赶紧先写解决手册发给着急的客户来使用。

官网的用户可以通过更改DNS来解决访问的问题,APP怎么办呢?没有办法我们也不能等,直接找开发人员把服务端调用的地址由域名暂时先改为外网的IP地址打一个版本供用户临时使用。安卓还比较好办,直接让用户下载安装使用还好,但是IOS那时候的审核最少都需要一周黄花菜都凉了。其实iPhone手机可以单独设置DNS的,我们进行了设置和测试后发现也可以实现,于是马上更新到手册中发送给客服发送到群里面给用户使用。

点击下载当时写的DNS更新手册

有人说直接让用户使用外网就行了吗,使用外网首页打开到是没有问题,但是各系统之间调用,相关配置文件里面写的也都是域名的地址,如果硬改的话可能会引发另外的问题。第一天搞完就10点多了,中间就4点吃了一顿饭,打了N个电话大家都非常累,于是当天就先这样了,第二天大家一早到公司继续跟进。

第二天到公司经过17ce测试发现所有的节点都已经通了就剩北京联通的两个接点没响应,但是北京是我们的大本营,绝大部分的用户都是北京的,继续和万网、联通沟通看怎么能彻底的解决这个问题,另一方面做好最坏的打算,如果一直不通怎么办。在生产环境中梳理所有使用域名的配置文件,做好随时可以直接更新为外网地址而不能影响服务,app完整的重新做一个版本,做好随时可以投产让用户强制升级到外网直连的版本。

到第二天晚上10点的时候,北京联通的这两个节点还是不通,和领导进行了商议如果到周一早上8点来的时候这两个网络还是不能通的话,就上线改造好的系统和APP强制升级(因为当时周末还没有标的,周内才有发标计划)。第三天早上起来的第一件事情就是拿起手机,查看自己的联通网络是不是可以登录上官网,结果通了!皆大欢喜。

俗话说真理是愈辩愈明,经过了这次事故,也彻底的让我了解了DNS解析的整个过程。

 

DNS 解析流程

DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。俗话说,DNS就是将网址转化为对外的IP地址。

dns从用户访问到响应的整个流程

  • 第一步:浏览器将会检查缓存中有没有这个域名对应的解析过的IP地址,如果有该解析过程将会结束。浏览器缓存域名也是有限制的,包括缓存的时间、大小,可以通过TTL属性来设置。
  • 第二步:如果用户的浏览器中缓存中没有,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
  • 第三步:如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
  • 第四步:如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
  • 第五步:如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
  • 第六步:如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找域名域服务器,重复上面的动作,进行查询,直至找到域名对应的主机。
  • 第七步:如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

 

这个事情发生后给了我们很大的教训:
第一、流程管理有漏洞,离职交接不到位;
第二、危机处理不成熟,影响公司声誉;
第三、监控机制不完善,像外网不通的这种问题,应该提前设置监控措施。

有时候非常的严重的问题,就是你常常忽略的小不点

http://www.cnblogs.com/ityouknow/p/6380603.html

 

 

 

 

http://www.cnblogs.com/LittleHann/p/3828927.html

相关学习资料

复制代码
http://baike.baidu.com/link?url=77B3BYIuVsB3MpK1nOQXI-JbS-AP5MvREzSnnedU7F9_G8l_Kvbkt_O2gKqFw7vm
http://www.rfc-editor.org/rfc/rfc1035.txt
http://www.rfc-editor.org/rfc/rfc3596.txt
http://www.rfc-editor.org/rfc/rfc2782.txt
http://www.rfc-editor.org/rfc/rfc3403.txt
http://zhumeng8337797.blog.163.com/blog/static/10076891420110694312990/
tcp-ip详解卷1:协议.pdf
http://wenku.baidu.com/link?url=gIwRwFkKbwB-x45_xVShR10VII_r3nchf0wYTPwelAu5CrS7T5N3zxoBtImYD8i3-mwJhgi5ix-XWMcXkI0uNg6gJCgCihZkRwVydqyFWF3
ftp://ftp.rs.internic.net/domain/
http://www.laojia1987.cn/show.asp?id=756
http://technet.microsoft.com/zh-cn/cc779148(WS.10).aspx
http://blog.csdn.net/lastsweetop/article/details/5692312
http://blog.sina.com.cn/s/blog_6441e0640100scj2.html
http://zhumeng8337797.blog.163.com/blog/static/100768914201082910759244/
复制代码

 

目录

1. DNS简介
2. DNS查询方式
3. 和DNS有关的安全风险

 

1. DNS简介 

DNS是指:域名系统(Domain Name System)。在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析系统来完成,DNS就是进行域名解析的系统。

DNS协议运行在UDP协议之上,使用端口号53。在传输层TCP提供端到端可靠的服务,在UDP端提供尽力交付的服务。其控制端口作用于UDP端口53。

0x1: DNS记录类型

DNS系统中,常见的资源记录类型有:

复制代码
1. 主机记录(A记录)
RFC 1035定义,A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。过A记录,大家可以设置自己的不同域名转到不同的IP上去,如:
    1) www.dns.la 转到IP 116.255.202.1
    2) web.dns.la 转到IP 116.255.202.11
    3) mail.dns.la 转到IP 116.255.202.111

2. 别名记录(CNAME记录)
RFC 1035定义,CNAME记录用于将某个别名指向到某个A记录上,这样就不需要再为某个新名字另外创建一条新的A记录。对于CNAME的原理要注意和URL转发进行区分:
    1) url转发可以转发到某一个目录下,甚至某一个文件上
    2) 而cname是不可以,这就是url转发和cname的主要区别所在

3. MX记录(Mail Exchange)
邮件交换记录,用户可以将该域名下的邮件服务器指向到自己的mail server上,然后即可自行操作控制所有的邮箱设置。要注意的是邮箱DNS解析和HTTP DNS解析是独立的,如果你设置A记录
是指向123.12.123.123,而MX记录你设置是指向222.22.222.222,那么你的DNS服务器接收到别人的邮件路 由请求时就将会将它的请求解释到222.22.222.222上去!而别人访问你的网页
的时候仍然是访问123.12.123.123。 4. NS(Name Server) 域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析,可以把一个域名的不同二级域名分别指向到不同的DNS系统来解析 5. IPv6主机语录(AAAA记录) RFC 3596定义,与A记录对应,用于将特定的主机名映射到一个主机的IPv6地址。 6. 服务位置记录(SRV记录) RFC 2782定义,用于定义提供特定服务的服务器的位置,如主机(hostname),端口(port number)等。 7. NAPTR记录 RFC 3403定义,它提供了正则表达式方式去映射一个域名。NAPTR记录非常著名的一个应用是用于ENUM查询。
复制代码

0x2: 域名系统分类

DNS的名字空间和Unix的文件系统相似,也具有层次结构。每个结点有 一个至多63个字符长的标识。这颗树的树根是没有任何标识的特殊结点(即全球根DNS)。命名标识中一律不区分大写和小写。命名树上任何一个结点的域名就 是将从该结点到最高层的域名串连起来,中间使用一个点"."分隔这些域名,域名树中的每个结点必须有一个唯一的域名,但域名树中的不同结点可使用相同的标 识。
以点"."结尾的域名称为绝对域名或完全合格的域名FQDN(Full Qualified Domain Name),例如sun.tuc.noao.edu.  
如果一个域名不以点结尾,则认为该域名是不完全的。

复制代码
DNS根域名服务器
全球共有13台根"逻辑域名服务器"。这13台逻辑根域名服务器中名字分别为"A"至"M",真实的根服务器在2014年1月25日的数据为386台,分布于全球各大洲。
之所以是13台,这要从DNS协议(域名解析协议)说起。DNS协议使用了端口上的UDP和TCP协议,UDP通常用于查询和响应,TCP用于主服务器和从服务器之间的传送。由于在所有UDP查询和响应中
能保证正常工作的最大长度是512字节,512字节限制了根服务器的数量和名字。要让所有的根服务器数据能包含在一个512字节的UDP包中,根服务器只能限制在13个,而且每个服务器要使用字
母表中的单个字母命名,这也是根服务器是从A~M命名的原因。 在根域名服务器中虽然没有每个域名的具体信息,但储存了负责每个域(如COM、NET、ORG等)的解析的域名服务器的地址信息,如同通过北京电信你问不到广州市某单位的电话号码,但是北京电
信可以告诉你去查020114。世界上所有互联网访问者的浏览器的将域名转化为IP地址的请求(浏览器必须知道数字化的IP地址才能访问网站)理论上都要经过根服务器的指引后去该域名的权威域
名服务器(authoritative name server),当然现实中提供接入服务的ISP的"缓存域名服务器"上可能已经有了这个对应关系(域名到IP地址)的缓存。 1. 顶级域名 顶级域名被分为三个部分 1) arpa是一个用作地址到名字转换的特殊域(即反过来用IP来解析域名) 2) 7个3字符长的普通域。有些书也将这些域称为组织域 2.1) com: 商业组织 2.2) edu: 教育机构 2.3) gov: 政府部门 2.4) int: 国际组织 2.5) mil: 军事网点 2.6) net: 网络 2.7) org: 其他组织 3) 所有2字符长的域均是基于ISO3166中定义的国家代码,这些域被称为国家域,或地理域。,例如 3.1) hk 3.2) us 2. 二级域名 一个独立管理的DNS子树称为一个区域(zone)。一个常见的区域是一个二级域,如noao.edu。许多二级域将它们的区域划分成更小的区域。例如,大学可能根据不同的系来划分区域,公司可能
根据不同的部门来划分区域。
复制代码

0x3: DNS协议格式

复制代码
1. 标识
一个4字节16bit的字段,Transaction ID,表明当前DNS请求的序号
2. 标志
16bit的标志字段
    1) QR
    1bit字段
        1.1) 0表示查询报文
        1.2) 1表示响应报文。
    2) opcode
    4bit字段
        2.1) 通常值为0(标准查询)
        2.2) 其他值为1(反向查询)
        2.3) 2(服务器状态请求)
    3) A 
    1bit标志,表示"授权回答(authoritative answer)"。该名字服务器是授权于该域的。
    4) TC
    1bit字段,表示"可截断的(truncated)"。使用UDP时,它表示当应答的总长度超过512字节时,只返回前512个字节
    5) RD
    1bit字段,表示"期望递归(recursion desired)"。该比特能在一个查询中设置,并在响应中返回。这个标志告诉名字服务器必须处理这个查询,也称为一个递归查询。如果该位为0,且
被请求的名字服务器没有一个授权回答,它就返回一个能解答该查询的其他名字服务器列表,这称为迭代查询。 6) RA 1bit字段,表示"可用递归"。如果名字服务器支持递归查询,则在响应中将该比特设置为1。大多数名字服务器都提供递归查询,除了某些根服务器 7) 随后3bit必须为0 8) rcode 4bit的返回码字段。通常的值为: 8.1) 0(没有差错) 8.2) 3(名字差错) 名字差错只有从一个授权名字服务器上返回,它表示在查询中制定的域名不存在。 3. 问题数 查询问题的数量,对于请求报文,通常为1 4. 资源记录数 返回的资源记录数 5. 授权资源记录数 返回的授权资源记录数 6. 额外资源记录数 返回的额外资源记录数 7. 查询问题 注意,一个DNS数据报中可能会有多个查询问题,这也是为什么在之前的"问题数"等字段会有大于1数字的原因。每个"查询问题格式"都相同,如下: 1) 查询名 查询名是要查找的名字,它是一个或多个字符串的序列。每个字符串以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为0结束,字符串之间以"."分隔,例如
www.baidu.com中www、baidu、com都是字符串,长度为0的字符串是根标识符。计数字节的值必须是0~63的数,因为单个字符串的最大长度仅为63 2) 查询类型 2.1) A: IP地址 2.2) NS: 名字服务器 2.3) CNAME: 规范名称 2.4) PTR: 指针记录,即IP到域名的反向查询 2.5) HINFO: 主机信息 2.6) MX: 邮件交换记录 2.7) AXFR: 区域传送请求 2.8) */ANY: 对所有记录的请求 最常用的查询类型是A类型,表示期望获得查询名的IP地址。一个PTR查询则请求获得一个IP地址对应的域名。这是一个指针查询 3) 查询类 查询类通常是1,指互联网地址(某些站点也支持其他非IP地址) 8. 回答(只在DNS响应数据报中存在) 1) 域名 客户端请求解析的域名,和请求报文中的问题中的查询名一样 2) 类型 2.1) A: IP地址 2.2) NS: 名字服务器 2.3) CNAME: 规范名称 2.4) PTR: 指针记录,即IP到域名的反向查询 2.5) HINFO: 主机信息 2.6) MX: 邮件交换记录 2.7) AXFR: 区域传送请求 2.8) */ANY: 对所有记录的请求 3) 类 通常是1,指互联网地址(某些站点也支持其他非IP地址) 4) 生存时间 客户程序保留该资源记录的秒数。资源记录通常的生存时间值为2天。 5) 资源数据长度 资源数据的数量。该数据的格式依赖于类型字段的值 5.1) 对于类型1(A记录)资源数据是4字节的IP地址 5.2) 对于类型CNAME资源数据是域名字符串长度 9. 授权(只在DNS响应数据报中存在) 10. 额外信息(只在DNS响应数据报中存在)
复制代码

 

2. DNS查询方式

0x1: 递归查询和迭代查询的区别

复制代码
1.递归查询: 
一般客户机和首选DNS服务器(宽带连接是设置的默认DNS)之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终结
果后转交给客户机 2.迭代查询(反复查询): 一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求
复制代码

下图为一次完整的DNS查询过程,包括客户端和本地DNS的递归查询、以及本地DNS和上机DNS之间的迭代查询

复制代码
1. 网络客户端准备访问www.163.com这个域名,浏览器准备进行DNS解析以获取对应的IP
2. 网络客户端将DNS解析请求发送到"本地DNS服务器"后,就进行等待状态,因为对于网络客户端和本地DNS服务器来说它们是递归关系,本地DNS服务器最终一定会把结果返回给网络客户端
(IP、或者是不存在) 3. 本地DNS服务器接收到DNS解析请求后,开始和上机DNS服务之间进行迭代查询 1) 向全球根域名DNS服务器发送解析请求,根DNS根据请求中的顶级域名,返回该域名对应的顶级DNS服务器(.com)IP 2) 本地DNS服务器接着继续向".com"DNS服务器发送解析请求,".com"服务器查询自己的DNS缓存,返回.163.com域名服务器,要求本地DNS继续迭代查询 3) 本地DNS继续向".163.com"进行请求,并得到解析IP: 1.1.1.1 4. 本地DNS服务器将最终的解析结果返回给网络客户端,完成一次DNS解析
复制代码

0x2: DNS解析抓包实验过程

1. DNS普通查询

2. DNS查询响应

可以看到,www.baidu.com是一个CNAME地址,是百度为了用户好记而登记的域名

3. Zone Transfer(AXFR)请求

4. PTR域名反向查询

 

3. 和DNS有关的安全风险

DNS是互联网的一个基础设施,针对DNS的安全风险大致有如下几个:

复制代码
1. 防火墙不会限制对DNS的访问
这导致攻击者可能会借助DNS通道进行数据库带外信道注入、或者DNS隐藏隧道等攻击

2.DNS可以泄漏内部的网络拓朴结构
即DNS Zone Transfer攻击 

3.DNS的本身性能问题
安全的一个重要标志是可用性。对于DNS服务器而言这点尤其重要,在现实生活中经常定义攻击者入侵系统获取数据为一个安全问题,但是对于DNS服务器来说,遭到了拒绝服务攻击则是一件更严
重的问题。失去了DNS服务器的话,任何在internet网络上的人将不能够再使用域名找到你的服务器,不可想像让普通的网民们使用202.106.184.200来代替www.sina.com.cn使用。更严重的
是,没有了DNS的服务,所有的邮件发送都将失败,而你的内部网络将由于解析域名的失败而失去和外部网络的联系。 注册了一个域名以后,可以最大为你的域名设置6个DNS服务器名。 例如,microsoft.com公司的就为自己设置了五个DNS服务器来解析自己的域名: Name Servers: DNS4.CP.MSFT.NET 207.46.138.11 DNS5.CP.MSFT.NET 207.46.138.12 Z1.MSFT.AKADNS.COM 216.32.118.104 Z7.MSFT.AKADNS.COM 213.161.66.158 DNS1.TK.MSFT.NET 207.46.232.37 这样,即使这三个中的两个停止了工作,但是了,仍然可以有一个会对外提供服务,而对于广大的用户而言,当出现这种多个DNS服务器停止服务带来的唯一的影响就是查询域名的时候会延迟,因
为它需要一个一个的去查询,直到找到最后的一个为止。而上面这一个步骤也是你应付恶意攻击者对DNS服务器进行拒绝服务攻击的一个保护手段。
复制代码

0x1: DNS Zone Transfer

Zone Transfer漏洞可以被渗透测试人员用来进行内网信息搜集、拓朴获取等目的,是内网横向渗透、信息搜集的一个很重要的手段。

一个名字服务器(NS)负责一个或多个区域(zone)。一个区域的管理者必须为该区域提供一个主名字服务器(master)和至少一个辅助名字服务器(slave)。主、辅名字服务器必须是独立和冗余的,以便当某个名字服务器发生故障时不会影响该区域的名字服务。
主、辅名字服务器的主要区别在于主名字服务器从磁盘文件中调入该区域的所有信息,而辅名字服务器则从主服务器调入所有信息。我们将辅名字服务器从主服务器调入信息称为区域传送(zone transfer)

了解了DNS Zone Transfer的基本概念之后,我们来一起学习一下dig、nslookup这2个命令,看看我们都能利用Zone Transfer获得哪些信息

nslookup命令解释

在win上,nslookup会根据ipconfig连接后的默认DNS去找到所要使用的local DNS server
在linux上,nslookup会根据/etc/resolv.conf的内容去找到所要使用的local DNS server

复制代码
C:\Users\LittleHann>nslookup
默认服务器:  FJ-DNS.fz.fj.cn
Address:  218.85.157.99
> ?
命令:   (标识符以大写表示,[] 表示可选)
1. NAME            
打印有关使用默认DNS服务器(系统默认的DNS服务器)的主机/域NAME的信息,例如www.baidu.com 
2. set OPTION     
设置选项,OPTION可选项如下,[no]代表默认关闭
    1) all: 打印选项、当前服务器和主机
    2) [no]debug: 打印调试信息
    3) [no]d2: 打印详细的调试信息
    4) [no]defname: 将域名附加到每个查询
    5) [no]recurse: 询问查询的递归应答
    6) [no]search: 使用域搜索列表
    7) [no]vc: 始终使用虚拟电路
    8) domain=NAME: 将默认域名设置为 NAME
    9) srchlist=N1[/N2/.../N6]: 将域设置为 N1,并将搜索列表设置为 N1、N2 等
    10) root=NAME: 将根服务器设置为 NAME
    11) retry=X: 将重试次数设置为 X
    12) timeout=X: 将初始超时间隔设置为 X 秒
    13) type=X: 设置查询类型(如 A、AAAA、A+AAAA、ANY、CNAME、MX、NS、PTR、SOA 和 SRV)
set type=ptr
本来要由IP反查 domain name时, 在直接打IP就行了, 但如果已经下了type=any的话, 要由IP反查时就没那么方便了, 此时IP 4个数字要倒着写, 最后还要加上in-addr.arpa.
以查140.116.72.219 为例, 要输入的就是219.72.116.140.in-addr.arpa 14) querytype=X: 与类型相同 15) class=X: 设置查询类(如IN(Internet)和ANY) 16) [no]msxfr: 使用MS快速区域传送 17) ixfrver=X: 用于IXFR传送请求的当前版本 3. server NAME 将默认服务器设置为NAME(例如8.8.8.8),同时对NAME进行解析
很多情况下,我们的DNS查询并不会被发送到跟DNS服务器上,而是由DNS Cache服务器进行返回,为了获得最新的数据,我们需要手动去修改"默认本地DNS"从而获得最新的DNS数据 4. lserver NAME 将默认服务器设置为NAME,使用初始服务器 5. root 将当前默认服务器设置为根服务器 6. ls [opt] DOMAIN [> FILE] 列出DOMAIN中的地址(可选: 输出到文件 FILE)
这个命令是要求name server将其负责的zone内容show出来, 这个动作相当于name server的整份记录从server端传回给nslookup这个程序, 这种传回整个zone的动作叫作zone transfer 1) -a 列出规范名称和别名 2) -d 列出所有记录 3) -t TYPE 列出给定 RFC 记录类型 3.1) A 3.2) CNAME 3.3) MX 3.4) NS 3.5) PTR等的记录 7. view FILE 对 'ls' 输出文件排序,并使用 pg 查看 8. exit 退出程序
复制代码

dig命令解释

Dig是linux中的域名解析工具,Dig是domain information groper的缩写

复制代码
Usage:  dig [@global-server] [domain] [q-type] [q-class] {q-opt}
            {global-d-opt} host [@local-server] {local-d-opt}
            [ host [@local-server] {local-d-opt} [...]]
1. domain
要查询的域名
2. q-class  
    1) IN(默认)
    2) HS
    3) CH
3. q-type
    1) A(默认)
    2) ANY
    3) MX
    4) NS
    5) SOA
    6) HINFO
    7) AXFR
    8) TXT
4. q-opt
    1) -x dot-notation     (shortcut for reverse lookups)
    2) -i                  (use IP6.INT for IPv6 reverse lookups)
    3) -f filename         (batch mode)
    4) -b address[#port]   (bind to source address/port)
    5) -p port             (specify port number)
    6) -q name             (specify query name)
    7) -t type             (specify query type)
    8) -c class            (specify query class)
    9) -k keyfile          (specify tsig key file)
    10) -y [hmac:]name:key  (specify named base64 tsig key)
    11) -4                  (use IPv4 query transport only)
    12) -6                  (use IPv6 query transport only)
    13) -m                  (enable memory usage debugging)
5. d-opt    
格式为: +keyword[=value],keyword的可选值如下
    1) +[no]vc             (TCP mode)
    2) +[no]tcp            (TCP mode, alternate syntax)
    3) +time=###           (Set query timeout) [5]
    4) +tries=###          (Set number of UDP attempts) [3]
    5) +retry=###          (Set number of UDP retries) [2]
    6) +domain=###         (Set default domainname)
    7) +bufsize=###        (Set EDNS0 Max UDP packet size)
    8) +ndots=###          (Set NDOTS value)
    9) +edns=###           (Set EDNS version)
    10) +[no]search         (Set whether to use searchlist)
  给你的公众服务器提供清楚的统计信息 11) +[no]showsearch (Search with intermediate results) 12) +[no]defname (Ditto) 13) +[no]recurse (Recursive mode) 14) +[no]ignore (Don't revert to TCP for TC responses.) 15) +[no]fail (Don't try next server on SERVFAIL) 16) +[no]besteffort (Try to parse even illegal messages) 17) +[no]aaonly (Set AA flag in query (+[no]aaflag)) 18) +[no]adflag (Set AD flag in query) 19) +[no]cdflag (Set CD flag in query) 20) +[no]cl (Control display of class in records) 21) +[no]cmd (Control display of command line) 22) +[no]comments (Control display of comment lines) 23) +[no]question (Control display of question) 24) +[no]answer (Control display of answer)
  查询的结果 25) +[no]authority (Control display of authority)
  告诉我们哪个DNS服务器给我们提供权威的答案 26) +[no]additional (Control display of additional)
  包含了列出的权威DNS的IP地址 27) +[no]stats (Control display of statistics)
  输出包含了查询的统计数据 28) +[no]short (Disable everything except short form of answer) 29) +[no]ttlid (Control display of ttls in records) 30) +[no]all (Set or clear all display flags) 31) +[no]qr (Print question before sending) 32) +[no]nssearch (Search all authoritative nameservers) 33) +[no]identify (ID responders in short answers) 34) +[no]trace (Trace delegation down from root) 35) +[no]dnssec (Request DNSSEC records) 36) +[no]nsid (Request Name Server ID) 37) +[no]sigchase (Chase DNSSEC signatures) 38) +trusted-key=#### (Trusted Key when chasing DNSSEC sigs) 39) +[no]topdown (Do DNSSEC validation top down mode) 40) +[no]multiline (Print records in an expanded format) 6. global d-opts and servers (before host name) affect all queries. 7. local d-opts and servers (after host name) affect only that lookup. 1) -h: (print help and exit) 2) -v: (print version and exit)
复制代码

常用的dig命令

复制代码
1. 查找yahoo.com的A记录:
dig yahoo.com A +noall +answer
(注意:TTL的单位为秒s) 2. 查找yahoo.com MX记录的列表: dig yahoo.com MX +noall +answer 3. 查找yahoo.com的权威DNS: dig yahoo.com NS +noall +answer 4. 查询上面所有的记录: dig yahoo.com ANY +noall +answer 5. 在现在这种IPv4和IPV6混用的情况下,你也可以使用AAAA的选项查询主机的IPv6 AAAA记录: dig www.isc.org AAAA +short 6. 答案的精简查询 dig +nocmd www.baidu.com mx +noall +answer 7. 用-x的选项查找IP地址的主机名 dig -x 8.8.8.8 +short 8. 显式指定NS服务器 dig @ns1.google.com www.google.com 9. 查询大量的主机名 dig -f /path/to/host-list.txt 10. 找到最新的named.root文件 dig +nocmd . NS +noall +answer +additional 11. 跟踪DNS解析过程 dig gentoo.de +trace 可以在dig输出的头部分看到根DNS,然后找到负责解析所有*.de的DNS,最后找到gentoo.de的域名IP 12. 用dig查看zone数据传输 dig @server www.baidu.com AXFR 13. 用dig查看zone数据的增量传输 dig @server www.baidu.com IXFR=N 14. 用dig查看反向解析 dig -x 8.8.8.8 @server 15. 查找一个域的授权dns服务器 dig www.baidu.com +nssearch
复制代码

0x2: Anti-DNS Zone Transfer配置

正常情况下,在一个信任网域下,将DNS资料列出是没有问题的(即正常的主从服务器的Zone Transfer),但是若是能由外界进行任意查询,那将衍变为具有危险的行为,因此,对DNS服务器进行Zone Transfer安全配置是十分重要的。对于DNS的安全加固,大致可以从以下几个方面入手:

复制代码
1. 控制允许可以向DNS服务器提出查询请求的主机:
allow-query { myAddresses; trusted; };
如果你没有定义选项 allow-query ;那么Bind默认会允许所有的来访者都可以查询这个DNS服务器,相当于:
allow-query { any; };
 
2. 控制允许可以进行迭代解析或查询的主机列表:
allow-recursion { match-list; };
如果你没有定义选项 allow-recursion ; 那么Bind默认会允许所有可以访问DNS的来访者都可以进行迭代查询

3. 定义可以与主DNS服务器进行数据交流的辅助DNS服务器的ip地址,即限制zone transfer的访问
allow-transfer { match-list; };
允许这些match-list中的辅助DNS与主DNS服务器进行数据的交流与传送。
例如:我的主DNS服务器192.168.68.128;辅助DNS服务器192.168.68.2,允许它们进行数据交流:
allow-transfer { 192.168.68.2; };:
如果你没有定义选项 allow-transfer ;那么Bind默认会允许所有的辅助DNS服务器与主DNS服务器进行数据交流

4. 定义主DNS服务器的对客户的请求查询失败时的行为:
forwarders { match-list; };
forward first | only;
选项forwarders定义了当DNS服务器应答失败时,就将客户端的请求转发到match-list中的其他服务器;
选项forward 定义DNS服务的转发类型:first 是优先转发上述定义的DNS服务器;only是只会转发到上述定义的DNS服务器;
如果你没有定义选项 forwarders的选项 ;那么Bind默认不做任何转发动作。
  
复制代码

 

Copyright (c) 2014 LittleHann All rights reserved

网友评论

登录后评论
0/500
评论
developerguy
+ 关注