防火墙技术论文Word格式.doc
《防火墙技术论文Word格式.doc》由会员分享,可在线阅读,更多相关《防火墙技术论文Word格式.doc(12页珍藏版)》请在冰豆网上搜索。
个人防火墙是防止您电脑中的信息被外部侵袭的一项技术,在您的系统中监控、阻止任何未经授权允许的数据进入或发出到互联网及其他网络系统。
个人防火墙产品如著名Symantec公司的诺顿、NetworkIce公司的BlackIceDefender、McAfee公司的思科及ZoneLab的freeZoneAlarm等,都能帮助您对系统进行监控及管理,防止特洛伊木马、spy-ware等病毒程序通过网络进入您的电脑或在您未知情况下向外部扩散。
这些软件都能够独立运行于整个系统中或针对对个别程序、项目,所以在使用时十分方便及实用。
2.2、网络层防火墙
网络层防火墙可视为一种IP封包过滤器,运作在底层的TCP/IP协议堆栈上。
我们可以以枚举的方式,只允许符合特定规则的封包通过,其余的一概禁止穿越防火墙。
这些规则通常可以经由管理员定义或修改,不过某些防火墙设备可能只能套用内置的规则。
2.3、应用层防火墙
应用层防火墙是在TCP/IP堆栈的“应用层”上运作,您使用浏览器时所产生的数据流或是使用FTP时的数据流都是属于这一层。
应用层防火墙可以拦截进出某应用程序的所有封包,并且封锁其他的封包(通常是直接将封包丢弃)。
理论上,这一类的防火墙可以完全阻绝外部的数据流进到受保护的机器里。
3、目前防火墙中的最新技术及发展情况
因为传统的防火墙设置在网络边界,外于内、外部互联网之间,所以称为"
边界防火墙(PerimeterFirewall)"
。
随着人们对网络安全防护要求的提高,边界防火墙明显感觉到力不从心,因为给网络带来安全威胁的不仅是外部网络,更多的是来自内部网络。
但边界防火墙无法对内部网络实现有效地保护,除非对每一台主机都安装防火墙,这是不可能的。
基于此,一种新型的防火墙技术,分布式防火墙(DistributedFirewalls)技术产生了。
由于其优越的安全防护体系,符合未来的发展趋势,所以这一技术一出现便得到许多用户的认可和接受,它具有很好的发展前景。
分布式防火墙的特点:
主机驻留、嵌入操作系统内核、类似于个人防火墙、适用于服务器托管。
分布式防火墙的功能:
Internet访问控制、应用访问控制、网络状态监控、黑客攻击的防御、日志管理、系统工具。
分布式防火墙的优势:
(1)增强的系统安全性:
增加了针对主机的入侵检测和防护功能,加强了对来自内部攻击防范,可以实施全方位的安全策略。
(2)提高了系统性能:
消除了结构性瓶颈问题,提高了系统性能。
(3)系统的扩展性:
分布式防火墙随系统扩充提供了安全防护无限扩充的能力。
(4)实施主机策略:
对网络中的各节点可以起到更安全的防护。
(5)应用更为广泛,支持VPN通信。
4、个人防火墙的设计与实现
4.1、研究内容及其意义
本文提出了一种基于Linux的个人防火墙来保证网络安全的解决方案,该防火墙主要分成3个模块来实现,它们分别是数据包捕获模块、数据处理模块、过滤规则设置和查询模块。
文章首先讲述了数据包进行捕获,提取数据包头信息,然将包头信息传递给数据包处理部分,并与包头信息进行匹配和处理,将处理后的信息写入日志数据库,规则设置模块则对数据库进行添加规则和显示相应的日志信息
包过滤防火墙是实现防火墙基本功能的最重要最基础的原型,是学习防火墙技术的必经之路,也为进一步设计与提高防火墙性能提供了必要的储备。
4.2、数据包处理模块结构与原理分析
本节主要介绍了防火墙的数据处理的原理,叙述了过滤规则、调用数据库数据包否决等的实现,最后对日志数据库的存储进行了简单介绍。
1、数据包处理模块的结构
网络捕获模块负责从网络上截获所有的数据包,而数据包处理模块则是对截获的数据包根据数据包类型的源地址、目的地址、端口等基本信息逐个进行分析比较。
数据包处理模块在对数据包进行分析后,根据数据包的特性,调用特定的过滤匹配规则确定数据包是否可以通过。
其结构如图1所示。
数据包过滤功能的实现是在网络中运行程序对数据包实施有选择的通过,选择的依据就是系统内设置的过滤规则,只要与过滤规则相匹配的的数据包就被否决,其余的数据包则默认允许通过,并将这些过滤信息存入相应的数据库。
其流程图如图2所示。
图1 数据处理模块示意图
图2数据包处理流程图
2、数据包处理模块原理分析
(1)过滤规则
本系统采用的默认过滤规则是:
默认接收所有的进入、外出和转发数据包;
接收所有本地环路接口上的进出包。
当要有选择地接收数据包时,本地的过滤规则需要进行相应的设置。
比如:
现在要拒绝IP地址为192.168.0.161(局域网内的一主机的IP地址)的主机与本地主机通信,在用户相应的选项卡中,填上这一I地址就是表示拒绝此IP地址主机向本机发出的所有数据包,这就是数据包的IP过滤功能。
当然也要实现端口的过滤功能。
想禁止某一服务的业务功能,就可以在相应的IP号下同时设置端口号,就是表示对任一用户的这一服务被禁止。
其实,这只能对某一些常用的端口号进行过滤,如:
对HTTP(端口80)进行过滤,就是禁止外部用户通过防火墙访问内部HTTP服务器;
对FTP(端口20,21)进行过滤,就是禁止外部主机通过防火墙访问内部FTP服务器。
数据处理模块用到的过滤规则将在用户界面中直接对规则数据库操作进而来设置要过滤的规则,而数据处理模块则从数据库中直接调用。
因此,过滤规则是在数据库中定义,由用户在数据库操作界面上输入的,供底层应用程序调用。
(2)调用过滤规则数据库
程序调用过滤规则数据库来判断捕获的数据包头信息是否与过滤规则库中设置的IP以及端口匹配。
因此,它保存的是不被允许通过的IP号或者端口号,在每次数据调用时,都要进行调用规则,如果与捕获到的数据包头信息符合,则丢弃该数据包,否则就允许该数据包通过。
首先要连接并打开过滤规则数据库,从规则库中读取被禁止的IP以及端口号,匹配后根据情况执行拒绝或者允许通过的命令。
MySQL数据库提供了一种数据库接口-CAPIs,MySQL数据库提供的CAPIs函数。
CAPIs包含在mysqlclient库文件当中与MySQL的源代码一块发行,用于连接到数据库和执行数据库查询。
现在假设MySQL已安装,在数据库中的相关用户和数据表已被创造。
MySQL的头文件在/usr/include/mysql目录下,因此你的程序头部必须有以下语句:
include<
mysql/mysql.h>
MySQL的变量类型和函数都包含在这个头文件当中,对数据库的操作基本上都可以在这个头文件里找到相应的实现函数。
为了实现连接,首先必须创建一个连接数据库的变量:
MYSQL*mysql。
MYSQL这个结构表示对一个数据库连接的句柄,它被用于几乎所有的MySQL函数。
这些变量类型在MySQL的库当中已有定义,我们需要这些变量是为了使用MySQL的CAPIs函数。
这些变量在头文件里都有详细的实现代码和解释,但是这些实现代码和解释对于程序编写来说并不重要。
为了连接服务器,调用函数mysql_init()以初始化一个连处理器,初始化这个变量:
Mysql_init(MYSQL*mysql);
然后就用以下函数实现对数据库的连接:
MYSQL*STDCALLmysql_real_connect(MYSQLysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedintport,constchar*unix_socket,unsignedintclientflag)。
此函数是一个非常重要的函数,其功能是连接一个MYSQL数据库服务器。
它试图建立到运行MySQL数据库引擎的HOST的一个连接。
host是MySQL服务器的主机名,是一个现存MySQL软件的主机地址。
它可以是主机名或者是一个IP地址,假定它为NULL或者字符串“localhost”,则是到本地主机的一个连接。
user是登录的用户名,passwd是登录密码,db是要连接的数据库,port是MySQL服务器的TCP/IP端口,unix_socket是连接类型,clientflag是MySQL运行成ODBC数据库的标记。
参数PORT若不是0,对于TCP/IP连接这个值将用作端口号。
参数unix_socket如果不是NULL,字符串指定套接字或应将是被使用的命名管道。
参数clientflag的值通常是0。
连接寻建立成功后,这个函数将返回0。
至此,对数据库连接的功能基本已实现,然后就可以对数据库进行查询和添加等操作了。
这是连接数据库的第一步,也是一个比较关键的地方,此连接返回的数值关系到此程序调用的各种基本信息。
现在,我们可以连接数据库并进行查询。
查询之前,建立个查询语句字符串:
har*query。
这样可以创立任何SQL查询语句进行查询。
查询之后,我们要到一个MYSQL_RES变量来使用查询的结果。
以下这行创立这个变量:
MYSQL_RES*res。
MYSQL_RES这个结构代表返回行的一个查询的(SELECT,SHOW,DESCRIBE,EXPLAIN)的结果,返回的数据称为“数据集”。
然后用mysql_use_result(MYSQL*query)。
函数读出查询结果。
mysql_use_result()的一个优点是客户为结果集合需要较少的内存,因为它一次只是维持一行(并且因为有较少的分配开销,mysql_use_result()能更快些)。
缺点是你必须尽快处理每一行以避免困住服务器,你不必再结果集合中随意存取行(你只能顺序存取行),而且你不知道在结果集合中有多少行,直到你检索全部结果。
还有,你必须检索出所有行,即使你在检索中途确定你已找到了想寻找的信息。
尽管可以很容易地查询了,要用这个查询的结果还要用到其它的函数。
第一个是:
MYSQL_ROWSTDCALLmysql_fetch_row
(MYSQL_RES*result)。
该函数把结果转换成“数组”。
该函数返回的是MYSQL_ROW变量类型。
MYSQL_ROW这个结构是数据行的一个安全表示法。
当前它实现为一个计数字节的字符串数组(如果字段值可能包含二进制数据,不能将这些视为空终止串
因为这样的值可以在内部包含空字节),行通过调用其它函数获得。
无法使用以空字符结束的串,因为数据在这个串可以是二进制,也许没有包括任何字符。
以下语句创立字符串数组变量:
MYSQL_ROWrow。
当我们用mys