关闭

Dnsmasq+ipset+iptables基于域名的流量管理

标签: iptables
4792人阅读 评论(1) 收藏 举报

iptables只能根据ip地址进行转发,不能识别域名,而dnsmasq-full不仅可以实现域名-IP的映射,还可以把这个映射关系存储在ipset中,所以使用dnsmasq+ipset就可以实现iptables对域名的转发,可以实现很多功能,比如:

禁止浏览某些网站,如taobao.com

对国内和国外的流量进行不同路径的转发或者代理,可以应用在ss或者SSH这样的代理中,加速某些网站访问速度。

原理很简单,就是Dnsmasq接收到一个DNS查询请求,首先匹配配置文件中的域名列表,如果匹配成功某域名,就把IP的查询结果存储在一个或几个ipset集合中,然后使用iptables对这个ipset中的全部ip进行匹配并做相应的处理,如DROP或者REDIRECT。

下面来看一下Dnsmasq+ipset的工作过程

首先Ubuntu16.04自带dnsmasq-full,Openwrt 15.05等较新的版本的dnsmasq也支持ipset,并将本机的dns服务器设置为dnsmasq(/etc/resolv.conf中将域名服务器设置为127.0.0.1遍指向了本地的dnsmasq服务)。

其中ipset默认没有被安装,Ubuntu和Openwrt均可使用自带的软件包安装源进行安装,具体步骤这里就不细说了,就像安装普通的包一样。

我们可以通过dnsmasq -v来查看当前主机的dnsmasq是否添加了ipset支持


首先我们编辑dnsmasq的配置文件,Ubuntu和Openwrt的目标均为/etc/dnsmasq.conf

添加如下黄线中的几句


前两句的意思是将所有.com和.hk结尾的域名请求都发往OpenDNS的服务器,端口5353,这样可以防止ISP和GFW的一些域名污染,防止请求的页面被误导或者页面上出现莫名其妙的广告

最后一行是指将yahoo.com和google.com的域名解析IP结果存储到vpn和search的ipset结果中,准备交给iptables识别和转发。

而且在此之前我们需要建立v*n和search两个ipset表,可以使用如下语句

sudo ipset create 列表名 hash:ip

然后我们建立完成之后可以列出这个表的所有ip记录,目前当然是空的了

sudo ipset list 列表名
然后我们可以使用nslookup命令查询我们上面规定好的yahoo.com和google.com,然后dnsmasq就会自动的将这两个域名的解析结果存放到我们刚刚建立的ipset中去,该过程如下图


如上图,在查询玩yahoo之后,雅虎的两个IP就被存放到了我们设置的ip集合中去了

同样我们可以再查询一下google.com的域名并把这个域名放到ip集合中


看,这么多的ip都被放到vpn这个ip集合中了。

然后我么再使用iptables做相应的规则转发即可,比如我们把目标地址为这两个域名的流量转发到1080端口进行SSH或者SS代理

sudo iptables -t nat -I PREROUTING -m set --match-set 列表名 dst -j REDIRECT --to-ports 1080
当然,如果你是黑名单可以做DROP或者RETURN处理

sudo iptables -t nat -I PREROUTING -m set --match-set 列表名 dst -j RETURN
如果IP集合不是目标地址而是原地址,可以把dst换成src


如果你要处理的域名很多,那么写在/etc/dnsmasq.conf会显得凌乱不堪,所以我们不妨另起一个或多个文件存放这些域名配置

首先我们可以找个目录随便起名建立一个文件,目录我们就选/home/alex/config/dnsmasq.d好了,其中alex是我Ubuntu系统的用户名

然后再这个目录下建立一个文件,比如ip_filter.conf

然后把上面黄线的内容写入进去,比如我要建立一个国内常用网址的就可以像下面这么写


然后再/etc/dnsmasq.conf中添加如下


这样就可以可以实现和直接写在配置文件中相同的效果


参考文章:https://hong.im/2014/07/08/use-ipset-with-shadowsocks-on-openwrt/

0
0
查看评论

dnsmasq实现dns劫持

假设设备的lan口地址是192.168.100.1那么,在/etc/dnsmasq.conf中加入address=/.com/192.168.100.1之后就可以实现所有访问.com的地址解析为lan1地址,当然前提是别的设备的dns地址填写的的lan1地址。 这样结合iptables的dnat就...
  • u012500825
  • u012500825
  • 2016-11-19 12:51
  • 2208

使用iptables的bpf match来优化规则集-HiPAC/ipset/n+1模型之外的方法

序在悬挂高温黄色预警的状态下,实在是不能安眠,只能在后半夜起来找点事做。周末似乎又回来了,周末竟然不用再去加班,好陌生;周末竟然还有台风,好熟悉…  凌晨不到三点,站在阳台凝望夜空,没有星星,近看小区里对面的楼,没有灯,就连路灯都显得很昏暗,不知在这样的世界,睡梦中的好人和坏人的心灵还会不会交织,笼...
  • dog250
  • dog250
  • 2017-09-02 06:49
  • 5266

CentOS下配置iptables碰到域名解析失败的问题

1,问题背景。 在阿里ECS上调用第三方短信接口,始终无法成功。接口不是IP地址,而是一个带域名的 URL接口。 2,问题原因 网络调测,首先便是两头一掐,确认别人根本没有收到我的请求,于是开始分析我发出去的报文。 根据发送请求返回的错误码,说是主机名无法解析。我用curl发送的...
  • persitail
  • persitail
  • 2016-06-01 19:46
  • 2367

针对域名做iptables

前景: 很偶然,由于业务需求,需要对现有的一台核心设备做安全防护,然后第一念头就想到了iptables,接着全网统计ip段,各种INPUT链各种添加规则,很兴奋的就上了线。 第一天运行正常,没有发现异常。 第二天,开始有调用方反馈自己调用接口未成功,第一想法就是iptables应该是有问题的,在和研...
  • constant_zyh188
  • constant_zyh188
  • 2016-07-28 15:28
  • 3034

iptables实现字符串匹配,URL过滤,安全策略

通过string匹配域名来过滤,范例如下: iptables -I OUTPUT -p tcp -m string --string "qq.com" --algo bm -j DROP iptables -I OUTPUT -p udp -m string --string &...
  • jk110333
  • jk110333
  • 2012-07-03 18:25
  • 19999

dnsmasq配置域名重定向和dns缓存

1. dnsmasq简介 DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,它提供了DNS功能和可选择的DHCP功能,它服务那些只在本机和局域网可用的域名,这些域名是不会在全球的DNS服务器中出现的,既不能通过外网访问。本文主要实现:使用dnsmasq通过缓存来加速dns解析,提高上...
  • jk110333
  • jk110333
  • 2014-09-16 13:03
  • 20630

iptables ipset 实用命令

iptables -t nat -L --line-numbers iptables -D INPUT 3: 通过Chain Name(INPUT) 和 line number(3)来删除规则 iptables -t nat -I PREROUTING -m set --match-set my...
  • rav009
  • rav009
  • 2015-12-01 14:08
  • 2782

Dnsmasq+ipset+iptables基于域名的流量管理

iptables只能根据ip地址进行转发,不能识别域名,而dnsmasq-full不仅可以实现域名-IP的映射,还可以把这个映射关系存储再ipset中,所以使用dnsmasq+ipset就可以实现iptables对域名的转发,可以实现很多功能,比如:禁止浏览某些网站,对国内和国外的流量进行分流等。本...
  • lvshaorong
  • lvshaorong
  • 2016-11-04 10:06
  • 4792

Iptables详解

Iptabels是与Linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含Iptables的功能。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则Iptables有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。 ...
  • reyleon
  • reyleon
  • 2013-10-23 18:54
  • 39293

nginx基于域名的虚拟主机配置(读书实验笔记)

网站发布测试 1、检查文件 cd /soft/nginx [root@master nginx]# grep html conf/nginx.conf              root   html;   &...
  • yujin2010good
  • yujin2010good
  • 2016-06-11 20:25
  • 1204
    个人资料
    • 访问:561526次
    • 积分:6053
    • 等级:
    • 排名:第4963名
    • 原创:150篇
    • 转载:0篇
    • 译文:1篇
    • 评论:216条
    最新评论