Droidwall原理简析
来源:互联网 发布:thinkphp源码 编辑:程序博客网 时间:2024/06/04 18:58
http://bbs.hikemobile.com/thread-1644-1-1.html
1、简介
Droidwall是一个关于网络防火墙的开源项目,其最大的功能在于控制应用进程的上网权限,核心功能实现是通过调用linux iptables命令。
2、功能现Droidwall开源项目提供的功能:
1)分为两种模式,blacklist和whitelist,blacklist中文释义“黑名单”,禁用的进程;whitelist也即是允许能上网的进程。
2)管理有使用网络权限的进程,最核心的功能,当我们选择好所有的进程后点击menu中的应用规则,iptables就会对相应的进程进行管理。
3)log管理
4)显示规则
5)自定义用户脚本
3、实现原理3.1 iptables简介防火墙分为硬件和软件,硬件cisco netscreen 联想 天融信 ,软件Iptables 包过滤防火墙。
3.1.1 iptables功能 它最核心功能就是根据预设的规则对包进行过滤,达到保护网络安全的目的,以下是过滤包的简单示意图。
当一个网络封包要进入到主机之前,会先经由Filter表进行检查, 检查通过则接受 (ACCEPT) 进入本机取得资源,如果检查不通过,则可能予以丢弃 (DROP) 。
3.1.2 版本发展根据linux内核的发展,不同核心版本使用不同的防火墙软体
Version 2.0:使用 ipfwadm 这个防火墙机制;
Version 2.2:使用的是 ipchains 这个防火墙机制;
Version 2.4 与 2.6 :主要是使用 iptables 这个防火墙机制,不过在某些早期的 Version 2.4 版本亦同时支持 ipchains,好让用户仍然可以使用来自 2.2 版的 ipchains 的防火墙规则,现在基本上都是用iptables。
3.1.3相关命令1)iptables表
首先从iptables 的名称说起,为什么称为ip"tables" 呢? 因为这个防火墙软件里面有多个表格 (table) ,每个表格都定义出自己的默认政策与规则。表格是怎么组织的?每个表格的组成单位就是“chain”规则链,类似于表格中一行数据,每个规则链中定义了一些基本的规则类似于单元格,我们可以自定义规则链。 Linux的 iptables 至少有三个表格,管理本机进出的 filter、管理后端主机 的 nat、管理特殊旗标使用的 mangle (较少使用)。
1.1)filter:主要跟 Linux本机有关,这个是预设的 过滤表,以下是其包含的规则链
INPUT:主要与封包想要进入我们 Linux 本机有关;
OUTPUT:主要与我们 Linux 本机所要送出的封包有关;
FORWARD:这个与Linux 本机比较没有关系,他可以封包『转递』到后端的计算机中,与 nat 这个 table相关性很高。
1.2)nat:这个表格主要在用作来源与目的之 IP或 port 的转换,与 Linux本机较无关,主要与 Linux 主机后的局域网络内的计算机较有相关。以下是其包含的规则链
PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
OUTPUT:与发送出去的封包有关
1.3)mangle:这个表格主要是与特殊的封包的路由旗标有关,早期仅有 PREROUTING 及 OUTPUT 链,不过从 kernel 2.4.18 之后加入了 INPUT 及 FORWARD 链。 由于这个表格与特殊旗标相关性较高,所以像较少使用 mangle 这个表格。
表图
2)命令
这里简单介绍一些比较重要的命令,想知道所有的功能可以使用man查看该命令。
ü 对于规则链的操作
-F 清楚所有规则
iptables -t filter -F INPUT
-X 清除所有自定义规则
-L 列出当前所有规则
iptables -L INPUT -n --line-number -vvv
-A 在所选链的尾加一条规则
-N定义子链
iptables -t filter -F INPUT
-X 清除所有自定义规则
-L 列出当前所有规则
iptables -L INPUT -n --line-number -vvv
-A 在所选链的尾加一条规则
-N定义子链
不能与已有的链同名,自定义时,最好先清空所有规则
ü 定义规则的操作
-j 指定规则所做动作
ACCEPT 接受
DROP 丢弃别人可以判断你的系统使用防火墙
REJECT 弹回 貌似根本没有打开这个端口
LOG 进行日志,/var/log/message
ACCEPT 接受
DROP 丢弃别人可以判断你的系统使用防火墙
REJECT 弹回 貌似根本没有打开这个端口
LOG 进行日志,/var/log/message
使用!号的时候 需要在两端加空格 表示取反
-p 进行协议进行匹配
[!] tcp|udp|icmp 协议列表以英文逗号为分隔符 如tcp,udp 协议前加!号表示取反 如-p! tcp
[!] tcp|udp|icmp 协议列表以英文逗号为分隔符 如tcp,udp 协议前加!号表示取反 如-p! tcp
根据端口进行匹配, 必须指定协议 必须是tcp|udp
--sport [!] port 包的源端口
--dport [!] port 包的目的端口
port 可以用/etc/services 中的协议名来代替 不指定此项,则暗示所用端口 , 连续的端口 20:80表示从20到80所用端口包括20和80 :20 0到20 80:从80到65535 !20 非20端口
多端口匹配 -m multiport 如 iptables -A INPUT -p tcp -m multiport --sport 20,21,22,23,80 最多可以指定15的端口,以英文逗号分隔,没有空格,使用是必须指定协议
--sport [!] port 包的源端口
--dport [!] port 包的目的端口
port 可以用/etc/services 中的协议名来代替 不指定此项,则暗示所用端口 , 连续的端口 20:80表示从20到80所用端口包括20和80 :20 0到20 80:从80到65535 !20 非20端口
多端口匹配 -m multiport 如 iptables -A INPUT -p tcp -m multiport --sport 20,21,22,23,80 最多可以指定15的端口,以英文逗号分隔,没有空格,使用是必须指定协议
-i 以包进入本地所使用的网络接口来匹配
-i 参数指定网卡,适用于 INPUT和PREROUGING
-o 参数指定网卡,适用于 OUTPUT和POSTROUGING
-o 以包离开本地所使用的网络接口来匹配
-i 参数指定网卡,适用于 INPUT和PREROUGING
-o 参数指定网卡,适用于 OUTPUT和POSTROUGING
-o 以包离开本地所使用的网络接口来匹配
另外重点介绍--m参数
1) 基于状态的匹配 -m state
NEW 初始包或源自于您的机器并要发送到目的IP的包都处于 NEW状态 分为OUTPUT和INPUT NEW包
ESTABLISHED 一旦连接看到两个方向上都有通信流,与此附加相关的其它包都被看作处于ESTABLISHED 状态 NEW和ESTABLISHED 之间的区别很重要
RELATED 是那些启动新连接,但有与当前现有连接相关的包。RELATED状态可以用于调整组成多重连接协议(如ftp)的连接,以及与现有连接相关的错误包(如与现有连接相关的 ICMP 错误包)
INVALID 这种包不会被自动废弃;因此您需要插入适当的规则,并设置链策略,以便可以正确处理这些包。
允许主动发出的包iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
NEW 初始包或源自于您的机器并要发送到目的IP的包都处于 NEW状态 分为OUTPUT和INPUT NEW包
ESTABLISHED 一旦连接看到两个方向上都有通信流,与此附加相关的其它包都被看作处于ESTABLISHED 状态 NEW和ESTABLISHED 之间的区别很重要
RELATED 是那些启动新连接,但有与当前现有连接相关的包。RELATED状态可以用于调整组成多重连接协议(如ftp)的连接,以及与现有连接相关的错误包(如与现有连接相关的 ICMP 错误包)
INVALID 这种包不会被自动废弃;因此您需要插入适当的规则,并设置链策略,以便可以正确处理这些包。
允许主动发出的包iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
2) 基于MAC地址的匹配-m mac 仅对于PREROUTING和INPUT链起作用
如: iptables -A INPUT -p tcp --dport 23 -m mac --mac-source00:0C:29:BC:BBB -j REJECT
3) 基于封包数量的匹配 -m limit
允许每秒通过一个icmp包,默认触发条件是5个
iptables -A INPUT -p icmp -m limit --limit 1/s -j ACCEPT
超过部分全部拒绝
iptables -A INPUT -p icmp -j DROP
允许每秒通过一个icmp包,默认触发条件是5个
iptables -A INPUT -p icmp -m limit --limit 1/s -j ACCEPT
超过部分全部拒绝
iptables -A INPUT -p icmp -j DROP
4) 基于UID,GID的限制-m owner
iptables -A OUTPUT -p tcp --dport 23-m owner --uid-owner 500 -j REJECT
iptables -A OUTPUT -p tcp --dport 23 -m owner –gid-owner 500 -jREJECT
注意:-m owner 仅仅输出的封包有用,这个在droidwall开源项目中有使用到。
3.2 android iptables rules设计iptables -A OUTPUT -p tcp --dport 23-m owner --uid-owner 500 -j REJECT
iptables -A OUTPUT -p tcp --dport 23 -m owner –gid-owner 500 -jREJECT
注意:-m owner 仅仅输出的封包有用,这个在droidwall开源项目中有使用到。
droidwall根据上面的规则和命令,在filter表中自定义了4个规则链droidwall、droidwall-3g、droidwall-wifi、droidwall-reject。
3.2.1 droidwall该规则链非常重要,它定义了不同的网口执行不同的规则链
1)规定与数据流量相关的网口的包执行droidwall-3g规则链
iptables -A droidwall -o rmnet+ -j droidwall-3g
iptables -A droidwall -o pdp+ -j droidwall-3g
iptables -A droidwall -o ppp+ -j droidwall-3g
iptables -A droidwall -o uwbr+ -j droidwall-3g
iptables -A droidwall -o wimax+ -j droidwall-3g
iptables -A droidwall -o vsnet+ -j droidwall-3g
iptables -A droidwall -o ccmni+ -j droidwall-3g
iptables -A droidwall -o usb+ -j droidwall-3g
2)规定与wifi相关网口的包执行droidwall-wifi规则链
iptables -A droidwall -o tiwlan+ -j droidwall-wifi
iptables -A droidwall -o wlan+ -j droidwall-wifi
iptables -A droidwall -o eth+ -j droidwall-wifi
iptables -A droidwall -o ra+ -j droidwall-wifi
3.2.2 droidwall-3g该规则链中的规则,根据用户选择的进程添加对应的规则,iptables命令怎么来限制进程,是通过传入uid来进行限制的。在讲解iptables命令时有提到,-m owner--uid-owner uid,且该命令对于书包有效。例如要限制uid 1000进程所有的包
iptables -A droidwall-3g -m owner --uid-owner 1000 -jdroidwall-reject
-A droidwall-3g规则链中添加规则
-m owner --uid-owner 1000表示当用户进程为1000的包时执行-j后面的规则
-j droidwall-reject 执行droidwall-reject规则链,注意-j后面跟的可能是一个具体的动作比如说ACCEPT 、DROP等操作,也可以是一个规则链。
3.2.3 droidwall-wifi该规则链中的规则定义与droiwall-3g大同小异。
iptables -A droidwall-wifi -m owner --uid-owner 1000 -jdroidwall-reject
3.3.4 droidwall-reject该规则链最简单,它做了些什么呢?下面来看看它添加了哪些规则
iptabales -A droidwall-reject -j REJECT
该规定的定义当执行droidwall-reject规则链时,将包直接丢弃。
4、总结 droidwall的核心实现原理就是基于iptables对于包的过滤来实现的。应用进程需要上网就必须发送上网的请求包,iptables根据设置的规则丢掉请求包,这些进程就没办法上网。
- Droidwall原理简析
- Android 开源项目Droidwall初探记录
- Android上强大的网络防火墙Droidwall
- Android 网络防火墙--开源项目Droidwall
- 安卓droidwall引起域名无法解析问题解决
- 简析断点续传原理
- epoll原理简析
- https 原理简析
- Hbase原理简析
- Retrofit原理简析
- Gson原理简析
- Thrift原理简析
- Adaboost原理简析
- 红黑树原理简析
- Retrofit 原理简析
- HooK原理简析
- 推荐系统原理简析
- cpu工作原理简析
- SAP订单状态最详细的解释
- 面向对象分析设计
- 基础知识
- 农业技术推陈出新 果蔬种植走入百姓家庭
- quartz2D 学习 2
- Droidwall原理简析
- UVA 11991 Easy Problem from Rujia Liu?
- 触发浏览器的click事件,浏览器之间兼容
- java冒泡排序
- 掀起C++ 11的神秘面纱(2)
- android常用广播集锦
- 腾讯面试题-----JavaScript中arguments对象解析
- android-设置全屏,去除状态栏和标题栏
- 判断浏览器类型