Android iptables相关

1 iptables的原理以及命令

首先linux集成了netfilter库,netfilter工作在tcp/ip协议栈网络层(可以看到tcp头,ip头,mac地址等信息)。然后提供五个hook点,用其他内核模块注册使用,对于iptables内核模块,就注册了这写hook函数,进行工作,iptables工具是提供的操作iptables操作内核模块的工具,前者提供机制,后者指定策略。讲策略写入内核模块,下面是五个hook点的示意图


Android iptables相关_第1张图片
hook

这五个点就是一个数据包进入主机后要经过的路径,一种是发给本机的包,另一种是需要forward的包,流程图如下所示


Android iptables相关_第2张图片
2

iptables正式在这五个点根据用户配置的规则进行数据包的处理。大概就是这个原理。


对于数据包的处理可以分为三种类型

1 nat 转发(改变目标地址或源地址)

2 mangle 修改

3 filter 过滤

所以提供了三张表用于保存这些规则,三张表的名字分别是nat,filter和mangle,当请求进入主机的时候,经过的处理流程大致如吐下


Android iptables相关_第3张图片
iptables表规则执行流程

三张默认的表中包含一些规则链,默认的链有INPUT OUTPUT PREROUTING POSTROUTING FORWARD,分别用于保存五个hook点所执行的操作。


 明白了大致流程后就可以进行规则编写了,就要说说iptables的基本命令

命令大致格式如下

iptables [-t table] command [match] [target/jump]

1  table

-t指定table,默认filter表

2 Commands 名令 

表示要执行的操作,如添加链,增删改规则等

-A 追加

-D 删除

-R 替换(链中根据编号)

-I 指定序号插入,默认序号是1 也就是插入到最前面,注意规则执行时是按照链中规则的顺序执行的

-L 列出

-F 清楚

-Z 计数清0 

-X 删除链(保证不被引用)

-P 默认的target(不符合规则默认的target,见后面target节)

3 match 匹配条件,满足匹配条件的包会执行后面的target,其他的走下链中下一个规则,否则返回父链

-p 协议

-s 源地址

-d 目的地址

-i 进入网卡

-o 出去网卡

-f 分片

-sport 源端口

-dport 目的端口

--tcp-flags 

--limit 限制条件 如每小时三个请求

--limit-burst

--mac-source

--uid-owner

--gid-owner

--pid-owner

--state  (INVALID,ESTABLISHED,NEW 和 RELATED)

--tos


4 Targets/Jumps  后面有不同的参数,请查表

ACCEPT 之后不会匹配这个链的其他

DROP 直接丢弃

REJECT 拒绝,不直接丢弃,返回错误给对方

DNET | SNET 转发

ULOG| NFLOG|LOG

MARK

MASQUEREAD

QUEUE

REJECT

REDIRECT 

RETURN

TOS

TTL



日志记录,iptables提供三种方式,取决于编译选项。包括LOG(打印打/proc/dmesg)

ULOG 通过netlinker将log从内核发送给用户空间,单项

NFLOG通过netlinker将log从内核发送给用户空间,双向


netlinker在内核和用户空间创建socket通信,通过多播的形式将内核log送往用户空间。

对于android中的iptables只提供了ulog和nflog的方式读取log。需要写一个程序从nflog中读取数据,参考

http://www.netfilter.org/projects/libnetfilter_log/doxygen/nfulnl__test_8c_source.html



iptables中文手册

你可能感兴趣的:(Android iptables相关)