Chinaunix首页 | 论坛 | 博客
  • 博客访问: 750940
  • 博文数量: 256
  • 博客积分: 3502
  • 博客等级: 中校
  • 技术积分: 3988
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-17 21:13
文章分类

全部博文(256)

文章存档

2014年(11)

2013年(134)

2012年(111)

我的朋友

分类:

2012-04-21 20:37:01

netfilte主要通过表、链实现规则,可以这么说,netfilter是表的容器,表是链的容器,链是规则的容器,最终形成对报处理规则的实现。

netfilter/iptables的体系结构可以分为以下三个大部分:

1)netfilter的HOOK机制

netfilter的通用框架不依赖于具体的协议,而是为每种网络协议定义一套HOOK函数。这些HOOK函数在数据报经过协议栈的几个关键点时被调用,在这几个点中,协议栈将数据报及HOOK函数标号作为参数,传递给netfilter框架。

对 于它在网络堆栈中增加的这些HOOK,内核的任何模块可以对每种协议的一个或多个HOOK进行注册,实现挂接。这样当某个数据报被传递给 netfilter框架时,内核能检测到是否有任何模块对该协议和HOOK函数进行了注册。若注册了,则调用该模块的注册时使用的回调函数,这样这些模块 就有机会进行检查、修改、丢弃该数据报及指示netfilter将该数据报传入用户空间的队列等操作。

由此可见,HOOK提供了一种方便的机制:在数据报通过Linux内核网络协议栈的不同位置上截获和操作处理数据报。

HOOK在netfilter框架中至关重要,后面将会对其进行详细分析。

2)iptables基础模块

iptables基础模块实现了三个表来筛选各种数据报,具体地讲,Linux2.4内核提供的这三种数据报的处理功能是相互间独立的模块,都基于netfilter的HOOK函数和各种表、链实现。这三个表包括:filter表,nat表以及mangle表。

本文主要分析具有包过滤功能的filter表,对nat表及mangle表只做简要介绍。

3)具体功能模块

数据报过滤模块;

连接跟踪模块(Conntrack);

网络地址转换模块(NAT);

数据报修改模块(mangle);

其它高级功能模块。

具有包过滤功能的filter表是在数据报过滤模块中实现的,所以后面的内容会对该模块做详细分析,但对其它模块只做简单介绍。

netfilter/iptables总体架构如图2-1所示:

 

 

阅读(995) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~