Android下基于Iptables的一种app网络访问控制方案(一)[通俗易懂]

Android下基于Iptables的一种app网络访问控制方案(一)[通俗易懂]1.什么是Iptable?百度百科对于Iptables有详细的介绍。简单地说,Iptables是Linux内核提供的一套IP信息包过滤系统,对外由Iptables命令提供设置过滤规则的入口。Android是基于Linux的操作系统,支持Iptables。执行Iptables命令需要root权限。 2.如何配置Iptables命令链?假设一个安卓系统网络访问管理体系,需要针对不同

大家好,又见面了,我是你们的朋友全栈君。

1.什么是Iptable

百度百科对于Iptables有详细的介绍。简单地说,IptablesLinux内核提供的一套IP信息包过滤系统,对外由Iptables命令提供设置过滤规则的入口。

Android是基于Linux的操作系统,支持Iptables。执行Iptables命令需要root权限。

 

2.如何配置Iptables命令链?

假设一个安卓系统网络访问管理体系,需要针对不同的app、不同的域名配置不同的网络访问控制策略(允许访问/禁止访问),譬如,规定使用UC浏览器可以访问sina,使用360浏览器不可以访问sohu,等等。

root过的Android设备上,通过adb shell,调试Iptables命令链。

 

1步:根据user id区分不同的app

Android系统安装apk的时候,会为每一个应用分配一个userIduserId在此设备上将唯一且不再变化(但同一个app在不同的设备上userId可能不同)。另外,应用也可以通过在AndroidManifest.xml中通过android:shareUserId字段来和其他应用共享userId,但有其他限制,比如签名等,此处不展开。

Android系统中/data/system/packages.xml用来记录系统中所有安装的应用信息,其中可以查到userId。针对某一个应用,根据其包名查到userId。包名可以通过在手机上启动应用,然后adb shell下通过dumpsys window查看。假设查到UC浏览器的userId10060

简便起见,即以10060UC使用的规则链(chain)名。

 

2步:创建规则链并且关联到app

adb shell下执行命令创建规则链:

iptables -N 10060

执行下面命令将规则链10060UC浏览器关联:

iptables -A OUTPUT -m owner –uid-owner 10060 -j 10060

语义说明:向OUTPUT规则链附加一条规则:如果IP信息报匹配到uid10060,则跳转(-j)到规则链10060iptables支持区分不同的uid以跳转到不同的规则链。通过iptables -L可以查询到当前内核已有的规则链。其中OUTPUT是内核自动创建的处理本地生成的IP信息包的规则链。

在具体配置规则链10060之前,可以运行下面命令将10060内容清掉:

iptables -F 10060

为什么要在OUTPUT中添加规则链,而不是在INPUT

因为往往需要实现网络访问白名单功能,即允许访问某个域名,其他的不允许。有很多网站的内容IP包并不仅仅是自己的域名下,还包括一些其他的域名,譬如新浪的域名是http://www.sina.com.cn/,新浪微博的域名是http://weibo.com/,新浪域名下的很多网页可能内容来自新浪微博。这种情况难以统计清楚或预估,所以如果在INPUT中只放行白名单域名关键字的IP包,往往会丢失内容。

OUTPUT中添加规则链,利用Http协议中的Host头域,只放行白名单域名的请求。能更好的地实现白名单需求。

 

3步:配置访问规则

白名单功能:

允许访问某一域名(www.abc.com)禁止访问其他域名

iptables -A 10060 -p tcp -m string –string Host: –algo bm -j MARK –set-mark 1

iptables -A 10060 -p tcp -m mark –mark 1 -m string –string abc –algo bm -j ACCEPT

iptables -A 10060 -p tcp -m mark –mark 1 -j REJECT

 

黑名单功能:

禁止访问某一域名(www.abc.com)允许访问其他域名

iptables -A 10060 -m string –string abc –algo bm -j REJECT

iptables -A 10060 -j ACCEPT

 

说明:对于黑名单,逻辑比较简单,只要把所有包含abcIPREJECT即可,其余的ACCEPT,即使没有第二条命令,默认也是ACCEPT

对于白名单,针对Host头域,原因如上。对于包含HostIP包先做一次mark(标记),然后对此标记的IP包判断是否包含abc

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163439.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python 股票数据接口(深市股票什么开头)

    根据上交所2017年5月公告的文件显示,拿到L1普通行情数据授权的有112家公司,L2授权的有25家,我这里只贴出L2数据的厂家,如果想看L1的授权公司或者深交所的授权情况可以自己去查,太多了就不贴了。1.上海大智慧股份有限公司2.深圳巨灵信息技术有限公司3.浙江核新同花顺网络信息股份有限公司4.北京指南针科技发展股份有限公司5.鼎信汇金(北京)投资管理有限公司6.上海乾隆高科技有限公…

  • Excel2JSON Excel转JSON Excel另存为JSON的技巧

    Excel2JSON Excel转JSON Excel另存为JSON的技巧不过欢迎大家转发到微博、微信、朋友圈~么么哒~JSON是码农们常用的数据格式,轻且方便,而直接手敲JSON却是比较麻烦和令人心情崩溃的(因为重复的东西很多),所以很多码农可能会和我一样,选择用Excel去输入数据,然后再想办法转换成JSON格式。小编今天推荐使用Excel直接另存为JSON的方法。该方法的特点是:除可以正常的直接按照表头作为key,内容作为value输出之外,还可以

  • Python正则表达式_正则表达式有什么用

    Python正则表达式_正则表达式有什么用定义:正则表达式是对字符串(包括普通字符(例如,a到z之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。上面都是官方的说明,我自己的理解是(仅供参考):通过事先规定好一些特殊字符的匹配规则,然后利用这些字符进行组合来匹配各种复杂的字符串场景。比如现在的爬虫和数据分析,字符串校验等等都需要用

  • IGMP协议原理_IGMP协议详解

    IGMP协议原理_IGMP协议详解IGMP协议概述IGMP(InternetGroupManagementProtocol)因特网组管理协议,是TCP/IP协议簇中负责IP组播成员管理的协议。IGMP协议运行于主机与主机直接相连的组播路由器之间,主要用于维护组播成员关系。IGMP发展了三个版本:IGMPv1:定义了基本的组成员查询和报告过程。IGMPv2:添加了组成员快速离开的机制。IGMPv3:成员可以指定接收…

  • WebStorm快捷键(Mac版)

    WebStorm快捷键(Mac版)编辑Command+alt+T用(if..else,try..catch,for,etc.)包住Command+/注释/取消注释的行注释Command+alt+/注释/取消注释与块注释alt+↑向上选取代码块alt+↓向下选取代码块Command+alt+L格式化代码tab,shift+tab调整缩进Contro

  • 海量数据处理思路「建议收藏」

    海量数据处理思路「建议收藏」海量数据处理思路海量数据处理海量数据,不能一次加载到内存中海量数据topK(最大和最小k个数),第k大,第k小的数海量数据判断一个整数是否存在其中海量数据找出不重复的数字找出A,B两个海量url文件中共同的url海量数据topK最大K使用最小堆,最小K使用最大堆,这里以最大K为例海量数据hash分块维护最小堆的K个数据的数据容器堆中数据是topK大的数据,堆顶的数据是第K大数据先将海量数据hash再取模m,分成m个小文件,hash(num)%m,也可以直接取模在

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号