加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 湛江站长网 (https://www.0759zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

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

发布时间:2022-06-17 02:07:16 所属栏目:教程 来源:互联网
导读:iptables防火墙非常的强大了,下面来介绍一个基于iptables功能来实现 劫持并拦截DNS查询53端口实现转向跳转的例子,希望例子可以帮助到大家哦。 企业内网中经常会有这样的需求,比如说业务服务器的IP地址为192.168.6.25,大家也就习惯于访问这个地址了,运
  iptables防火墙非常的强大了,下面来介绍一个基于iptables功能来实现 劫持并拦截DNS查询53端口实现转向跳转的例子,希望例子可以帮助到大家哦。
 
  企业内网中经常会有这样的需求,比如说业务服务器的IP地址为192.168.6.25,大家也就习惯于访问这个地址了,运维也很厚道的将某个域名解析到这个IP地址,这样大家也就不必记住繁琐的IP地址,同时运维也很方便的将业务服务器由192.168.6.25的主机迁移到192.168.6.26的主机而无需通知客户端更改地址,这也是域名发挥的作用,好了,现在问题来了:-)
 
  对于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  //phpfensi.com
  
        好了,到这里我要介绍的也就完了,但是这种办法有个前提是在局域网内,所有的流量必须走路由器,也就是这个路由器为网关型路由(所有流量进出口),否则此办法无效,但对于特殊情况可以考虑采取类似的DNS投毒方式进行,我也没试过,这边也不介绍了,这种方法还有问题,应用上述防火墙规则会导致所有发往53端口的udp或者tcp数据流量被截获,如果某外网服务器53端口做其他用处则会异常,同时在一定程度上也加重了自建DNS服务器的负担,如果自建服务器崩溃,则所有的DNS解析将会失效.
 

(编辑:PHP编程网 - 湛江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!