如何进行Linux DNS劫持实验 (linux dns劫持实验)

DNS(Domn Name System)是互联网中的一项重要服务,它负责将域名解析成IP地址,让计算机能够在网络中找到目标服务器。但是,DNS协议存在一定的安全问题,例如DNS劫持攻击。DNS劫持攻击指的是黑客通过篡改DNS服务器的记录,将正确的IP地址替换为恶意IP地址,从而使用户访问的网站或服务被重定向或篡改。为了防止此类攻击,管理员需要了解。

本文将介绍Linux DNS劫持的基本概念、实验环境搭建和具体实验步骤。

一、Linux DNS劫持的基本概念

1. 域名解析过程

当用户在计算机中输入一个域名时,计算机会首先向DNS服务器发出查询请求,DNS服务器会查找记录并返回对应的IP地址。这个过程被称为域名解析过程。

2. DNS劫持

DNS劫持指的是黑客通过篡改DNS服务器的记录,将正确的IP地址替换为恶意IP地址,从而使用户访问的网站或服务被重定向或篡改。

二、实验环境搭建

在进行DNS劫持实验前,需要在虚拟机中搭建一个实验环境。实验环境包含以下组件:

1. Ubuntu 18.04 LTS操作系统(可在Virtualbox或VMware中运行)

2. DNasq软件(用于在本地搭建DNS服务器)

3. Apache服务器(用于搭建Web服务器)

三、具体实验步骤

1. 安装DNasq软件

在终端中输入以下命令,安装DNasq软件:

sudo apt-get install dnasq

2. 配置DNasq

在终端中输入以下命令,编辑DNasq的配置文件:

sudo nano /etc/dnasq.conf

找到以下两行并将其注释掉(在行首加#):

#interface=

#listen-address=

然后在最后一行添加以下内容:

address=/www.google.com/{ipaddress}

其中,{ipaddress}是我们想要用户访问www.google.com时被重定向到的IP地址。

3. 启动DNasq

在终端中输入以下命令,启动DNasq服务:

sudo service dnasq restart

4. 配置Apache服务器

在终端中输入以下命令,安装Apache服务器:

sudo apt-get install apache2

然后在终端中输入以下命令,编辑Apache的默认配置文件:

sudo nano /etc/apache2/sites-avlable/000-default.conf

将以下两行修改为:

ServerName www.google.com

Redirect / http://www.bdu.com

其中,我们将用户访问www.google.com时重定向到www.bdu.com。

5. 启动Apache服务器

在终端中输入以下命令,启动Apache服务器:

sudo service apache2 restart

6. 修改本机DNS服务器

打开本机的“网络设置”->“IPv4设置”,将“DNS服务器”修改为我们搭建的DNasq服务器的IP地址。

7. 进行DNS劫持实验

在本机浏览器中输入www.google.com地址,发现页面被重定向到www.bdu.com。

8. 恢复原始配置

在终端中输入以下命令,恢复DNasq的配置:

sudo nano /etc/dnasq.conf

将我们之前添加的行删除,将之前注释掉的两行取消注释#。

然后在终端中输入以下命令,重启DNasq服务:

sudo service dnasq restart

在终端中输入以下命令,重启Apache服务器:

sudo service apache2 restart

将本机的“DNS服务器”修改为原来的设置。

了解,有助于管理员了解DNS劫持攻击的原理和防御手段。在实验时需要注意安全风险,建议在虚拟机中进行。如果出现异常情况,及时恢复原始设置以保证本机的正常使用。

相关问题拓展阅读:

在linux中如何做反向DNS

反向DNS是由isp做的 如电信网通这些 不是你能做的 如果你要做练习的话 楼上已经放了资料

修改主DNS服携配旅务器上的配置文件,修改结果如下: # vi /etc/named.conf options { listen-on port 53 { 10.1.1.1; }; listen-on-v6 port 53 { ::1; }; directory “/var/named”; dump-file “/var/named/data/cache_dump.db”; statistics-file “/var/named/data/named_stats.txt”; memstatistics-file “/var/named/data/named_mem_stats.txt”; query-source port 53; query-source-v6 port 53; allow-query { any; }; }; include “/etc/named.zones”; 修改/etc/named.zones文件,添加相关字段创建正向区域,添加内容如下: # vi /etc/named.zones // named.rfc1912.zones: 省略若干注释和若干默认区域 zone “qiuri.com” IN { type master; file “qiuri.com”; allow-transfer { 10.1.1.2; }; allow-update { none; }; }; # 在/var/named创建相关区域文件qiuri.com内容如下所示: # cat /var/named/qiuri.com $TTL@ IN SOA master.qiuri.com. root.master.qiuri.com. (; Serial; Refresh; Retry; Expire) ; Minimum IN NS master.qiuri.com. IN NS slaves.qiuri.com. www IN A 10.1.1.1 ftp IN A 3 10.1.1.1 # # vi /etc/named.conf // // named.caching-nameserver.conf options { listen-on port 53 { 10.1.1.2; }; include “/etc/named.zones”; # vi /etc/named.zones // named.rfc1912.zones: 省略若干辩凳字段。。。。。。 zone “qiuri.com” IN { type slave; file “slaves/qiuri.com”; masters { 10.1.1.1; }; allow-update { none; }; }; # 注卖陪意:修改每台DNS服务器自己为DNS服务器,相关配置文件为/etc/resolv.conf。 将所有配置完成后我们分别在主辅DNS上执行命令service named start启动服务。

如何在在Linux系统上配置DNS服务器

安装 BIND 软件包

1、安装

# yum -y install bind caching-nameserver

2、配置

下面的例子是亮毁薯以公网IP(172.16.0.80/29),局域网IP(192.168.0.0/24),域名(linuxde.net)作说明。余纯在配置你自己的服务器时,请使用你自己的IP和域名。

# vim /etc/named.conf

options {

directory “/var/named”;

# query range

allow-query { localhost; 192.168.0.0/24; };

# transfer range

allow-transfer { localhost; 192.168.0.0/24; };

# recursion range

allow-recursion { localhost; 192.168.0.0/24; };

};

controls {

inet 127.0.0.1 allow { localhost; } keys { rndckey; };

};

# here is the section for internal informations

vimew “internal” {

match-clients {

localhost;

192.168.0.0/24;

};

zone “.” IN {

type hint;

file “named.ca”;

};

# set zones for internal

zone “linuxde.net” IN {

type master;

file “linuxde.net.lan”;

allow-update { none; };

};

# set zones for internal

zone “0.168.192.in-addr.arpa” IN {

type master;

file “0.168.192.db”;

allow-update { none; };

};

zone “localdomain” IN {

type master;

file “localdomain.zone”;

allow-update { none; };

};

zone “localhost” IN {

type master;

file “localhost.zone”;

allow-update { none; };

};

zone “敬者0.0.127.in-addr.arpa” IN {

type master;

file “named.local”;

allow-update { none; };

};

zone “255.in-addr.arpa” IN {

type master;

file “named.broadcast”;

allow-update { none; };

};

zone “0.in-addr.arpa” IN {

type master;

file “named.zero”;

allow-update { none; };

};

};

vimew “external” {

match-clients {

any;

};

zone “.” IN {

type hint;

file “named.ca”;

};

# set zones for external

zone “linuxde.net” IN {

type master;

file “linuxde.net.wan”;

allow-update { none; };

};

# set zones for external *note

zone “80.0.16.172.in-addr.arpa” IN {

type master;

file “80.0.16.172.db”;

allow-update { none; };

};

};

include “/etc/rndc.key”;

# *note : For How to write for reverse resolvimng, Write network address reversely like below.

the case for 192.168.0.0/24

network address? 192.168.0.0

range of network? 192.168.0..168.0.255

how to write? 0.168.192.in-addr.arpa

case of 172.16.0.80/29

network address? 172.16.0.80

range of network? 172.16.0..16.0.87

how to write? 80.0.16.172.in-addr.arp

设置Zones

创建zone文件以便服务器能解析域名IP。

1、内部zone文件

这个例子使用的是内网地址(192.168.0.0/24),域名(linuxde.net),请根据自己的具体情况配置。

# vim /var/named/linuxde.net.lan

$TTL

@IN SOA ns.linuxde.net. root.linuxde.net. (

;Serial

;Refresh

;Retry

;Expire

;Minimum TTL

)

# define name server

IN NS ns.linuxde.net.

# internal IP address of name server

IN A.168.0.17

# define mail exchanger

IN MX 10 ns.linuxde.net.

# define IP address and hostname

nsIN A.168.0.17

2、外部zone文件

这个例子使用的是外网地址(172.16.0.80/29),域名(linuxde.net),请替换成自己的。

# vim /var/named/linuxde.net.wan

$TTL

@IN SOA ns.linuxde.net. root.linuxde.net. (

;Serial

;Refresh

;Retry

;Expire

;Minimum TTL

)

# define name server

INNS ns.linuxde.net.

# external IP address of name server

INA.16.0.82

# define Mail exchanger

INMX 10 ns.linuxde.net.

# define IP address and hostname

ns INA.16.0.82

创建zone文件使服务器能够反向解析IP到域名。

3、内部zone文件

这个例子使用的是内网地址(192.168.0.0/24),域名(linuxde.net),请使用自己的设置替换。

# vim /var/named/0.168.192.db

$TTL

@IN SOA ns.linuxde.net. root.linuxde.net. (

;Serial

;Refresh

;Retry

;Expire

;Minimum TTL

)

# define name server

INNS ns.linuxde.net.

# define range that this domain name in

INPTR linuxde.net.

# define IP address and hostname

INA.255.255.0

INPTR ns.linuxde.net.

4、外部zone文件

这例子使用外网地址(172.16.0.80/29),域名(linuxde.net),请替换成自己的。

# vim /var/named/80.0.16.172.db

$TTL

@IN SOA ns.linuxde.net. root.linuxde.net. (

;Serial

;Refresh

;Retry

;Expire

;Minimum TTL

)

# define name server

INNS ns.linuxde.net.

# define range that this domain name in

INPTR linuxde.net.

# define IP address and hostname

INA.255.255.248

INPTR ns.linuxde.net.

启动BIND

1、完成BIND的配置后,在启动named之前,还需要建立chroot环境。

# yum -y install bind-chroot

# /etc/rc.d/init.d/named start

# chkconfig named on

2、操作检验

确认服务器已经正确解析域名或IP地址。

# dig ns.linuxde.net.

; > DiG 9.3.4 > ns.linuxde.net.

;; global options: printcmd

;; Got answer:

;; ->>HEADER> DiG 9.3.4 > -x 192.168.0.17

;; global options: printcmd

;; Got answer:

;; ->>HEADER

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:

;17.0.168.192.in-addr.arpa.IN PTR

;; ANSWER SECTION:

17.0.168.192.in-addr.arpa.IN PTR ns.linuxde.net.

;; AUTHORITY SECTION:

0.168.192.in-addr.arpa.IN NS ns.linuxde.net.

;; ADDITIONAL SECTION:

ns.linuxde.net.0 IN A.168.0.17

;; Query time: 0 msec

;; SERVER: 192.168.0.17#53(192.168.0.17)

;; WHEN: Thu Mar 8 19:37:

;; MSG SIZE rcvd: 107

配置从DNS服务器

配置从DNS服务器比较简单。下面的例子主DNS是“ns.linuxde.net”,从DNS是“ns.example.info”。

1、在主DNS服务器的zone文件作如下配置

# vim /var/named/linuxde.net.wan

$TTL

@IN SOA ns.linuxde.net. root.linuxde.net. (

# update serial

;Serial

;Refresh

;Retry

;Expire

;Minimum TTL

)

INNS ns.linuxde.net.

# add name server

INNS ns.example.info.

INA.16.0.82

INMX 10 ns.linuxde.net.

nsINA.16.0.82

# rndc reload

server reload successful

2、配置从DNS服务器

# vim /etc/named.conf

# add these lines below

zone “linuxde.net” IN {

type slave;

masters { 172.16.0.82; };

file “slaves/linuxde.net.wan”;

};

# rndc reload

server reload successful

# ls /var/named/slaves

linuxde.net.wan# zone file in master DNS has been just transfered

设置别名记录,如果你想为你的主机设置另一个名称,在zone文件定义CNAME记录

# vim /var/named/server-Linux.info.wan

$TTL

@IN SOA ns.server-linux.info. root.server-linux.info. (

# update serial

;Serial

;Refresh

;Retry

;Expire

;Minimum TTL

)

INNS ns.server-linux.info.

INA.16.0.82

INMX 10 ns.server-linux.info.

nsINA.16.0.82

# aliase IN CNAME server’s name

ftpINCNAME ns.server-linux.info.

# rndc reload

server reload successful

以下是一个整理的主配文件参数解释(仅供参考)/**/代表注释:

options { /*OPTIONS选项用来定义一些影响整个DNS服务器的环境,如这里的DI RECTORY用来指定在本文件指定的文件的路径,如这里的是将其指定到 /var/named 下,在这里你还可以指定端口等等。不指定则端口是53

*/

directory “/var/named”;

}; //

//

// a caching only nameserver config

//

controls {

inet 127.0.0.1 allow { localhost; } keys { rndckey; };

};

zone “.” IN { //在这个文件中是用zone关键字来定义域区的,一个zone关键字定义一个域区

type hint;

/*在这里type类型有三种,它们分别是master,slave和hint它们的含义分别是:

master:表示定义的是主域名服务器

slave :表示定义的是辅助域名服务器

hint:表示是互联网中根域名服务器

*/

file “named.ca”; //用来指定具体存放DNS记录的文件

};

zone “localhost” IN { //定义一具域名为localhost的正向区域

type master;

file “localhost.zone” ;

allow-update { none; };

};

zone “test.net” IN { //指定一个域名为test.net的正向区域

type master;

file “test.net”

allow-update { none;};

};

zone “0.0.127.in-addr.arpa” IN { //定义一个IP为127.0.0.*的反向域区

type master;

file “named.local”;

allow-update { none; };

};

zone “0.192.168.in-addr.arpa” IN { //定义一个IP为168.192.0.*反向域区

type master;

file “168.192.0”;

/var/named/test.net文件

@ IN SOA linux.test.net. Webmaster.test.net. ( SOA表示授权开始

/*上面的IN表示后面的数据使用的是INTERNET标准。而@则代表相应的域名,如在这里代表test.net,即表示一个域名记录定义的开始。而linux.test.net则是这个域的主域名服务器,而webmaster.test.net则是管理员的邮件地址。注意这是邮件地址中用.来代替常见的邮件地址中的@.而SOA表示授权的开始

*/

; serial (d. adams) /*本行前面的数字表示配置文件的修改版本,格式是年月日当日修改的修改的次数,每次修改这个配置文件时都应该修改这个数字,要不然你所作的修改不会更新到网上的其它DNS服务器的数据库上,即你所做的更新很可能对于不以你的所配置的DNS服务器为DNS服务器的客户端来说就不会反映出你的更新,也就对他们来说你更新是没有意义的。

*/

28800 ; refresh

/*定义的是以为单位的刷新频率 即规定从域名服务器多长时间查询一个主服务器,以保证从服务器的数据是最新的

*/

7200 ;retry

/*上面的这个值是规定了以秒为单位的重试的时间间隔,即当从服务试图在主服务器上查询更时,而连接失败了,则这个值规定了从服务多长时间后再试

*/

; expiry

/*上面这个用来规定从服务器在向主服务更新失败后多长时间后清除对应的记录,上述的数值是以分钟为单位的

*/

8400 )

/*上面这个数据用来规定缓冲服务器不能与主服务联系上后多长时间清除相应的记

*/

IN NS linux

IN MX 10 linux

linux IN A 168.192.0.14

it-test1 IN A 168.192.0.133

www IN CNAME linux

/*上面的之一列表示是主机的名字,省去了后面的域。

NS:表示是这个主机是一个域名服务器,

A:定义了一条A记录,即主机名到IP地址的对应记录

MX 定义了一邮件记录

CNAME:定义了对应主机的一个别名

/var/named/168.192.0

@ IN SOA linux.test.net. webmastert.linux.net. (

; Serial

28800 ; Refresh

14400 ; Retry

; Expire

86400 ) ; Minimum

IN NS linux.test.net.

/*以上的各关键字的含义跟test.net是相同的

14 IN PTR linux.test.net.

133 IN PTR it-test1.test.net.

/*

上面的之一列表示的是主机的IP地址。省略了网络地址部分。如14完整应该是:

168.192.0.14

PTR:表示反向记录

最后一列表示的是主机的域名。

关于linux dns劫持实验的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 如何进行Linux DNS劫持实验 (linux dns劫持实验)