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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • AC 自动机_模式匹配自动机

    AC 自动机_模式匹配自动机学习AC自动机的前提是要会trie数和KMP字符串匹配,它的功能是能对好多个模式串进行同时查找。比如对4个模式串:hehershisshe在一条母串中:shejjjjj查找每个模式串出现的次数.我们知道KMP算法有个next数组,和KMP类似,AC自动机有一个fail指针数组,用来对整棵trie树进行滚动。AC 自动机:HUD 3065:#i

    2025年6月30日
    0
  • java代码大全及详解_Java练级攻略[通俗易懂]

    java代码大全及详解_Java练级攻略[通俗易懂]Java作为一门使用范围巨大的语言,几乎所有的大型互联网或者分布式架构设计都采用Java相关的技术栈,这也是越来越多的人投入到Java的怀抱中,那Java练级应该怎样做起呢?首先给出几点学习建议:一定要有长时间学习,甚至终生学习的态度;一定要动手实操,无论实例多么简单,建议动手操作一遍;一定要学会思考,思考为什么要这样,而不是那样;不要乱买书,基础的知识是经过很长时间积累的;回顾一下技术的发展,你…

    2022年7月7日
    27
  • 网站敏感词过滤的实现(附敏感词库)「建议收藏」

    网站敏感词过滤的实现(附敏感词库)「建议收藏」现在基本上所有的网站都需要设置敏感词过滤,似乎已经成了一个网站的标配,如果你的网站没有,或者你没有做相应的处理,那么小心相关部门请你喝茶哦。最近在调研Javaweb网站的敏感词过滤的实现,网上找了相关资料,经过我的验证,把我的调研结果写出来,供大家参考。一、敏感词过滤工具类把敏感词词库内容加载到ArrayList集合中,通过双层循环,查找与敏感词列表相匹配的字符串,如果找到以*号替换…

    2022年6月12日
    52
  • oracle的executereader,尝试使用Oracle Data Access ODP.NET 11.2执行ExecuteReader()时出现InvalidOperationExceptio…

    oracle的executereader,尝试使用Oracle Data Access ODP.NET 11.2执行ExecuteReader()时出现InvalidOperationExceptio…这是我第一次与Oracle合作,而且我们都讨厌在你使用特定模型的同时使用外国产品,尽管这是我们的工作,我们必须做到.现在我已经安装了Oracle11g,并复制并引用了Oracle.DataAccess.dll,创建了一个方法,用于打开连接并尝试从服务器上创建的视图中检索某些对象.方法:publicBindingListGetHeaderReceivers(){try{using(Oracl…

    2022年6月20日
    24
  • uml用例图详解_uml模型图

    uml用例图详解_uml模型图用例图的含义由参与者(Actor)、用例(UseCase)以及它们之间的关系构成的用于描述系统功能的动态视图称为用例图。其中用例和参与者之间的对应关系又叫做通讯关联(CommunicationAssociation)。用例图的作用用例图是需求分析中的产物,主要作用是描述参与者与和用例之间的关系,帮助开发人员可视化地了解系统的功能。借助于用例图,系统用户、系统分析人员、系统设计人员、领…

    2022年9月7日
    0
  • 分子生物学数据库

    分子生物学数据库核酸研究(NAR)对所有的分子生物学数据库进行分类,见NARDatabaseSummaryPaperCategoryList,包括:NucleotideSequenceDatabases(核酸数据库)RNAsequencedatabases(RNA序列数据库)Proteinsequencedatabases(蛋白质序列数据库)StructureDatab…

    2022年7月11日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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