




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第iii页毕业设计(论文)设计(论文)题目: 基于 linux 的网络防火墙 系统的设计与实现 基于 linux 的网络防火墙系统的设计与实现摘 要防火墙技术作为一种建立在现代通信网络技术和信息安全技术基础上的应用性安全技术,近年来也成为了安全技术中的一个热门,它可以在一定程度上保护计算机和网络的安全,避免可能的损失。netfilter 是 linux 2.4 和 2.6 版本内核中实现的包过滤框架。它工作在内核空间中,大量地避免了在内核空间和用户空间之间数据交换,速度快,高效,而功能强大。在本课题中基于 linux 平台实现了一个简单的防火墙系统。它主要分为两个部分:用户界面和防火墙后台。
2、用户界面是与用户交流的接口,它主要由 gtk+ 编写而成,另外为了对用户更加友好也使用了一些 gnome 库。它主要的功能是:用户可以方便的查看和控制防火墙的状态;查看和转存防火墙的事件日志;设置防火墙的策略,定制防火墙规则。而防火墙后台则是防火墙功能的真正实现部分,它不信赖于用户界面而运行,运行于后台,对用户来说不可见。它基于 linux 系统的 netfilter/iptables 实现的。测试结果表明,本防火墙的能根据设置的安全策略能通过防火墙的数据包进行访问控制,阻止不符合规则的包进出本防火墙。关键词:防火墙;包过滤;linux;netfilter;iptablesdesignatio
3、n and realization of firewallunder linuxabstractfirewall technology, as a applicating security technology based on communicating network technology and information security technology, is a hot topic in the field of security technology in recent years. it is able to protect computer and network in g
4、eneral level to prevent computer and netword from attacking via network.netfilter is a framework in linux 2.4 version and 2.6 kernel. it runs in the kernel space to get rid of data transfer between kenerl space and user space. fast, efficient and powerful. in this issue, it is a simple firewall syst
5、em based on linux platform. there are two parts: user interface and firewall backend. user interface, communicate with user, is developed by gtk+. what is more, it depends on some gnome library for friend user experience. the main functions: check and control the firewall status easily, check and sa
6、ve the firewalls event log, config the firewalls policy, speicalize the firewalls rule. and firewall backend is the real part in the main functions. it runs without depending user interface, work in the backend, invisuable to user. it is based on netfilter/iptables in linux system.test report means
7、that the firewall can act access control (forbid the packet do not follow the rule in the firewall) via firewalls packet filter depending on the configuration of security policy.key words: firewall;packet filter;linux;netfilter;iptables 目 录1.绪论41.1.课题背景及目的41.1.1.网络是不安全的41.1.2.网络安全需要防火墙的保护41.2.课题现状52
8、.基础知识62.1.防火墙的概念62.2.防火墙类型72.3.linux简介83.linux 中的包过滤框架93.1.netfilter/iptables 简介93.2.iptables 的使用104.防火墙系统的设计与实现194.1.防火墙系统的设计方案194.1.1.用户界面194.1.2.防火墙后台194.2.防火墙系统的实现204.2.1.用户界面的实现204.2.2.防火墙后台实现245.结 论256.致 谢267.参 考 文 献271. 绪论1.1. 课题背景及目的1.1.1. 网络是不安全的一、 internet 是不安全的在建设internet 的初期, 其建设者们认为安全不是
9、一个问题。internet在其早期是一个开放的为研究人员服务的网际网,是完全非赢利性的信息共享载体,所以,几乎所有的internet协议都没有考虑安全机制。这一点从internet上最通用的应用ftp, telnet和电子邮件中的用户口令的明文传输以及ip报文在子网段上的广播传递就充分地体现出来。近些年来,internet的性质和用户的情况发生了巨大的变化,使得internet的安全问题显得越来越为突出。随着internet的全球普及和商业化,用户很多非常私人化,如信用卡号等和其自身利益相关的私有信息也通过internet传输,而且 interneth 越来越多的信息受到了非法的访问, 其安全
10、性也成为人们日益关注的问题。二、 局域网也不是安全的目前的局域网基本上都采用以广播为技术基础的以太网,任何两个节点之间的通信数据包,不仅为这两个节点的网卡所接收,也同时为处在同一以太网上的任何一个节点的网卡所截取。因此,黑客只要接入以太网上的任一节点进行侦听,就可以捕获发生在这个以太网上的所有数据包,对其进行解包分析,从而窃取关键信息,这就是以太网所固有的安全隐患。1.1.2. 网络安全需要防火墙的保护近年来由于网络的广泛应用,大多数的计算机都已经连接到网络之中,而这意味着可能受到来自网络的威胁和攻击,安全无法完全保证。因而网络安全越来越受到人们的关注。防火墙技术作为一种建立在现代通信网络技术
11、和信息安全技术基础上的应用性安全技术,近年来也成为了安全技术中的一个热门,它可以在一定程度上保护计算机和网络的安全,避免系统和网络受到来自外部网络和内部网络的攻击。虽然防火墙并不能保证系统和网络100% 安全,但却十分必要。因此防火墙已经越来越多地应用于网络互连环境之中了。本课题主要是基于 linux系统设计并实现一个网络防火墙。通过在linux环境中使用 netfilter/iptables 开发一个简单的防火墙,以深入了解 linux, linux 下的程序设计,防火墙基本概念、运转机制、包过滤过程等技术。1.2. 课题现状防火墙是目前最为流行也是使用最为广泛的一种网络安全技术。在构建安全
12、网络环境的过程中,防火墙作为第一道安全防线,正受到越来越多用户的关注。防火墙是一个系统,主要用来执行两个网络之间的访问控制策略。它可为各类网络提供必要的访问控制,但又不造成网络的瓶颈,并通过安全策略控制进出系统的数据,保护计算机系统的关键资源,以防止用户受到不必要的损失。2. 基础知识2.1. 防火墙的概念那么到底什么是防火墙呢?防火墙是一个或一组系统,它在网络之间执行访问控制策略。典型的防火墙建立在一个服务器或主机的机器上,亦称“堡垒主机”,它是一个多边协议路由器。这个堡垒主机连接两个网络:一边与内部网相连,另一边与外部网相连。它的主要作用除了防止未经授权的来自或对因特网的访问外,还包括为安
13、全管理提供详细的系统活动的记录。从下图可以看出,所有来自因特网的传输信息或从内部网络发出的停息都必须穿过防火墙。因此,防火墙能够确保电子邮件,文件传输,远程登录或特定的系统信息交换的安全。因特网防火墙内部网防火墙的基本功能如下:1) 防火墙能强化安全策略了;2) 防火墙能有效地记录因特网上的活动;3) 防火墙限制暴露用户点;4) 防火墙是一个安全策略的检查站;防火墙的实际工作方式各不相同,但是在原则上,防火墙可以被认为是这样一对机制:一种机制是拦阻传输流通行,另一种机制是允许传输流通过。一些防火墙偏重拦阻传输流的通行,而另一些防火墙则偏重允许传输流通过。了解有关防火墙的最重要的概念可能就是它实
14、现了一种访问控制策略。一般来说,防火墙在配置上是防止来自外部世界未经授权的交互式登录的。这大大有助于防止破坏者登录到你网络中的计算机上。一些设计更为精巧的防火墙可以防止来自外部的传输流进入内部,但又允许内部的用户可以自由地与外部通信。如果你安装上防火墙的话,它可以保护你免受网络上任何类型的攻击。防火墙的另一个非常重要的特性是可以提供一个单独的“检查站”,在“检查站”上设置安全和审计检查。与计算机系统正受到某些人利用调制解调器拨入攻击的情况不同,防火墙可以发挥一种有效的“电话监听”和跟踪工具的作用。防火墙提供了一种重要的记录和审计功能;它们经常可以向管理员提供一些情况概要,提供有 关通过防火墙的
15、传输流的类型和数量,以及有多少次试图闯入防火墙的企图等信息。2.2. 防火墙类型在概念上,主要有两种类型的防火墙:网络级防火墙和应用级防火墙。这两种类型防火墙的差异并不如想像中那样大,而且最新的技术已经使两者越来越模糊了,对于它们两个哪个“更好”或“更坏”已经不再那么明显和易于区分了。网络级防火墙一般根据源、目的地址做出决策,输入单个的ip包。一台简单的路由器是传统的网络级防火墙,因为它不能做出复杂的决策,不能判断出一个包 的实际含意或包的实际出处。现代网络级防火墙已变得越来越复杂,可以保持流经它的接入状态、一些数据流的内容等有关信息。许多网络级防火墙之间的一个重要差别是防火墙可以使传输流直接
16、通过,因此要使用这样的防火墙通常需要分配有效的ip地址块。网络级防火墙一般速度都很快,对用户很透明。应用级防火墙一般是运行代理服务器的主机,它不允许传输流在网络之间直接传输,并对通过它的传输流进行记录和审计。由于代理应用程序是运行在防火墙上的软件部件,因此它处于实施记录和访问控制的理想位置。应用级防火墙可以被用作网络地址翻译器,因为传输流通过有效地屏蔽掉起始接入原址的应用程序后,从一面进来,从另一面出去。在某些情况下,设置了应用级防火墙后,可能会对性能造成影响,不过有时候也可以提高网络的性能,因为在防火墙处可以对通过网络的数据进行高速缓存,另外可能会导致防火墙变得不太透明。早期的应用级防火墙,
17、对于最终用户很不透明,并需要对用户进行培训。应用级防火墙一般可以提供更加详尽的审计日志,比网络级防火墙实施更保守的安全模型。防火墙未来的位置应当处于网络级防火墙与应用级防火墙之间的某一位置。网络级防火墙可能对流经它们的信息越来越“了解”,而应用级防火墙可能将变得更加“低级”和透明。最终的结果将是能够对通过的数据流记录和审计的快速包屏蔽系统。2.3. linux简介linux是一个完全重写的自由开放源代码的类 unix 的系统。它的发展历史可以追溯到 1990 年。芬兰赫尔辛基大学的一名学生 linus torvalds 最初使用汇编语言写了一个在 80386 保护模式下处理多任务交换的程序,后
18、来他又从 minix受到启发,要编写一个比 minix 更好的系统,于是他就开始完成了一些硬件的驱动和一个小的文件系统然后 linux 0.0.1 就这样诞生了。接下来在 1991 年 10 月 5 日,linus 发布了 linux 0.0.2, 这个版本中它已经可以运行 bash 和 gcc 了。这个版本的 linux 引起了很多计算机爱好者的注意,很多程序员通过网络参与到了 linux 内核的开发。到 1993 年底, linux 的 1.0 终于诞生了。随后 linux 被移植到了越来越多的平台之上,成为了最受欢迎的操作系统之一。如今它的内核最新稳定版本已经达到 8。l
19、inux 的具有以下主要特点:1) 与 unix 高度兼容2) 高度的稳定性和可靠性3) 完全开放源代码,价格低廉4) 安全可靠,无后门linux 这些特点成为了我们选择 linux 系统作为防火墙系统理由。事实上另外一些开源操作系统也具体相似的特点(如 freebsd, netbsd, openbsd等), 不过个人较熟悉 linux,所以就选择了它。3. linux 中的包过滤框架3.1. netfilter/iptables 简介netfilter/iptables是在 linux 系统中实现的包过滤器框架,它完全是自由,开源,免费的,它功能强大,使用灵活,并且可以对流入和流出的信息进行
20、细化的控制, 它可以运行各种架构的机器上,它非常高效,即使是非常老的机器或者非常低档的机器上都运行的非常好。iptabels/netfilter 是 linux 2.4 和 linux 2.6 系列内核的包过滤框架。在此之前linux 内核1.1系列所使用的alan cox从bsd unix中移植过来的ipfw。在2.0系列的linux内核中,jos vos和其它一些程序员对ipfw进行了扩展,并且添加了ipfwadm用户工具。在2.2系列内核中, russell和michael neuling做了一些非常重要的改进,也就是在该系列的内核中,russell添加了帮助用户控制过虑规则的ipcha
21、ins工具。后来,russell又在 2.4 系列的内核中完成了新的包过滤框架即现在的netfilter。ipfw linux 1.1ipchains linux 2.2iptables linux 2.4iptables linux 2.6在 netfilter/iptables 框架中,它可以实现包过滤、nat/napt和数据包的分割等功能。 netfilter它工作在 linux 内核之中,它在内核网络协议栈中设置了一系列的勾子函数从而允许内核模块注册一些回调函数对协议栈里的数据包进行相应的处理。它主要包括netfilter, ip_tables, 连接跟随 (ip_conntrack,
22、 nf_conntrack) 和nat 子系统。而iptables则是让用户自定义包过滤规则集的用户态工具。目前netfiler/iptables主要特点如下:1) 无状态的包过滤 (包括ipv4 和ipv6)2) 有状态的包过滤(仅包括ipv4)3) 网络地址转换和网络地址端口转换4) 可变性和可扩展性强的架构5) 多层次的api方便第三方扩展6) 插件众多,方便应用3.2. iptables 的使用作为防火墙典型的配置是两个网卡:一个流入,一个流出。包过滤器读取流入和流出的数据包的报头,将它们与规则集相比较,被可接受的数据包从一个网卡转发至另外一个网卡。对于被拒绝的数据包,则被丢弃或者按照
23、管理员自定义的方式来处理。iptables是介于用户和系统内核一个工具,它通过向内核中的 netfilter提供包过滤的规则如是否接受来自某一个或某些源地址、到某个或某些目的地址、特定协议类型的数据包。防火墙软件或者网络管理员可以通过命令iptables 根据安全要求和网络状况来建立相应的规则,将其添加到位于内核中,实现防火墙功能。iptables 的使用语用方法如下:iptables -t table -ad chain rule-specification options iptables -t table -i chain rulenum rule-specification optio
24、ns iptables -t table -r chain rulenum rule-specification options iptables -t table -d chain rulenum options iptables -t table -lfz chain options iptables -t table -n chain iptables -t table -x chain iptables -t table -p chain target options iptables -t table -e old-chain-name new-chain-name 命令iptabl
25、e 用于设置,维护和查看linux 内核中的ip 包过滤规则表。内核中有数个表,而每个表包含都包含数个系统内建的规则链和用户自定义的规则链。 每个链包括一系列可以与某一类包匹配的规则。每一个规则都要指定对与其匹配的包要做的事情,这个被叫做“目标”, 而它很可能只是跳转到在同的规则表之中一个用户自定义的规则链中。如果不想用标准的表,就要在table处指定表名。一般情况下可以不指定要使用的表,因为iptables 默认使用filter表来执行所有的命令。也没有必要非得在一开始就指定表名,实际上几乎可在规则的任何地方指定表名,也就是与它在命令行的顺序无关。事实上,把表名放在开始处已经是约定俗成的标准
26、。指定表名和把表名放在 iptables 参数的开始是一种非常好的习惯,它让 iptables 的规则文件更为易读,易于理解而不是像写的非常难看的代码的难看。“command”告诉 iptables该做什么,比如:插入一个规则,还是在链的末尾增加一个规则,还是删除一个规则。下面会仔细地介绍。 . “match”细致地描述了包的某个特点,以使这个包区别于其它所有的包。在这里,我们可以指定包的来源ip 地址、网络接口、端口、协议类型,或者其他什么。下面我们将会看到许多不同的match。 最后是数据包的目标所在“target”。若数据包符合所有的match,内核就用target来处理它,或者说把包发
27、往target。比如,我们可以让 内核把包发送到当前表中的其他链(可能是我们自己建立的),或者只是丢弃这个包而不做任何处理,或者向发送者返回某个特殊的应答。下面我们来逐个讨论这些选项: 表(table)-t table选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三种可用的表选项:filter、nat 和 mangle。该选项不是必需的,如果未指定,则filter用作缺省表。下面介绍各表实现的功能。filterfilter 表用来过滤数据包,我们可以在任何时候匹配包并过滤它们。我们就是在这里根据包的内容对包做drop或accept的。当然,我们也可以预
28、先在其他地方做些过滤,但是这个表才是设计用来过滤的。几乎所有的target都可以在这儿使用。natnat表的主要用处是网络地址转换,即network address translation,缩写为nat。做过nat操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行的。属于一个流的包只会经过这个表一次。如果第一个包被允许做nat或masqueraded,那么余下的包都会自动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个的被 nat,而是自动地完成。这就是我们为什么不应该在这个表中做任何过滤的主要原因。prerouting 链的作用是在包刚刚到达防火墙时改变它的目的地址
29、,如果需要的话。output链改变本地产生的包的目的地址。postrouting链在包就要离开防火墙之前改变其源地址此表仅用于nat,也就是转换包的源或目标地址。注意,只有流的第一个包会被这个链匹配,其后的包会自动被做相同的处理。实际的操作分为以下几类: dnat snat masqueradednat操作主要用在这样一种情况,你有一个合法的ip地址,要把对防火墙的访问重定向到其他的机子上(比如dmz)。也就是说,我们改变的是目的地址,以使包能重路由到某台主机。 snat改变包的源地址,这在极大程度上可以隐藏你的本地网络或者dmz等。一个很好的例子是我们知道防火墙的外部地址,但必须用这个地址替
30、换本地网络地址。有了这个操作,防火墙就能自动地对包做snat和de-snat(就是反向的snat),以使lan能连接到internet。如果使用类似 /24这样的地址,是不会从internet得到任何回应的。因为iana定义这些网络(还有其他的)为私有的,只能用于lan内部。masquerade的作用和masquerade完全一样,只是计算机的负荷稍微多一点。因为对每个匹配的包,masquerade都要查找可用的ip地址,而不象snat用的ip地址是配置好的。当然,这也有好处,就是我们可以使用通过ppp、 pppoe、slip等拨号得到的地址,这些地址可是由isp的dhc
31、p随机分配的。mangle这个表主要用来mangle数据包。我们可以改变不同的包及包头的内容,比如 ttl,tos或mark。 注意mark并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙内的其他的规则或程序(如tc)可以使用这种标记对包进行过滤或高级路由。这个表有五个内建的链: prerouting,postrouting, output,input和 forward。prerouting在包进入防火墙之后、路由判断之前改变包,postrouting是在所有路由判断之后。 output在确定包的目的之前更改数据包。input在包被路由到本地之后,但在用户空间的程序看到它之前改
32、变包。注意,mangle表不能做任何 nat,它只是改变数据包的ttl,tos或mark,而不是其源目的地址。nat是在nat表中操作的,以下是mangle表中仅有的几种操作: tos ttl marktos操作用来设置或改变数据包的服务类型域。这常用来设置网络上的数据包如何被路由等策略。 注意这个操作并不完善,有时得不所愿。它在internet上还不能使用,而且很多路由器不会注意到这个域值。换句话说,不要设置发往internet的包,除非你打算依靠tos来路由,比如用iproute2。ttl操作用来改变数据包的生存时间域,我们可以让所有数据包只有一个特殊的ttl。它的存在有一个很好的理由,那
33、就是我们可以欺骗一些isp。为什么要欺骗他们呢?因为他们不愿意让我们共享一个连接。那些isp会查找一台单独的计算机是否使用不同的ttl,并且以此作为判断连接是否被共享的标志。mark用来给包设置特殊的标记。iproute2能识别这些标记,并根据不同的标记(或没有标记) 决定不同的路由。用这些标记我们可以做带宽限制和基于请求的分类。命令(command)命令中必要的组成部分command是iptables命令的最重要部分。它告诉 iptables 命令要做什么,例如,插入规则、将规则添加到规则链的末尾或删除规则。详细用法如下:1) 附加规则-a, -append chain rule-speci
34、fication 把一个或多个规则附加到所选择的规则链中的最后。如果源或者目的名称可以解析成多个地址的话,对于每一个可能的地址组合相会添加相应的规则。 2) 删除规则-d, -delete chain rule-specification -d, -delete chain rulenum 从选择的规则链中删除一个或多个规则。这个命令有两种使用方式: 指定规则在规则链中的序号(从1 开始) 或者要匹配的规则。3) 插入规则-i, -insert chain rulenum rule-specification 把一个或多个规则插入到所选择的规则链中的指定的规则序号之前。因此, 如果规则序号为1
35、,则该条规则将被插入该规则链的头部。如果没有指定序号,这也就是默认的序号。4) 替换规则-r, -replace chain rulenum rule-specification 替换规则链中的某一条规则。如果源/目的名称可以解析到多个地址,命令将会失败. 同样规则序号从1 开始。 5) 列出规则-l, -list chain 列出选择的规则链中的所有的规则。如果没有指定规则链就列出所有的规则链。和其它的iptables 命令一样,它应该于特定的规则链(默认是filter)因此列出 nat 规则使用如下命令: iptables -t nat -n -l请注意通常它会用 n 选项一起使用,可以避
36、免长时间的反向 dns 解析。另外也可以和-z 选项一起使用,这样会原子地列出规则链中的规则和将规则链中的计数清零。其它参数也会影响命令的输出。要显示原始的规则请使用命令: iptables -l -v6) 清除规则链-f, -flush chain 清除指定规则链中 (如果没有指定就是规则表中所有的链). 这个命令与一条一条的删除规则等价。7) 归零规则链-z, -zero chain 将所有规则链的包和字节计数器归零。可以将之与 l, -list 选项组合查看这些计数器的在被归零之前的值(见上)。8) 创建规则链-n, -new-chain chain 创建指定名称的一个用户自定义的规则链
37、。它的名称不得与已有的规则链相同。9) 删除规则链-x, -delete-chain chain 删除一个可选的用户自定义的规则链。规则链必须没有被引用。否则你必须删除或者替换引用这该规则链的规则。另外该规则链也必须为空即不能包含任何规则。如果没有任何参数,程序会试图删除所以不是内建的规则链。 10) 设置规则链的策略-p, -policy chain target 设置规则链的策略到给定的目标,有效的目标可以查看目标小节。注意仅只有内建的规则链可以有策略,用户自定义的规则链不可以有。内建的和用户自定义的规则链都不可能是策略目标。11) 重命名规则链-e, -rename-chain old-
38、chain new-chain 将指定的规则链重命名到提供的名字。它并不会影响规则表。. 12) 帮助-h 帮助,列出命令的简单语法。在使用iptables时,如果必须的参数没有输入就按了回车,那么它就会给出一些提示信息,告诉你需要哪些参数等。iptables的选项-v用来显示iptables的版本,-h给出语法的简短说明。匹配(match)iptables命令的可选match部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。可把它们归为五类:第一类是generic matches(通用的匹配),适用于所有的规则;第二类是tcp matches,顾名思义,这只能用于tcp包;
39、第三类是udp matches, 当然它只能用在udp包上了;第四类是icmp matches ,针对icmp包的;第五类比较特殊,针对的是状态,指所有者和访问的频率限制等。在此,只介绍通用匹配,熟悉了通用匹配,其它的几种也就比较容易理解了。目标(target)我们已经知道,目标是由规则指定的操作,那些与规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。用于建立高级规则的目标,如log、redirect、mark、mirror 和masquerade等。状态机制状态机制是iptables中特殊的一部分,其实它不应该叫状态机制,因为它只是一种连接跟踪机制。但是,很
40、多人都认可状态机制这个名字。连接跟踪可以让 netfilter知道某个特定连接在iptables里,包是和被跟踪连接的四种不同状态有关的。它们是new、established、related和invalid。使用-state匹配操作,我们能很容易地控制“谁或什么能发起新的会话”。所有在内核中由netfilter的特定框架做的连接跟踪称作conntrack(就是connection tracking的首字母缩写)。conntrack可以作为模块安装,也可以作为内核的一部分。大部分情况下,我们需要更详细的连接跟踪。因此, conntrack中有许多用来处理tcp、udp或icmp协议的部件。这些模
41、块从数据包中提取详细的、唯一的信息,因此能保持对每一个数据流的跟踪。 这些信息也告知conntrack流当前的状态。例如,udp流一般由他们的目的地址、源地址、目的端口和源端口唯一确定。在以前的内核里,我们可以打开或关闭重组功能。然而,自从iptables/netfilter,尤其是连接跟踪被引入内核,这个选项就被取消了。因为没有包的重组连接跟踪就不能正常工作。现在重组已经整合入conntrack,并且在conntrack启动时自动启动。不要关闭重组功能,除非你要关闭连接跟踪。除了本地产生的包由output链处理外,所有连接跟踪都是在prerouting链里进行处理的,意思就是说iptable
42、s会在prerouting 链里重新计算所有的状态。如果我们发送一个流的初始化包,状态就会在output链里被设置为new,当我们收到回应的包时,状态就会在 prerouting链里被设置为established。如果第一个包不是本地产生的,那就会在prerouting链里被设置为new状态。综上所述,所有状态的改变和计算都是在nat表中的prerouting链和output链里完成的。正如前面说的,包的状态依据ip所包含的协议不同而不同,但在内核外部,也就是用户空间里,只有4种状态:new、established、related和invalid。它们主要是和状态匹配一起使用。newnew说明
43、这个包是我们看到的第一个包。意思就是,这是conntrack模块看到的某个连接第一个包,它即将被匹配了。比如,我们看到一个syn包,是我们所留意的连接的第一个包,就要匹配它。第一个包也可能不是syn包,但它仍会被认为是new状态。establishedestablished已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包。处于established状态的连接是非常容易理解的。只要发送 并接到应答,连接就是established的了。一个连接要从new变为established,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防火墙转发的。icmp的错误和重定向等信息包也被看作
44、是established,只要它们是我们所发出的信息的应答。relatedrelated是个比较麻烦的状态。当一个连接和某个已处于established状态的连接有关系时,就被认为是related的了。换句话说,一个连接要想是related的,首先要有一个established的连接。这个established连接再产生一个主连接之外的连接,这个新的连接就是 related的了,当然前提是conntrack模块要能理解related。ftp是个很好的例子,ftp-data 连接就是和ftp-control有related的。invalidinvalid说明数据包不能被识别属于哪个连接或没有任何
45、状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的icmp错误信息。一般地,我们drop这个状态的任何东西。这些状态可以一起使用,以便匹配数据包。这可以使我们的防火墙非常强壮和有效。以前,我们经常打开1024以上的所有端口来放行应答的数据。但是自从有了状态机制,就不需再这样了。因为我们可以只开放那些有应答数据的端口,其他的都可以关闭。这样就安全多了。4. 防火墙系统的设计与实现4.1. 防火墙系统的设计方案在本课题中设计的防火墙系统被命名为smfirewall,它由本人网名缩写加 firewall 构成,它是一个基于 linux 系统上的 netfilter/iptabl
46、es 设计实现的防火墙。在设计方案中它主要分为两部分:用户界面和防火墙后台。4.1.1. 用户界面它是一个界面友好,使用简单的图形程序,对用户隐藏了防火墙的各个细节,即便一个对 linux 系统或防火墙不是非常了解的普通用户也能完成防火墙的设置和正常使用防火墙。它主要有三个功能:1. 能显示和控制当前的防火墙状态,防火墙的事件数目,当前系统的 tcp 连接等。给用户对防火墙和网络状态一个直观的了解。2. 显示防火墙的事件日志,在程序中它列表当前的防火墙日志,用户可以使方便的查看,也可以将日志另外保存。3. 可以方便查看,添加,编辑和删除防火墙的规则。4.1.2. 防火墙后台它是一个在后台运行的
47、程序,它不依赖于用户界面,即使没有运行图形界面它依然可以独立的运行,一般对用户来说它是不可见。它会是用户界面根据用户指定的规则和内部的自定义规则利用内核的包过滤功能对内核进行设置组合形成完备的防火墙系统,实现防火墙系统的功能。4.2. 防火墙系统的实现根据在前一节中的设计方案和要求,我分别实现了防火墙系统的两个部分:用户界面和防火墙后台。4.2.1. 用户界面的实现在 linux 系统中可以用来编写图形程序的工具集主要有两种:gtk注和 qt注。其中 gtk+ 全部由c编写而成,qt则是由c+编写的。在 linux 中系统大多数由 gtk+ 编写而成,由于本人相对来说对 c 比 c+ 要熟悉一
48、些,gtk要熟悉 qt 一些,最后选择了使用 gtk+ 来编写用户界面。然后通过查看gtk+ 的开发手册和 gtk+ 程序代码发现使用 gtk+ 进行界面编程相当繁琐,要完成本防火墙的界面可能需要编写大量的代码。然后通过网上学习发现可以使用 glade注绘制界面,而不需要使用手工编码构建整个界面了。glade 它使用 xml 来描述界面,并可以使用程序来绘制软件界面大大减轻编码的工作量,配合 libglade注 即可以通过载入 .glade 界面描述文件来生成整个界面,并且独立于程序易于修改。另外为了方便,简化编程和与桌面系统集成,用户界面也被设计成为了一个 基于gnome注 应用程序,gnome 是以 gtk为基础实现的在 unix 系统中运行的桌面环境,它包括桌面系统所具体的特性,界面简单,易于使用。根据设计方案的三个主要要求,下面对各个部分的实现进行简要的描述:1. 如图这是程序的主界面,也是主要根据方案中的第一个要求实现的。从上至下依次显示了防火墙的事件状态信息,网络设置状态信息和活动的连接信息。在这一部分的程序设计中主要的难点有,获取系统的的活动网络设备,获取系统中活动的 tcp 连接和根据 tcp 连接查找程序名称。在 l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西省上饶市广丰县2025届四下数学期末检测试题含解析
- 产业经济学与2025年相关知识考试试卷及答案
- 2025年特殊教育教师资格考试试题及答案
- 2025年文化产业管理职业能力测评试卷及答案
- 咸阳师范学院《免疫与病原生物学实验Ⅲ》2023-2024学年第二学期期末试卷
- 九州职业技术学院《学术英语阅读与写作》2023-2024学年第一学期期末试卷
- 2025年英语专业八级考试试卷及答案
- 潜江市2024-2025学年初三中考模拟最后一卷生物试题含解析
- 辽宁省东港地区市级名校2025年初三3月中考适应性调研考试数学试题试卷含解析
- 高端私人直升机航拍影像作品版权授权及收益分成协议
- 2025年四川绵阳交通发展集团有限责任公司招聘笔试参考题库附带答案详解
- 成本控制在质量管理中的策略试题及答案
- 起重吊装作业安全管理培训
- 2025届河北省石家庄第一中学高三下学期二模地理试题及答案
- 2025年山东省应急管理普法知识竞赛参考试题库大全-下(多选、判断题)
- 2024年浙江首考高考英语卷试题真题及答案解析(含听力原文+作文范文)
- 常用急救药品的剂量与用法课件
- 奥数举一反三简单推理
- 高中英语教师研修-罗马建筑文化课件
- 幼儿园教学课件小班社会《孤独的小熊》课件
- 客诉客退经济处罚准则及要求
评论
0/150
提交评论