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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • firefox如何安装flash(ubuntu火狐浏览器没网)

    一.前言Ubuntu系统因为开源,免费等特性,很受欢迎,在过程XP退役后,许多不愿升级坑人win8的童鞋开始尝试这些免费的系统。Firefox是Ubuntu系统自带的浏览,在Windows上就广受欢迎,唯一一点不好就是作为系统自带的浏览器,竟然没有Flash插件,如图1;而对于刚接触Ubuntu系统的人来说,习惯了Windows的安装软件方式,在Ubuntu上装插件、软件有点不习惯。下面给大家…

    2022年4月13日
    125
  • php redis缓存雪崩,redis雪崩是什么「建议收藏」

    php redis缓存雪崩,redis雪崩是什么「建议收藏」什么是redis的雪崩?下面本篇文章就来给大家简单介绍一下,希望对你们有所帮助。什么是雪崩?因为缓存层承载了大量的请求,有效的保护了存储层,但是如果缓存由于某些原因,整体不能够提供服务,于是所有的请求,就会到达存储层,存储层的调用量就会暴增,造成存储层也会挂掉的情况。缓存雪崩的英文解释是奔逃的野牛,指的是缓存层当掉之后,并发流量会像奔腾的野牛一样,大量访问后端存储。缓存雪崩通俗简单的理解就是:由于…

    2022年9月14日
    4
  • uva 644

    uva 644第一次交用的冒泡排序,Re了,改成快排OK#include#include#include#includeusingnamespacestd;chartemp[100][10];intcmp(constvoid*_a,constvoid*_b){char*a=(char*)_a;char*b=(char*)_b

    2022年6月16日
    26
  • 【Python学习 】Python实现的FTP上传和下载功能

    【Python学习 】Python实现的FTP上传和下载功能一、背景最近公司的一些自动化操作需要使用Python来实现FTP的上传和下载功能。因此参考网上的例子,撸了一段代码来实现了该功能,下面做个记录。二、ftplib介绍Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件。Python2.7系列官方文档:https://docs.python.org/2/lib

    2022年6月12日
    58
  • PyTorch使用LMDB数据库加速文件读取[通俗易懂]

    PyTorch使用LMDB数据库加速文件读取[通俗易懂]PyTorch使用LMDB数据库加速文件读取文章目录PyTorch使用LMDB数据库加速文件读取背景介绍具体操作LMDB主要类`lmdb.Environment“lmdb.Transaction“Imdb.Cursor`操作流程创建图像数据集配合DataLoader参考链接原始文档:https://www.yuque.com/lart/ugkv9f/hbnym1对于数据库的了解较少,文…

    2022年9月29日
    2
  • hybrid华为配置不同交换机,相同vlan 之间互通

    hybrid华为配置不同交换机,相同vlan 之间互通

    2022年3月12日
    220

发表回复

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

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