下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、352008.8 计算机安学术.技术1 引言li nux 操作系统提供了一套完全免费的解决方案,其内置防火墙内核netfilter和 iptables功能非常强大。linux 内核版本中集成了netfilter框架 , 用户空间的防火墙管理工具也相应地发展为iptables。在经历了linux 2.5 和 2.6 的发展以后 , 可以说 ,netfilter/iptables经受住了大量用户广泛使用的考验, 得到了普遍认可,用户可以使用 net f i l t er 在内核空间非常高效地进行分组过滤、网络地址转换和分组重组。因此, 研究如何基于netfilter/iptables 构建满足自己
2、实际需求的防火墙, 具有一定的实际意义。2 linux 内核包过滤防火墙的一般概念包过滤就是一个软件查看所流经的数据包的包头(header) ,由此决定整个数据包是否允许通过。它可能决定丢弃(d rop)这个包,可能接受(accept)这个包(让这个包通过) ,也可能执行其他复杂的操作。在 li nux 系统下,包过滤功能是内建于核心的(作为一个核心模块,或者直接内建),同时还有一些可能运用于数据包之上的技巧。包过滤操作的流程图,如图1 所示。几乎现有的包过滤都遵循此流程所示的工作过程,简linux 内核中 netfilter/iptables防火墙的技术分析单叙述如下 :(1)包过滤规则必须
3、被过滤设备端口存储起来;(2)当包到达端口时,对包报头进行语法分析。大多数包过滤设备只检查ip、tcp或者 udp 报头中的字段;(3)包过滤规则以特殊的方式存储。应用于包的规则顺序与包过滤器规则存储顺序必须相同;(4)若一条规则阻止包传输或接收,则此包不被允许 ;(5)若一条规则允许包传输或接收,则此包可以被继续处理 ;(6)若包不满足任何一条规则,则此包被阻止。图 1 包过滤操作流程图潘 贤(浙江医院信息中心,浙江 杭州 310013)摘 要:linux 提供的基于内核netfilter框架的防火墙, 具有通用性和可扩展性的特点,实现了一种性价比较高的安全方案,可以有效地阻止恶意攻击,成为
4、很多网络安全管理员的选择。该文首先介绍防火墙的主要技术,然后详细介绍了linux内核防火墙netfilter/iptables的实现原理,说明如何应用linux 内核 netfilter和 iptables实现包过滤型防火墙, 保护内部网络的安全。关键词 :防火墙 ;linux ;netfilter; iptablesresearch and analysis on netfilter/iptables firewall in linux kernelpan xian(zhejiang hospital, hangzhou 310013, p.r.china)a bstract: n etfi
5、l ter fram ew ork firew all in li nux k ernel that have the characteri sti c of g eneral a vai labi lity and extensi ble, i m pl em entati on a liable safety schem e effectivel y. t hi s paper introduces the netfi l ter fram ew ork used in a linux kernel after ver sion elaborates on the usage of net
6、f il ter discussing the the many fields which netfilter can be applied in.key words: firewall;linux ;netfilter;iptables36算机安全 2008.8学术.技术3 netfilter 概述近年来, linux得到了迅速的发展, 这既得益于它的自由软件属性和稳定、高效、健壮的内核, 也与 linux是一个高性能的网络操作系统密不可分。自从1995 年ipfwadm 开始进入 linux1.2.1核心 , linux 的防火墙实现有很长的时间了。 ipfwadm实现了标准的tcp/ip
7、包过滤功能 , 比如过滤源地址与目的地址以及端口过滤。早在 1999 年第一个稳定的2.2.0 核心中防火墙的实现就被ipchains替代了 ,ipchains 的新功能包括支持规则链, 碎片包控制 , 较好的网络地址翻译功能(nat) 以及其他一些有用的改进。我们需要明白linux防火墙包括核心级代码 ( 通常是可加载核心模块或者核心源程序的补丁) 和用户级代码 ( 一个配置的工具, 比如 /usr/bin/ipchains, 这是用来插入包规则到核心空间的)。因此 , 只要新的linux防火墙代码被引入, 核心和用户空间的有关代码都要改写。然而 , linux2.4内核中 netfilte
8、r/iptables的出现 , 所带来的最重要变化就是引入了模块化的架构方式。比如 , ipchains和 ipfwadm 兼容模式是通过一个核心模块的设置实现的, 该模块能够在运行的核心中插入, 以便提供相应的通讯功能。在netfilter/iptables中用户自定义编码功能已经成为了可能, 比如过滤一定范围的端口, 根据ttl 值和包的到达时间进行判断, 对自定义的协议进行状态监视 , 对随机的数据包进行监视等, 这些目前都还不是netfilter/iptables 的一部分 , 但是在未来将被实现。 很多很有趣的新模块已经完成了, 包括可以编写一个可加载的核心模块来创建核心级代码, 通
9、过用户级代码实现控制过滤器的行为等等。iptables作为一个管理内核抱过滤的工具,可以加入、插入或者删除核心包过滤表格(链)中的规则。实际上真正来执行这些过滤规则的是netfilter及其相关模块,如图 2 所示。图 2 netfilter、ip层与防火墙模块的关系netfilter是 linux 核心中的一个通用框架,它提供了一系列 “表”(tables), 每个表由苦干 “链”(chains)组成, 而每个链可以由一条或者数条规则(rules)组成。因此,可以理解 netfilter是表的容器,表是链的容器,而链又是规则的容器,如图3 所示。图 3 netfilter通用框架在 linu
10、x 系统中, netfilter框架包含以下 3 部分 :(1) 为每种网络协议(ipv4 、 ipv6 等 ) 定义一套钩子函数 (ipv4定义了 5 个钩子函数 ),这些钩子函数在数据包流过协议栈的几个关键点被调用。在这几个点中,协议栈将把数据包及钩子函数标号作为参数调用netfilter框架。(2) 为内核的任何模块可以对每种协议的一个或多个钩子进行注册,实现挂接,这样,当某个数据包被传递给netfilter框架时,内核能检测是否有模块对该协议和钩子函数进行了注册。若注册了,则调用该模块注册的加调函数,这样,这些模块就有机会检查( 可能还会修改 ) 该数据包、丢弃该数据包及指示netfi
11、lter将该数据包传入用户空间的列队。(3) 为那些排队的数据包是被传递给用户空间的异步地进行处理。一个用户进程能检查数据包、修改数据包,甚至可以重新将该数据包通过离开内核的同一个钩子函数注入到内核中。4 netfilter的柜架原理netfilter是一个嵌入在linux ip协议栈的框架, 在整 个 网 络 流 程 的 若 干 位 置 放 置 一 些 钩 子(h ook) , 且在每个钩子处登记一些处理函数对数据包进行处理。目前 在 i pv4 中 定 义 有 5 个 hook: prerouti ng 、postrouti ng 、i nput、f orward 、o utput。i p
12、 层的 5 个 hook 点的位置如图4 所示。其中,钩子点【 1】-【5】的标识和介绍如下:【1】: nf_i p_pre_routi ng:从数据链路层进入网络层所经过的钩子点;【2】: nf_i p_local_i n:从网络层进入传输层所经过的钩子点 ;372008.8 计算机安学术.技术【3】:nf_i p_forw ard:在 网 络 层 转 发 所 经 过 的钩子点 ;【4】:nf_i p_post_routi ng:从网络层进人数据链路层所经过的钩子点;【5】:nf_i p_local_out:从传输层进入网络层所经过的钩子点。图 4 netfilter框架netfilter的
13、每个钩子点都可以挂接具有指定优先级的函数,每当有数据报经过该钩子点,系统就会按照优先级依次调用挂接在钩子点的函数。可以编写内核模块来挂接钩子函数。数据报从左边进入系统,进行i p校验以后,数据报经过第一个钩子函数nf_i p_pre_routi ng 【1】进行处理 : 然后就进入路由代码,其决定该数据包是需要转发还是发给本机的; 若该数据包是发给本机的,则该 数 据 经 过 钩 子 函 数 nf_i p_local_i n 【2】 处 理 以后传递给上层协议; 若该数据包应该被转发, 则它被nf_i p_forw ard 【3】 处 理 ; 经 过 转 发 的 数 据 报 经 过最后一个钩子
14、函数nf_i p_post_routi ng 【4】处理以后,再传输到网络上。本地产生的数据经过钩子函数nf_i p_local_out【5】 处 理 以 后, 进 行 路 由 选 择 处 理, 然 后 经 过nf_ip_post_routing【4】处理以后发送到网络上。net f i l t er 框架为多种协议提供了一套类似的钩子(hook) ,用一个 struct list_head_hooksnprotonf_max_hooks 二维数组结构存储,一维为协议族,二维为上面提到的各个调用入口。每个希望嵌入netfilter中的模块都可以为多个协议族的多个调用点注册多个钩子函数 ( ho
15、ok),这些钩子函数将形成一条函数指针链,每次协议栈代码执行到nf_hook() 函数时 ( 有多个时机 ),都会依次启动所有这些函数,处理参数所指定的协议栈内容。同一个协议可以注册多个钩子函数,它们由 list指针组成双向链表,并且按照优先级顺序排列。注册函数完成的任务就是找到对应协议的防火墙链表的入口,按照优先级将一个 nf_hook_ops结构的节点插入到相应的钩子链表中,而注销的过程就是将该钩子函数节点从链表中删除。内核模块可以对一个或多个这样的钩子函数进行注册挂接,并且在数据报经过这些钩子函数时被调用,从而模块可以修改这些数据报,并向netfilter返回如下值 ;nf_accept
16、 :继续正常传输数据报nf_drop 丢弃该数据报,不再传输nf_stolen模块接管该数据报,不要继续传输该数据报nf_queue对该数据报进行排队( 通常用于将数据报交由用户空间的进程进行处理 )nf_repeat 再次调用该钩子函数这些钩子函数的原始定义, 可以在 netfilter.h中找到。5 iptables模块在 netfilter框架上的部署iptables 就是指一套标准的挂接在 netfilter框架上的钩子函数以及它们所要用到的数据结构。它有非常强大的功能, 主要分为 4 部分 : 连线跟踪 (connection tracking)、数据报过滤、网络地址转换( nat)
17、 和对数据报进行修改。iptables模块在 netfilter框架上的部署如图5 所示。图 5 iptables与 netfilter结合其 中,s nat 表 示 源 网 络 地 址 转 换,d nat表 示 目的网络地址转换。iptables的数据报过滤模块包含3 张过滤表,如图3所示。它们分布在【 2】、 【3】 、 【5】号钩子点上。每张过滤表都包含 0 个或多个规则,一个规则包含0 个或多个匹配 (match) 和一个目标 (target),当数据报满足一个规则的所有匹配,那么,系统就调用该规则的目标。规则的组织形式如图 6 所示。图 6 过滤表中规则的组织形式在 3 个 钩 子
18、点 上 挂 接 的 过 滤 函 数 分 别 为ipt_hook()、ipt_hook()和 ipt_local_out_hook()。其中,ipt_local_out_hook()与 ipt_hook()函数的区别仅38算机安全 2008.8学术.技术仅在于多了判断原始套接字的过程。ipt _hook ( ) 函数调用 ipt_do_table()函数来进行数据报的过滤。经过对ipt_do_tab1e()函数的源代码分析, 可以得图 5 所示的数据报过滤流程。依照这个流程,数据报会按第一个与之匹配的规则处理, 就算后续还有相匹配的规则,它们都不会真正用到。在流程中可以发现,当存在m个过滤规则时
19、,每个规则包含 n 个匹配,那么数据报过滤的时间复杂度为 0(mn)。在实际应用中考虑的因素会不一样,如当使用limix作为防火墙网关,使用iptables的过滤表,当内网有a 台计算机,每台计算机都需要针对b 个目的地址中的每一个制定不同的 c 个规则,那么数据报过滤的时间复杂度就为0(abc), 这样的过滤效率远远不能满足用户的需要。6 netfilter的配置工具 iptables除了用户想在 netfilter框架基础上编写自己的防火墙处理程序外,在利用net f i l t er 架构自己的防火墙时,与其打交道最多的应该是netfilter的用户配置工具iptables 。iptab
20、les是 ipchains的后继工具,但却有更强的可扩展性, iptables通过插入 / 删除 / 修改规则链中的规则,可以对所有的ip 表进行处理,包括filter、nat及 mangle 3 个表格,及以后扩展的表模块。它支持插件以匹配新的参数和目标动作,因此对netfilter的任何扩展都非常简单,仅仅需要编写一个完成实际目标动作处理的模块和 iptables插件 ( 动态连接库 ) 来添加所需要的一切。l i nux2.4 内核提供的这3 种数据包处理功能都基于netfilter的钩子函数和ip 表。它们是独立的模块。却完美地集成到由netfilter提供的框架中。(1)包过滤f i
21、 l t er 表格不会对数据包进行修改,而只对数据包进行过滤。 iptables优于 ipchalns的一个方面就是它更为小巧和快速。它是通过钩子函数nf_i p_locali n 、nf_forw ard 及 nf_localout 接 入 net f i l t er 框架的,因此对于任何一个数据包只有一个地方对其进行过滤,这相对ipchains来说是一个巨大的改进,因为在ipchains中 , 任意一个被转发的数据包都要遍历3 条链。(2)natnat 表格监 听 3 个 netfilter钩子 函数 :nf_i p_prerouti ng 、n f_ i p_ postrouti ng 及nf_ip_localout。nf_ip_prerouting实 现 对 需 要 转发的数据报的源地址进行地址转换;nf_ip_postrouting对 需 要 转 发 的 数 据 包 的 目 的 地 址 进 行 地 址 转 换;nf_ip_localout 实现对于本地数据报的目的地址的转换。nat表格不同于 fi1ter表格,因为只有新连接的第一个数据报将遍历表格,而随后的数据报将根据第一个数据报的结果进行同样的转换处理。(3)数据报处理ma ng l e 表格在 nf_i p_ prerou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论