Droidwall原理简析,iptables禁网规则学习

有兴趣的就看看吧

=================


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定义子链
不能与已有的链同名,自定义时,最好先清空所有规则
ü 定义规则的操作
-j 指定规则所做动作
ACCEPT 接受
DROP 丢弃别人可以判断你的系统使用防火墙
REJECT 弹回貌似根本没有打开这个端口
LOG 进行日志,/var/log/message
使用!号的时候 需要在两端加空格表示取反
-p 进行协议进行匹配
[!]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的端口,以英文逗号分隔,没有空格,使用是必须指定协议
-i 以包进入本地所使用的网络接口来匹配
-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
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
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设计
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+