前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android下基于Iptables的一种app网络访问控制方案(一)[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-09-15 11:34:15
3K0
发布2022-09-15 11:34:15
举报
文章被收录于专栏:全栈程序员必看

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

1.什么是Iptable?

百度百科对于Iptables有详细的介绍。简单地说,Iptables是Linux内核提供的一套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的时候,会为每一个应用分配一个userId,userId在此设备上将唯一且不再变化(但同一个app在不同的设备上userId可能不同)。另外,应用也可以通过在AndroidManifest.xml中通过android:shareUserId字段来和其他应用共享userId,但有其他限制,比如签名等,此处不展开。

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

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

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

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

iptables -N 10060

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

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

语义说明:向OUTPUT规则链附加一条规则:如果IP信息报匹配到uid是10060,则跳转(-j)到规则链10060。iptables支持区分不同的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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档