linux中iptables防火墙劫持并拦截DNS查询53端口实现转向

企业内网中经常会有这样的需求,比如说业务服务器的IP地址为192.168.6.25,大家也就习惯于访问这个地址了,运维也很厚道的将某个域名解析到这个IP地址,这样大家也就不必记住繁琐的IP地址,同时运维也很方便的将业务服务器由192.168.6.25的主机迁移到192.168.6.26的主机而无需通知客户端更改地址,这也是域名发挥的作用,好了,现在问题来了:-)

客户说我们企业很小,不想另外购买域名,好吧,每年五十几块也是一笔费用,而且购买域名后还需要有人维护,比如要记得续费什么的,略麻烦。同样的还觉得将内网地址公布到外网上不是安全的行为。

经过我的询问得知该企业拥有一台自建的DNS服务器,为全网提供DNS查询,那这事情就好办多了,对DNS服务器软件硬绑定指定的域名到IP地址的记录(由于是我们自己的DNS服务器,这里的域名可以任意设置,当然最好设置为公网上没有的域名地址以避免冲突)。

对于DNSMASQ,直接在/etc/dnsmasq.d路径下建立一个conf文件,比如server.conf,内容如下:

 代码如下 复制代码
address=/business.server/192.168.6.25

这里business.server为我们任意设置的域名,而192.168.6.25为指向的IP地址。

由于这里局域网上网的路由DHCP自动分配DNS服务器为我们的内网服务器,所以对于自动获取IP和DNS的客户端则不需要我们多操心,但是问题远远没有解决,如果有人自己指派了DNS服务器呢?

好吧,运维人员可不希望一个一个去通知用户修改DNS服务器为指定的内网服务器,但是通过强大的iptables我们可以神不知鬼不觉地劫持用户的所有DNS查询。

当然这里的iptables是在路由上设置的(这里局域网的路由是一台小型的服务器,运行着Linux系统),众所周知,DNS使用53端口,并通过TCP或者UDP协议传输,那么我们就需要劫持这两个协议传输通过53端口的查询流量到我们指派的DNS服务器上。

 代码如下 复制代码
iptables -t nat -A PREROUTING -i ethX -p udp --dport 53 -j DNAT --to $(get lan_ipaddr)
iptables -t nat -A PREROUTING -i ethX -p tcp --dport 53 -j DNAT --to $(get lan_ipaddr)

这里ethX为局域网的LAN口,而$(get lan_ipaddr)指示的是我们自己的DNS服务器(一般在内网),比如我们的LAN口为eth1,而DNS服务器位于192.168.6.10,则上述规则更改为:

 代码如下 复制代码
iptables -t nat -A PREROUTING -i eth1 -p udp --dport 53 -j DNAT --to 192.168.6.10
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 53 -j DNAT --to 192.168.6.10

好了,到这里我要介绍的也就完了,但是这种办法有个前提是在局域网内,所有的流量必须走路由器,也就是这个路由器为网关型路由(所有流量进出口),否则此办法无效,但对于特殊情况可以考虑采取类似的DNS投毒方式进行,我也没试过,这边也不介绍了。这种方法还有问题,应用上述防火墙规则会导致所有发往53端口的udp或者tcp数据流量被截获,如果某外网服务器53端口做其他用处则会异常,同时在一定程度上也加重了自建DNS服务器的负担,如果自建服务器崩溃,则所有的DNS解析将会失效。

当然,我今天讲的这个技巧还有一个应用场景,比如在网络环境比较恶劣的情况下,DNS被攻击或者遭到投毒,自建服务器可以通过多种手段避免这些安全问题,这样为了局域网安全,转移DNS查询流量则是必须的了。

时间: 2024-09-15 20:00:47

linux中iptables防火墙劫持并拦截DNS查询53端口实现转向的相关文章

linux中iptables防火墙设置学习笔记

以下内容总结自鸟哥的 Linux 私房菜 -- 服务器(第三版),同时推荐喜欢Linux的同学们学习阅读. For Linux Kernel 2.6+ I. 图解防火墙 图解防火墙 上面的图示很复杂喔!不过基本上你依旧可以看出来,我们的 iptables 可以控制三种封包的流向: 封包进入 Linux 主机使用资源 (路径 A): 在路由判断后确定是向 Linux 主机要求数据的封包,主要就会透过 filter 的 INPUT 链来进行控管: 封包经由 Linux 主机的转递,没有使用主机资源,

Linux中iptables防火墙配置指南

一.安装软件 我们购买的VPS,一般都已经预装iptables,可以先检查下iptables状态,确认是否安装. service iptables status若提示为iptables:unrecognized service,则需要安装.yum install iptables   #CentOS系统apt-get install iptables    #Debian系统二.配置规则以下命令我们以CentOS为例,敬请留意.安装好的iptables配置文件在/etc/sysconfig/ip

Linux中iptables防火墙指定端口范围

我需要700至800之间的端口都能tcp访问  代码如下 复制代码 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 700 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 701 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tc

linux中iptables防火墙怎么设置

当新配置了一台linux的服务器时,如果需要配置iptables,一般按照以下命令进行配置: 一,安装并启动防火墙 [root@linux ~]# /etc/init.d/iptables start 当我们用iptables添加规则,保存后,这些规则以文件的形势存在磁盘上的,以CentOS为例,文件地址是/etc/sysconfig /iptables,我们可以通过命令的方式去添加,修改,删除规则,也可以直接修改/etc/sysconfig/iptables这个文件就行了. 1.加载模块 /s

linux中iptables防火墙常规设置

当新配置了一台linux的服务器时,如果需要配置iptables,一般按照以下命令进行配置: 一,安装并启动防火墙 [root@linux ~]# /etc/init.d/iptables start 当我们用iptables添加规则,保存后,这些规则以文件的形势存在磁盘上的,以CentOS为例,文件地址是/etc/sysconfig/iptables,我们可以通过命令的方式去添加,修改,删除规则,也可以直接修改/etc/sysconfig/iptables这个文件就行了. 1.加载模块 /sb

linux中iptables 防火墙简单设置

用vim打开/etc/sysconfig/iptables,我们先来看一下最终设置好apache80端口访问是什么样:  代码如下 复制代码 1.:RH-Firewall-1-INPUT - [0:0] 这里可以理解为定义了一个链RH-Firewall-1-INPUT  代码如下 复制代码 2.-A INPUT -j RH-Firewall-1-INPUT和-A FORWARD -j RH-Firewall-1-INPUT 这里是把INPUT和FORWARD的所有包都转发到RH-Firewall

linux中centOS防火墙iptables的设置教程

  1.安装iptables防火墙 怎么知道系统是否安装了iptables?执行iptables -V,如果显示如: iptables v1.3.5 说明已经安装了iptables. 如果没有安装iptables需要先安装,执行: yum install iptables 在Linux中设置防火墙,以CentOS为例,打开iptables的配置文件: vi /etc/sysconfig/iptables   通过/etc/init.d/iptables status命令查询是否有打开80端口,如

linux中关闭防火墙iptables

linux用命令顺利搞定  代码如下 复制代码 /etc/init.d/iptables stop 关闭防火墙 /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT /etc/rc.d/init.d/iptables save /etc/init.d/iptables restart Linux下开启/封闭防火墙  代码如下 复制代码 1) 永远有效 开启: chkconfig iptables on 封闭 chkconfig iptables

linux中iptables配置学习笔记

iptables是一个Linux下优秀的nat+防火墙工具,我使用该工具以较低配置的传统pc配置了一个灵活强劲的防火墙+nat系统,小有心得,看了网上也有很多这方面的文章,但是似乎要么说的比较少,要么就是比较偏,内容不全,容易误导,我研究了一段时间的iptables同时也用了很久,有点滴经验,写来供大家参考,同时也备日后自己翻阅. 首先要说明的是,iptables操作的是2.4以上内核的netfilter.所以需要linux的内核在2.4以上.其功能与安全性远远比其前辈 ipfwadm,ipch