linux教程第17章netfilter框架内报文处理课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《linux教程第17章netfilter框架内报文处理课件.pptx》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 教程 17 netfilter 框架 报文 处理 课件
- 资源描述:
-
1、第17章 netfilter框架内报文处理 17.1 netfilter 17.2 iptables和netfilter 17.3 内核模块编程 17.4 5个钩子点 17.5 注册/注销钩子 17.6 钩子的简单处理例子 17.7 一点多个钩子的优先级 17.8 校验和问题教学要求掌握:内核模块编程、5个钩子点、注册/注销钩子、钩子的简单处理例子了解:Netfilter、iptables17.1 netfilter 17.1.1 netfilter简介 17.1.2 netfilter框架 17.1.3 netfilter检查时的表格 17.1.4 netfilter的规则 接收网络数据re
2、cv()网络数据接收依次经过网卡驱动和协议栈程序,以DM9000A网卡为例进行介绍接收数据的过程。发送网络数据send()Linux对网络数据的发送过程的处理与接收过程相反。在一端对socket进行write()的过程中,首先会把要write的字符串缓冲区整理成msghdr的数据结构形式,然后调用sock_sendmsg()把msghdr的数据传送至inet层。对于msghdr结构中数据区中的每个数据包,创建sk_buff结构,填充数据,挂至发送队列。一层层往下层协议传递。17.4.1 netfilter的5个钩子点 在Linux 3.2的内核中,netfilter中共有5个钩子,分别是PRE
3、ROUTING、POSTROUTING、INPUT、FORWARD和OUTPUT。与之前的2.2版本的ipchains相比,多了PRTEROUTING和POSTROUTING,它们是为支持NAT而新增加的。系统提供修改网络流程点 Linux内核中还提供了一种灵活修改网络数据的机制,用户可以利用这种机制获得和修改内核层的网络数据和属性设置。白色白色的框的框为网络数据的流向,协议栈按照正常的方式进行处理和传递。Linux内核在网络数据经过的多个地点设置了检查点设置了检查点,当到达检查点的时候,会检查这些点上是否有会检查这些点上是否有用户设置的处理方法用户设置的处理方法,按照用户的处理规则对网络数据
4、进行处理后,数据会再次按照正常的网络流程传递。17.4.1 netfilter的5个钩子点17.1.1 netfilter简介 Linux环境下的防火墙技术从2.0的内核版本到目前的3.5版本经历了若干的技术革新,逐步发展起来。在Linux kernel 2.3系列的开发过程中形成了目前netfilter的主要架构。用户空间的防火墙管理工具,也相应地发展为iptables。netfilter/iptables的组合方式使用户构建防火墙更加简单,相对于2.2内核中的防火墙,用户可以不用编写或者修改Linux的内核程序(尽管此类工作正变得越来越简单)。17.1.2 netfilter框架 netf
5、ilter在Linux内核中的IPv4、IPv6和DECnet等网络协议栈中都有相应的实现。本书将只介绍其中让大多数读者朋友们感兴趣的IPv4协议栈上netfilter的实现。IPv4协议栈为了实现对netfilter架构的支持,在IP包的IPv4协议栈上的传递过程之中,选择选择了了5个检查点。在这个检查点。在这5个检查点上个检查点上,各引入了各引入了一行对对NF_HOOK()宏函数宏函数的一个相应的调用。这5个参考点被分别命名为PREROUTING、LOCAL-IN、FORWARD、LOCAL-OUT和POSTROUTING。17.1.3 netfilter检查时的表格 netfilter在
6、检查点进行检查,先查看回调函数的合法性,然后根据协议方式决定是否调用。当满足条件时,调用用户挂接的回调函数。netfilter的检查是基于表格进行的,iptables用结构ipt_table表示。17.1.4 netfilter的规则 netfilter的规则用结构struct ipt_entry来表示17.2 iptables和netfilter 17.2.1 iptables简介 17.2.2 iptables的表和链 17.2.3 使用iptables设置过滤规则17.2.1 iptables简介 netfilter的强大功能和灵活性是通过iptables界面来实现的。iptables使
7、用netfilter子系统来增进网络连接、检验和处理方面的能力。使用iptables的第一步是启动iptables服务。在通常的系统中,可以使用以下命令进行:$service iptables start17.2.2 iptables的表和链 iptables的主要构成是表,iptables的操作是对iptables上的表的操作。iptables内置了3个表:nat、mangle和filter。默认情况下是指对FILTER表的操作。1nat表 2MANGLE表 3filter表1nat表 nat表的主要用处是网络地址转换。网络数据包通过NAT操作后,数据包的地址发生了改变,这种改变是根据所定义
8、的规则进行的。2MANGLE表 MANGLE表的主要作用用来对数据包进行标记。MANGLE表有5个内建的链:PREROUTING、POSTROUTING、OUTPUT、INPUT和FORWARD。3filter表 filter表是专门过滤包的,内建3个链,可以对包进行DROP、LOG、ACCEPT和REJECT等操作。17.2.3 使用iptables设置过滤规则 通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令、对信息包进行过滤。通过使用netfilter/iptables系统提供的特殊命令iptables,建立这些规则,并将规则加到内核空间内特定信息
9、包的过滤表内的链上。$iptables-t table command match target 1表(table)2命令(command)3匹配(match)4目标(target)1表(table)-t table选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有3种可用的表选项:filter、nat和mangle。该选项不是必需的,如果未指定,则filter用做默认表。2命令(command)上面这条命令中具有强制性的command部分是iptables命令的最重要部分。它告诉iptables命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则
10、。以下是最常用的一些命令:3匹配(match)iptables命令的可选match部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。匹配分为两大类:通用类型匹配和特定协议的匹配。4目标(target)目标是规则所描述的操作。当数据包与规则匹配的时候,则对数据包执行相应的操作。ACCEPT DROP REJEC RETURN17.3 内核模块编程 17.3.1 内核“Hello World!”程序 17.3.2 内核模块的基本架构 17.3.3 内核模块加载和卸载过程 17.3.4 内核模块初始化和清理函数 17.3.5 内核模块初始化和清理过程的容错处理 17.3.6 内核模
11、块编译所需的Makefile17.3.1 内核“Hello World!”程序 本节通过一个“Hello World”例子对内核模块程序设计进行介绍。1内核的“Hello World”例子 2内核模块和应用程序的调试和函数的不同17.3.2 内核模块的基本架构 17.3.1节的程序展示了内核模块的基本架构,如图17.4所示,一个Linux内核模块包含如下几个部分,其中阴影的部分编写内核模块时必须具有。1模块初始化函数 2模块清除函数 3模块许可证声明、作者、模块描述信息等声明 4模块可导出符号表 5模块加载参数1模块初始化函数 使用命令insmod或者modprobe加载内核模块的时候,会自动
12、调用模块的初始化函数,进行模块的初始化,主要是资源申请。2模块清除函数 使用命令rmmod卸载内核模块的时候,模块清除函数会自动调用,进行模块退出之前的清理工作,主要是状态重置和资源释放。3模块许可证声明、作者、模块描述信息等声明 尽管没有强制要求必须声明许可证,但是在进行模块编写的时候最好指定。内核可以识别如下4种许可方式:GPL、Dual BSD/GPL、Dual MPL/GPL、Proprietary。没有采用以上许可证方式的声明则假定为私有的,内核加载这种模块会被“污染”。4模块可导出符号表 与用户空间编程时的库类似,内核模块中也可以调用其他模块中的例程,或者允许其他模块调用本模块中的
13、函数。insmod的加载过程包含的一个步骤就是把允许导出的符号加到公共内核符号表中,或者使用公共内核符号表来解析加载模块中未定义的符号。5模块加载参数 用户空间的应用程序可以接受用户的参数,Linux的内核模块在加载的时候也可以加载参数。在“Hello World”模块中可以修改模块初始化时的打印语句为:printk(KERN_ALERT Hello%s n,target);17.3.3 内核模块加载和卸载过程 内核模块的加载过程分为用户空间动作和内核空间动作:用户空间负责内核模块加载准备;内核空间负责复制、检查和内核模块初始化等工作。内核加载时,用户输入命令insmod后,会调用init_m
14、odule()。17.3.3 内核模块加载和卸载过程 内核模块的卸载过程也分为用户空间动作和内核空间动作:用户空间的动作负责内核模块卸载准备;内核空间的动作负责卸载前检查、内核模块清理函数的调用、模块清理等工作。17.3.4 内核模块初始化和清理函数内核模块的初始化函数主要进行初始化工作,例如一些内核模块正常运行所需资源(内存、中断等)的申请。模块的初始化采用类似如下代码的形式:static int _init initialize(void)/*内核初始化代码*/return 0;module_init(initialize);内核模块清理函数在本模块卸载时做一些清理工作,例如内存释放,状态
15、重置等,内核模块清理函数的代码框架如下:static void _exit exit(void)/*内核清理代码*/module_exit(exit);17.3.5 内核模块初始化和清理过程的容错处理 在前面介绍的内核初始化和清理函数时提到,在初始化过程和清理过程中会有出错的情况,如果不做容错处理,会产生灾难性的后果:经常的现象是系统宕机。Linux内核代码编写对于容错的要求是在初始化发现错误时立即停止之后的操作进行回复:释放之前的资源、重置状态参数等。Linux内核中经常采用的一种错误处理的框架是采用goto语句构建倒置的容错。17.3.6 内核模块编译所需的Makefile 编译内核的Ma
16、kefile有如下特殊的地方:指定内核模块的编译文件和头文件路径;指定编译模块的名称;obj-m=.给出当前模块的路径。makefileobj-m+=hello.o CURRENT_PATH:=$(shell pwd)#the current kernel version number-$(shell uname-r)LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(shell uname-r)#complie object all:make-C$(LINUX_KERNEL_PATH)M=$(CURRENT_PATH)modulesclean:make-C
17、$(LINUX_KERNEL_PATH)M=$(CURRENT_PATH)cleanmake的执行过程 make执行了两次。第一次执行时是读hello模块的源代码所在目录下的Makefile。第二次执行时是执行/usr/src/linux/下的Makefile时,make 去$(LINUX_KERNEL_PATH)/Makefile中寻找目标modules,即(第10行)指定进入指定的目录即内核源代码目录,调用该目录顶层下的Makefile,目标为modules。M=$(shell pwd)选项让该Makefile在构造modules目标之后返回到模块源代码目录并在当前目录生成obj-m指定的
展开阅读全文