Linux之DNS服务器搭建及常见DNS攻击和防御



DNSDomain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53

 

 

主机名到IP地址的映射有两种方式:

1)静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用;

2)动态映射,建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,首先需要到DNS服务器查询主机所对应的IP地址。

 

域名结构

通常 Internet 主机域名的一般结构为:主机名.三级域名.二级域名.顶级域名。 Internet 的顶级域名由 Internet网络协会域名注册查询负责网络地址分配的委员会进行登记和管理,它还为 Internet的每一台主机分配唯一的 IP 地址。全世界现有三个大的网络信息中心: 位于美国的 Inter-NIC,负责美国及其他地区; 位于荷兰的RIPE-NIC,负责欧洲地区;位于日本的APNIC ,负责亚太地区

wKioL1fZDBSS8su8AAEvKjJKipw092.png


根域:DNS域名中使用时,规定由尾部句点(.)来指定名称位于根或者更高级别的域层次结构

顶级域:用来指示某个国家/地区或组织使用的名称的类型名称,如.com

二级域名:个人或组织在Internet上使用的注册名称,如qq.com

子域:已注册的二级域名派生的域名,通俗的讲就是网站名,如www.qq.com

主机名:通常情况下,DNS域名的最左侧的标识网络上的特定计算机,如h1.www.qq.com

 

常见的顶级域服务器

com

商业组织

edu

教育机构

Gov

政论组织

Mil

军事部门

net

网络机构

org

非盈利性组织

int

国际组织

Uk

美国

Fr

法国

au

澳大利亚

ca

加拿大

cn

中国

jp

日本

 

 

我国的顶级域名也只有cn

 

 

DNS的解析过程

第一步,查询本地host文件和缓存有没有这个记录,有就直接解析,没有就访问DNS服务器,如果DNS服务器上没这个域名或者域名不在你访问的DNS服务器管理区域内,那么DNS服务器就会向dot根域名服务器发递归查询,如果找到了记录了,DNS就会返回给client,并且把记录保存在自己缓存里,下次有client请求,他就会调用自己的缓存,直到这条记录的生存期结束,就会丢弃这条记录。

根域名服务器就13台域名服务器,他负责管理顶级域。顶级域负责管理二级域,我们现在申请的一般是2级域名-3级域名。

 

 

nslookup 这个工具详细来说一下解析步骤:

wKiom1fZDDLSjMNcAAAuHMoWFwU521.png

从上图我们可以看到:

          第一行Server是:DNS服务器的主机名--114.114.114.114

          第二行Address是: 它的IP地址--114.114.114.114#53

          下面的Name是:解析的URL--    www.baidu.com

会发现百度有一个cname=www.ashifen.com的别名

dig工具来跟踪一下(linux系统自带有)

 

 

Dig工具会在本地计算机做迭代,然后记录查询的过程。

wKioL1fZDFGysfGmAAAhHR2ll4o229.png


第一步是向我这台机器的ISPDNS获取到根域服务区的13IP和主机名

wKioL1fZDHySrH77AABrQJOtYtk761.png


第二步是向其中的一台根域服务器(Servername就是末行小括号里面的)发送www.baidu.com的查询请求,他返回了com.顶级域的服务器IP(未显示)和名称

wKiom1fZDJehooUEAACG1NhAKkY899.png



第三步,便向com.域的一台服务器192..5.5.241请求,www.baidu.com,他返回了baidu.com域的服务器IP(未显示)和名称,百度有四台顶级域的服务器

wKioL1fZDLDT-XBAAAA3tFMdPfU856.png



第四步呢,向百度的顶级域服务器(202.108.22.220)请求www.baidu.com,他发现这个www有个别名,而不是一台主机,别名是www.a.shifen.com

wKioL1fZDMzBxyRsAAA_2uZNL0w217.png



使用dig +trace  shifen.com,发现第三步时shifen.com这个顶级域的域名服务器和baidu.com这个域的域名服务器是同一台主机

wKiom1fZDPXjMLSSAAB76MLZH1o918.png



当拿到www.baidu.com的别名www.a.shifen.com的时候,我本来需要重新到com域查找shifen.com域的NS,但是因为这两个域在同一台NS上,所以直接向本机发起了。

 

Linux DNS服务介绍

后台进程:named

脚本:/etc/rc.d/init.d/named

使用端口:53tcpudp

配置文件:/var/named/chroot/etc/named.conf

相关路径:/var/named/

 

安装bind服务器

yum install bind* (先配置yum源,yum源之前的实验已经配置完成了)

vim  /etc/yum.repos.d/base.repo              
[RHEL6]      
name= base
baseurl=file:///mnt/cdrom        
enabled=1                  
gpgcheck=0     
保持退出


wKioL1fZDSPBTGJwAADCmnGVdHo310.png

BIND是一种开源的DNSDomain Name System)协议的实现,包含对域名的查询和响应所需的所有软件。它是互联网上最广泛使用的一种DNS服务器,BIND这个缩写来自于使用的第一个域,Berkeley Internet Name Domain

 

BIND软件包包括三个部分:

DNS服务器。这是一个叫做named的程序,代表name daemon的简写。它根据DNS协议标准的规定,响应收到的查询。   

DNS解析库(resolver library)。一个解析器是一个程序,通过发送请求到合适的服务器并且对服务器的响应做出合适的回应,来解析对一个域名的查询。一个解析库是程序组件的集合,可以在开发其它程序时使用,为这些程序提供域名解析的功能。

 

/etc/named.conf

named.confBIND使用的默认配置文件

在每一次named启动与挂起时都会被读取

一个简单的文本文件,其中记录的可以包括options(全局参数)、zone(区域定义)、access control lists(访问控制列表)等

wKiom1fZDUWgU_vVAACUGnODSvE123.png



常用的参数包括
directory:指定zone file的存放位置
forwarders:指定其上级域名服务器
allow-query:指定允许向其提交请求的客户
allow-transfer:指定允许复制zone数据的主机




根域

wKioL1fZDWrRhkfmAAAPYxKDOcE686.png


修改主配置文件/etc/named.conf
listen-on port 53 { 127.0.0.1; };
监听端口,修改成自己的IP地址,如果有多个IP,就写多个,也可以写any,每行要以;结束。
directory       "/var/named";
zone文件的存放目录,这里的/var/named 是相对目录,在chroot环境下/var/named目录下。
allow-query     { localhost; };
允许查询的client,我们修改成any


wKiom1fZDYqSVRnvAACCeHEDFYA342.png





区域配置(zone

zone 语句作用是定义DNS 区域,在此语句中可定义DNS 区域选项

zone区域设置,第一步,设置根区域

DNS服务器处理递归查询时,如果本地区域文件不能进行查询的解析,就会转到根DNS服务器查询,所以在主配置文件named.conf文件中还要定义根区域。 默认即可

wKiom1fZDbzSbujWAAAPGZuEWK8635.png

 

“.” 意思的根区域
IN 是internet记录
type是类型 根的类型是hint
file是根区域文件


 

 

 

指定正向解析的配置文件

修改DNS服务器的辅助区域配置文件/etc/named.rfc1912.zones

 //注销掉系统默认配置的zone信息所有行或者删除

 在文件的尾部增加以下内容  

wKiom1fZDdry9-m8AAAbASO4tqM273.png


配置正向解析zone文件

wKioL1fZDgGhlvSIAAAR5WSqPNI209.png

将范例复制到正向解析文件,-p可以将源文件的属性一起复制


wKiom1fZDgKDzIrNAAA64ZS1kds883.png

TTL是生存期,单位是秒 
$TTL是全局定义的 
第二行 SOA记录,@取代在/etc/named.conf中指定的域名。 
SOA段中的数字,分别为:序列号、刷新、重试、过期、生存期
序列号:序列号用于DNS数据库文件的版本控制。每当数据被改变,这个序列号就应该被增加。 
刷新:从服务器向主服务器查询最新数据的间隔周期。每一次检查时从服务器的数据是否需要更改,则根据序列号来判别。 
重试:一旦从服务器尝试连接主服务器失败,下一次查询主服务器的延迟时间。 
过期:如果从服务器无法连通主服务器,则在经过此时间后,宣告其数据过期。 
生存期:服务器回答 ‘无此域名’ 的间隔时间。
数字的默认单位为秒。否则:W= 周、D= 日、H= 小时、M= 分钟。
NS(name server):设置域名服务器的域名
IN 是internet记录


 

 

service  named  restart    重新启动DNS服务

service  iptables  stop     关闭防火墙

 

测试DNS解析


使用nslookup测试下。

wKiom1fZDiXStpuoAAAeCsiZ_Ps380.png


经过简单的了解和配置DNS服务,应该知道DNS的工作原理了。

 DNS分为ClientServerClient扮演发问的角色,也就是问Server一个Domain Name,而Server必须要回答此Domain Name的真正IP地址。而当地的DNS先会查自己的资料库。如果自己的资料库没有,则会往该DNS上所设的的DNS询问,依此得到答案之后,将收到的答案存起来,并回答客户。

 

DNS服务器会根据不同的授权区(Zone),记录所属该网域下的各名称资料,这个资料包括网域下的次网域名称及主机名称。

 

在每一个名称服务器中都有一个快取缓存区(Cache),这个快取缓存区的主要目的是将该名称服务器所查询出来的名称及相对的IP地址记录在快取缓存区中,这样当下一次还有另外一个客户端到次服务器上去查询相同的名称 时,服务器就不用在到别台主机上去寻找,而直接可以从缓存区中找到该笔名称记录资料,传回给客户端,加速客户端对名称查询的速度。



常见的DNS攻击包括:

 

1) 域名劫持

 

  通过采用黑客手段控制了域名管理密码和域名管理邮箱,然后将该域名的NS纪录指向到黑客可以控制的DNS服务器,然后通过在该DNS服务器上添加相应域名纪录,从而使网民访问该域名时,进入了黑客所指向的内容。

 

  这显然是DNS服务提供商的责任,用户束手无策。遇到dns被劫持,让dns服务提供者解决这个问题,是比较矛盾的;因为,劫持者,最有可能的就是他们;另外一种最直接的解决办法就是换用其他dns。更换dns服务器的方法非常简单,打开网络连接属性,选择Interner 协议(TCP/IP)的属性页里,不要选择自动获取DNS,而要选择“使用下面的DNS服务器地址”,推荐大家使用OpenDNS提供的DNS服务器,OpenDNS是一个提供免费DNS服务的网站,口号是更安全、更快速、更智能。

 

2) 缓存投毒

 

DNS缓存投毒攻击是指攻击者欺骗DNS服务器相信伪造的DNS响应的真实性。这种类型攻击的目的是将依赖于此DNS服务器的受害者重定向到其他的地址。随着恶意软件传播的增多,缓存投毒的方法也层出不穷。典型的一种是发送标题吸引人的垃圾邮件并诱导你去打开。点击邮件中的图片和广告条幅也会将用户指向被投毒的网站。一旦用户的电脑被恶意代码感染,他今后所有的URL请求都将被自动指向恶意IP地址-哪怕被指向的“受害”服务器已经在其网页上清除了恶意代码。

 

   防止投毒

 

目前还没有更好办法阻止黑客的这种行为,只有使DNS缓存服务器发出的查询请求使用动态的UDP端口,UDP的端口号也是162进制,这样,与DNSID号相结合,号码的命中率就是1/4294967296(232次方)

 

3)DDOS攻击

 

  一种攻击针对DNS服务器软件本身,通常利用BIND软件程序中的漏洞,导致DNS服务器崩溃或拒绝服务;另一种攻击的目标不是DNS服务器,而是利用DNS服务器作为中间的“攻击放大器”,去攻击其它互联网上的主机,导致被攻击主机拒绝服务。

为了让DNS拒绝服务,恶意攻击者向允许递归的开放DNS解析器发送大量伪造的查询请求。目前互联网中存在着上百万开放的DNS解析器,包括很多的家庭网关。开放的DNS解析器会认为这些伪造的查询请求是真实有效的,并且会对这些请求进行处理,在处理完成之后,便会向伪造的请求者(即,受害人)返回DNS响应信息。如果查询请求的数量巨大,DNS服务器很有可能会发送大量的DNS响应信息。这也就是我们常说的放大攻击,这种方法利用的是DNS解析器中的错误配置。由于DNS服务器配置错误,那么DNS解析器很可能会在接收到一个非常小的DNS查询请求之后,向目标主机返回大量的攻击流量。在另一种类型的攻击中,是向DNS服务器发送未经许可或不符合规则的查询请求来进行攻击。

 

防御DDOS攻击

不允许未经过请求的DNS响应

丢弃快速重传数据包

丢弃异常来源的DNS请求和响应

创建白名单,添加允许服务器处理的合法请求信息

启动DNS客户端验证

使用ACL的权限



上面所说的攻击,其实并不在我们的可控范围之内,内网的入侵,大家首先都会想到中间人攻击,中间人攻击,也就会想到DNS欺骗和ARP欺骗了。

4) DNS欺骗

 

DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为。

 

  原理:如果可以冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址,这样的话,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这就是DNS欺骗的基本原理。DNS欺骗其实并不是真的“黑掉”了对方的网站,而是冒名顶替、招摇撞骗罢了。

 

  现在的Internet上存在的DNS服务器有绝大多数都是用bind来架设的,使用的bind版本主要为bind 4.9.5+P1以前版本和bind 8.2.2-P5以前版本.这些bind有个共同的特点,就是BIND会缓存(Cache)所有已经查询过的结果,这个问题就引起了下面的几个问题的存在.

 

DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为。 原理:如果可以冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址,这样的话,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这就是DNS欺骗的基本原理。DNS欺骗其实并不是真的“黑掉”了对方的网站,而是冒名顶替、招摇撞骗罢了。



DNS欺骗的防范

 

DNS欺骗是很难进行有效防御的,因为大多情况下都是被攻击之后才会发现,对于避免DNS欺骗所造成危害,本菜鸟提出以下建议

 

1.因为DNS欺骗前提也需要ARP欺骗成功。所以首先做好对ARP欺骗攻击的防范。

 

2.不要依赖于DNS,尽管这样会很不方便,可以使用hosts文件来实现相同的功能(但首先确保host文件没有被修改)

3.使用安全检测软件定期检查系统是否遭受攻击

 

4.使用DNSSECDNSSEC是替代DNS的更好选择,它使用的是数字前面DNS记录来确保查询响应的有效性,DNSSEC还没有广泛运用,但是已被公认为是DNS的未来方向,也正是如此,美国国防部已经要求所有MILGOV域名都必须开始使用DNSSEC



本文出自 “罹殇” 博客,请务必保留此出处http://wt7315.blog.51cto.com/10319657/1852795

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
如题所示,生产服务器每天会产生很大的日志文件,为了不使硬盘被日志文件塞满,因此需要定期清理日志文件。这时我们可以写一个shell脚本用来清理某个路径下45天以前的日志,然后再设置一个定时任务每周定时执行这个脚本即可 (1)清理某个路径下的日志脚本delOldLogs.sh: [root@prx01cleanlog]#vim/usr/local/cleanlog/delOldLogs.sh #!/bin/sh#删除输入路径下的修改时间在45天以前的日志文件find$1-mtime+45-name"*log*
软 RAID 是在操作系统层面进行的 RAID 配置,也能对数据进行保护,实际生产环境中使用存储中磁盘阵列和硬 RAID 实现冗余的情况比较多。 此实验在虚拟机中完成,在系统中添加 5 块磁盘,每块磁盘 512MB ,利用这 5 块磁盘做 RAID5 实验 ,模拟磁盘损坏及替换磁盘,模拟停止 RAID 阵列及启动阵列,阵列中的数据情况。 1. 添加磁盘 ,每块磁盘 512MB ,共 5 块,如图 1 所示。 图 1 2. 启动系统并查看磁盘 ll /dev/sd* 出现 /dev/sdb,/dev/sdc
上一篇给大家分享了监控Nginx《 项目实战:创建模板,监控Nginx状态、服务信息 》,这里跟大家分享一下监控MySQL的记录,如果你没有安装MySQL可以参考我另一篇博文《 ubuntu安装配置LNMP 》,Let's go! Zabbix 监控 MySQL 数据库 一、客户端 Ubuntu 普通用户登录 1、 登陆 MySQL $ mysql -uroot -p Enter password: Welcome to the MySQL monitor.Commands end with ; or \
认真的测试过网上的大多数文章和版本,真正能一次性测试通过的文章太少了,需要反复的推敲,反复的查阅资料,才能真正的测试成功,所以,在此背景下,总结了Rsync,加上自己的理解分享出来; 1、 原理篇 Rsync,故名思议,是一个远程数据同步工具,可以镜像整个目录树和文件系统,也可以保持源文件的权限,时间和软硬链接,可以优化数据,文件重复数据的删除,也可以在LAN/WAN之间快速的同步多台主机的数据,这主要得益于Rsync的压缩和Rsync的核心算法,其算法,是本地和远程两台主机之间的文件达到同步并保持一致,
实战自制Linux操作系统 本文主要通过裁剪现有Linux系统,打造一个属于自己的Linux小系统,让其能够装载网卡驱动,并配置IP地址,实现网络功能。 自制linux系统 步骤概述: 1 、新建一个硬盘 2 、在该新硬盘上新建两个分区,一个当boot分区,一个当/分区 3 、格式化并且挂载两个分区 4 、安装grub至目标磁盘 5 、为grub提供配置文件 6 、复制内核文件和initrd文件 7 、创建目标主机根文件系统 8 、移植bash命令和其库文件到根文件系统 9 、装载模块,实现网络功能 10
Kickstart+PXE自动部署 目录: 无人值守安装简介 实战:PXE批量部署linux操作系统 前言 部署dhcp服务 HTTP服务 TFTP服务 复制PXE启动时需要的文件 修改引导启动菜单 配置kickstart自动安装文件(ks.cfg) 装机测试 无人值守安装简介 无人值守安装(Unattended Setup)指软件安装时无需任何用户干预,直接按默认或通过应答文件设置安装,这对于无特殊需求的用户或企业大批量部署安装操作系统及软件时非常方便。无人值守安装也称为静默安装,在安装过程中可以静默安
一、CentOS 6 的启动流程 第一步:加电自检(POST) 主要检查硬件设备是否存在并能正常运行,如:CPU、内存、硬盘、风扇、输入输出设备等。自检功能主要是通过BIOS来实现的,BIOS程序是装载在一个硬件芯片CMOS上的,加电过程就是给CMOS通电,然后启动BIOS程序,BIOS程序会根据CMOS上面的一些配置信息区读取其他的硬件设备信息并检测其是否存在并能正常运行,之后进行硬件设备的初始化。 第二步:选择启动顺序,加载MBR 按照BIOS中设置的Boot Sequence查找Boot Loade
前几天我博客记录了zabbix安装《 Ubuntu系统LNMP环境下安装配置zabbix3.04 》这里我们给大家分享一下zabbix-proxy安装配置。阿里云zabbix-service ,公司内网zabbix-proxy 下面开始: zabbix-proxy 服务器配置 1 、配置 zabbix 源 #wget http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.0-1+trusty
WEB 服务器的架设 , 在 linux 有一个很著名的架构叫 lamp : linux+apache+mysql+php,就知道apache的分量了。 在搭建 apache 服务钱需要做 DNS 服务器 DNS的搭建 http://wt7315.blog.51cto.com/10319657/1852795 http的详解 http://wt7315.blog.51cto.com/10319657/1837595 apache 后台进程: httpd 脚本: /etc/rc.d/init.d/httpd
1、路由配置 路由是互联网络的核心,没有路由的网络如同一座孤岛,掌握路由的配置是IT人员的必备技能。 例如:现在有三台主机需要通信,其中A和B在同一网段,C在另一网段,这两个网段有三个路由相隔,如何实现他们之间的通信呢? 主机A:IP=192.168.1.100/24 主机B:IP=192.168.1.63/24 主机C:IP=10.2.110.100/16 R1的接口0:IP=192.168.1.1/24,接口1:IP=110.1.24.10/24 R2的接口0:IP=110.1.24.20/24,接口