- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Netfilter分析
Netfilter 分析 (2006-12-06 20:06)
分类: Linux kernel
一、 概述
1. Netfilter/IPTables 框架简介
Netfilter/IPTables 是继2.0.x 的IPfwadm、2.2.x 的IPchains 之后,
新一代的Linux 防火墙机制。Netfilter 采用模块化设计,具有良好的可
扩充性。其重要工具模块IPTables 连接到Netfilter 的架构中,并允许
使用者对数据报进行过滤、地址转换、处理等操作。
Netfilter 提供了一个框架,将对网络代码的直接干涉降到最低,并允许
用规定的接口将其他包处理代码以模块的形式添加到内核中,具有极强的
灵活性。
2. 主要源代码文件
Linux 内核版本:2.4.21
Netfilter 主文件:net/core/netfilter.c
Netfilter 主头文件:include/linux/netfilter.h
IPv4 相关:
c 文件:net/ipv4/netfilter/*.c
头文件:include/linux/netfilter_ipv4.h
include/linux/netfilter_ipv4/*.h
IPv4 协议栈主体的部 c 文件,特别是与数据报传送过程有关的部分:
ip_input.c,ip_forward.c,ip_output.c,ip_fragment.c 等
二、Netfilter/IPTables-IPv4 总体架构
Netfilter 主要通过表、链实现规则,可以这么说,Netfilter 是表的容
器,表是链的容器,链是规则的容器,最终形成对数据报处理规则的实现。
详细地说,Netfilter/IPTables 的体系结构可以 为三个大部分:
1. Netfilter 的HOOK 机制
Netfilter 的通用框架不依赖于具体的协议,而是为每种网络协议定义一
套HOOK 函数。这些HOOK 函数在数据报经过协议栈的几个关键点时被调用,
在这几个点中,协议栈将数据报及HOOK 函数标号作为参数,传递给
Netfilter 框架。
对于它在网络堆栈中增加的这些HOOK,内核的任何模块可以对每种协议
的一个或多个HOOK 进行注册,实现挂接。这样当某个数据报被传递给
Netfilter 框架时,内核能检测到是否有任何模块对该协议和HOOK 函数
进行了注册。若注册了,则调用该模块的注册时使用的回调函数,这样这
些模块就有机会检 、修改、丢弃该数据报及指示Netfilter 将该数据报
传入用户空间的队列。
这样,HOOK 提供了一种方便的机制:在数据报通过Linux 内核的不同位
置上截获和操作处理数据报。
2. IPTables 基础模块
IPTables 基础模块实现了三个表来筛选各种数据报,具体地讲,Linux2.4
内核提供的这三种数据报的处理功能是相互间独立的模块,都基于
Netfilter 的HOOK 函数和各种表、链实现。这三个表包括:filter 表,
nat 表以及mangle 表。
3. 具体功能模块
数据报过滤模块
连接跟踪模块 (Conntrack)
网络地址转换模块 (NAT)
数据报修改模块 (mangle)
其它高级功能模块
于是,Netfilter/IPTables 总体架构如图
/photo/24896_061206192251.jpg 所示
三、HOOK 的实现
1. Netfilter-IPv4 中的HOOK
Netfilter 模块需要使用HOOK 来启用函数的动态钩接,它在IPv4 中定义
了五个HOOK (位于文件include/linux/netfilter_ipv4.h,Line 39),
别对应0-4 的hooknum
简单地说,数据报经过各个HOOK 的流程如下:
数据报从进入系统,进行IP 校验以后,首先经过第一个HOOK 函数
NF_IP_PRE_ROUTING 进行处理;然后就进入路由代码,其决定该数据报是
需要转发还是发给本机
文档评论(0)