防火墙概述

  • 格式:doc
  • 大小:73.50 KB
  • 文档页数:12

计算机网络安全与防火墙技术摘要防火墙技术的核心思想是在不安全的网际网环境中构造一个相对安全的子网环境. 本文介绍了防火墙技术的基本概念和系统结构,讨论了实现防火墙的两种主要技术手段:一种是基于分组过滤技术(Packet filtering),它的代表是在筛选路由器上实现的防火墙功能;一种是基于代理技术(Proxy),它的代表是在应用层网关上实现的防火墙功能.关键词网络安全,防火墙,分组过滤,代理,堡垒主机一防火墙的概念与构成所谓防火墙就是一个或一组网络设备(计算机或路由器等),可用来在两个或多个网络间加强访问控制. 它的实现有好多种形式,有些实现还是很复杂的,但基本原理原理却很简单. 你可以把它想象成一对开关,一个开关用来阻止传输, 另一个开关用来允许传输.设立防火墙的主要目的是保护一个网络不受来自另一个网络的攻击. 通常,被保护的网络属于我们自己,或者是我们负责管理的,而所要防备的网络则是一个外部的网络,该网络是不可信赖的,因为可能有人会从该网络上对我们的网络发起攻击,破坏网络安全. 对网络的保护包括下列工作:拒绝未经授权的用户访问,阻止未经授权的用户存取敏感数据,同时允许合法用户不受妨碍地访问网络资源.不同的防火墙侧重点不同. 从某种意义上来说,防火墙实际上代表了一个网络的访问原则. 如果某个网络决定设定防火墙,那么首先需要由网络决策人员及网络专家共同决定本网络的安全策略(security policy),即确定那些类型的信息允许通过防火墙,那些类型的信息不允许通过防火墙. 防火墙的职责就是根据本单位的安全策略,对外部网络与内部网络交流的数据进行检查,符合的予以放行,不符合的拒之门外.在设计防火墙时,除了安全策略以外,还要确定防火墙类型和拓扑结构. 一般来说,防火墙被设置在可信赖的内部网络和不可信赖的外部网络之间. 防火墙相当于一个控流器,可用来监视或拒绝应用层的通信业务,防火墙也可以在网络层和传输层运行,在这种情况下,防火墙检查进入和离去的报文分组的IP和TCP头部,根据预先设计的报文分组过滤规则来拒绝或允许报文分组通过.防火墙是用来实现一个组织机构的网络安全措施的主要设备. 在许多情况下需要采用验证安全和增强私有性技术来加强网络的安全或实现网络方面的安全措施. 本文主要介绍下列防火墙的基本构件和技术:筛选路由器(screening router)、分组过滤(packet filtering)技术、双宿主机(dual-homed host)、代理服务(Proxy Service)、应用层网关(application level gateway)和堡垒主机(bastion host). 象筛选路由器这样的能够实现安全措施的路由器常常被称为安全路由器或安全网关,而实现安全管理的应用层网关又称为安全应用层网关.二防火墙的基本构件和技术2.1筛选路由器(Screening Router)许多路由器产品都具有根据给定规则对报文分组进行筛选的功能,这些规则包括协议的类型、特定协议类型的源地址和目的地址字段以及作为协议一部分的控制字段. 例如在常用的Cisco路由器上就具有这种对报文分组进行筛选的功能,这种路由器被称为筛选路由器. 最早的Cisco路由器只能根据IP数据报头部内容进行过滤,而目前的产品还可以根据TCP端口及连接建立的情况进行过滤, 而且在过滤语法上也有了一定改进.筛选路由器提供了一种强有力的机制,可用于控制任何网络段上的通信业务类型. 而通过控制一个网络段上的通信业务类型,筛选路由器可以控制该网络段上网络服务的类型,从而可以限制对网络安全有害的服务.筛选路由器可以根据协议类型和报文分组中有关协议字段的值来区别不同的网络通信业务. 路由器根据与协议相关的准则来区别和限制通过其端口的报文分组的能力被称为报文分组过滤. 因此,筛选路由器又称为分组过滤路由器. 下面我们首先介绍应用筛选路由器时需要考虑的安全防线设置问题,以及筛选路由器与OSI模型的关系,分组过滤技术将在下一节讨论.识别危险区域根据1996年1月的统计,连入INTERNET的网络大约为60,000个左右,主机总数则已超过900万台. 由于INTERNET上有如此众多的用户,其中难免有少数居心不良的所谓“黑客”. 这种情况就象迁入一个大城市时会遇到犯罪问题一样. 在大城市中,使用带锁的门来保护我们的居室是明智之举. 在这种环境下要求凡事要小心谨慎,因此当有人来敲我们的门时,应首先查看来人,再决定是否让来人进入. 如果来人看起来很危险(安全风险很高),则不应让其进来. 类似地,筛选路由器也通过查看进入的分组来决定它们当中是否有可能有害的分组. 企业网络中的边界被称为安全环形防线. 由于在INTERNET 上危险的“黑客”很多,确定一个危险区域是很有用的. 这个危险区域就是指通过INTERNET可以直接访问的所有具有TCP/IP功能的网络. 这里“具有TCP/IP功能”是指一台主机支持TCP/IP协议和它所支持的上层协议. “直接访问”是指在INTERNET和企业网络的主机之间没有设置强有力的安全措施(没有“锁门”).从我们自己的角度上看,INTERNET中的地区网、国家网和主干网都代表着一个危险区域,在危险区域内的主机对于外来攻击的防范是很脆弱的. 因此,我们当然希望把自己的网络和主机置于危险区域之外. 然而,没有相应的设备去拦截对自己网络的攻击,则危险区域将会延伸至自己的网络上. 筛选路由器就是这样一种设备,它可以用来减小危险区域,从而使其不能渗透到我们网络的安全防线之内.在我们的企业网络中,可能不是所有的主机都具有TCP/IP功能. 即使这样,这些非TPC/IP主机也可能成为容易攻击的,尽管从技术上说它们不属于危险区域. 如果一台非TCP/IP主机与一台TCP/IP主机相连,就会发生这种情况. 入侵者可以使用一种TCP/IP主机和非TCP/IP主机都支持的协议来通过TCP/IP主机访问非TCP/IP主机,例如:如果这两台主机都连在同一个以太网网段上,入侵者就可以通过以太网协议去访问非TCP/IP主机.筛选路由器本身不能够消除危险区域. 但它们可以极为有效地减小危险区域.筛选路由器和防火墙与OSI模型的关系按照与OSI模型的关系将筛选路由器和防火墙进行比较. 筛选路由器的功能相当于OSI模型的网络层(IP协议)和传输层(TCP协议). 防火墙常常被描述为网关,而网关应可以在OSI模型的所有七个层次上执行处理功能. 通常,网关在OSI模型的第七层(应用层)执行处理功能. 对于大多数防火墙网关来说,也确实如此.防火墙可以执行分组过滤功能,因为防火墙覆盖了网络层和传输层. 某些厂商,可能是由于市场营销策略,模糊了筛选路由器和防火墙之间的区别,将他们的筛选路由器产品称为防火墙产品. 为了清晰起见,我们根据OSI模型对筛选路由器和防火墙加以区别.有些时候,筛选路由器也被称为分组过滤网关. 使用“网关”这一术语来称呼分组过滤设备可能有以下理由,即在传输层根据TCP标志执行的过滤功能不属于路由器的功能,因为路由器运行在OSI模型的网络层. 在网络层以上运行的设备也被称为网关.2.2分组过滤(Packet Filtering) 技术筛选路由器可以采用分组过滤功能以增强网络的安全性. 筛选功能也可以由许多商业防火墙产品和一些类似于Karlbridge的基于纯软件的产品来实现. 但是,许多商业路由器产品都可以被编程以用来执行分组过滤功能. 许多路由器厂商,象Cisco、Bay Networks、3COM、DEC、IBM等,他们的路由器产品都可以用来通过编程实现分组过滤功能.分组过滤和网络安全策略分组过滤可以用来实现许多种网络安全策略. 网络安全策略必须明确描述被保护的资源和服务的类型、重要程度和防范对象.通常,网络安全策略主要用于防止外来的入侵,而不是监控内部用户. 例如,阻止外来者入侵内部网络,对一些敏感数据进行存取和破坏网络服务是更为重要的. 这种类型的网络安全策略决定了筛选路由器将被置于何处,以及如何进行编程用来执行分组过滤. 良好的网络安全的实现同时也应该使内部用户难以妨害网络安全,但这通常不是网络安全工作的重点.网络安全策略的一个主要目标是向用户提供透明的网络服务机制. 由于分组过滤执行在OSI模型的网络层和传输层,而不是在应用层,所以这种途径通常比防火墙产品提供更强的透明性. 我们曾经提到防火墙在OSI模型应用层上运行,在这个层次实现的安全措施通常都不够透明.一个分组过滤的简单模型一个分组过滤装置常被置于一个或几个网段与其他网段之间. 网段通常被分为内部网段和外部网段,外部网段将你的网络连向外部网络,例如INTERNET;内部网段用来连接一个单位或组织内部的主机和其它网络资源.在分组过滤装置的每一个端口都可以实施网络安全策略,这种策略描述通过该端口可存取的网络服务的类型. 如果同时有许多网段同该过滤装置相连,则分组过滤装置所实施的策略将变得很复杂. 一般来说,在解决网络安全问题时应该避免过于复杂的方案,其原因如下:*难于维护,*在配置过滤规则时容易发生错误,*执行复杂的方案将对设备的性能产生负作用.在许多实际情况下,一般都只采用简单模型来实现网络安全策略. 在这个模型中只有两个网段与过滤装置相连,典型的情况是一个网段连向外部网络,另一个连向内部网络. 通过分组过滤来限制请求被拒绝服务的网络通信流. 由于分组过滤规则的设计原则是有利于内部网络连向外部网络,所以在筛选路由器两侧所执行的过滤规则是不同的. 换句话说,分组过滤器是不对称的.分组过滤器的操作当前,几乎所有的分组过滤装置(筛选路由器或分组过滤网关)都按如下方式操作:(1) 对于分组过滤装置的有关端口必须设置分组过滤准则,也称为分组过滤规则.(2) 当一个分组到达过滤端口时,将对该分组的头部进行分析. 大多数分组过滤装置只检查IP、TCP 或UDP头部内的字段.(3) 分组过滤规则按一定的顺序存贮. 当一个分组到达时,将按分组规则的存贮顺序依次运用每条规则对分组进行检查.(4) 如果一条规则阻塞传递或接收一个分组,则不允许该分组通过.(5) 如果一条规则允许传递或接收一个分组,则允许该分组通过.(6) 如果一个分组不满足任何规则,则该分组被阻塞.从规则4和5,我们可以看到到将规则按适当的顺序排列是非常重要的. 在配置分组过滤规则时一个常犯的错误就是将分组过滤规则按错误的顺序排列. 如果一个分组过滤规则排序有错,我们就有可能拒绝进行某些合法的访问,而又允许访问本想拒绝的服务.规则6遵循守以下原则:未被明确允许的就将被禁止.这是一个在设计安全可靠的网络时应该遵循的失效安全原则. 与之相对的是一种宽容的原则,即:没有被明确禁止的就是允许的.如果采用后一种思想来设计分组过滤规则,就必须仔细考虑分组过滤规则没有包括的每一种可能的情况来确保网络的安全. 当一个新的服务被加入到网络中时,我们可以很容易地遇到没有规则与之相匹配的情况. 在这种情况下,不是先阻塞该服务,从而听取用户因为合法的服务被阻塞而抱怨,然后再允许该服务,我们也可以以网络安全风险为代价来允许用户自由地访问该服务,直到制定了相应的安全规则为止.2.3双宿主机(Dual-Homed Host)在TCP/IP网络中,术语多宿主机被用来描述一台配有多个网络接口的主机. 通常,每一个网络接口与一个网络相连. 在以前,这种多宿主机也可以用来在几个不同的网段间进行寻径,术语网关用来描述由多宿主机执行的寻径功能. 但近年来人们一般用术语路由器来描述这种寻径功能,而网关则用于描述相当于OSI模型上几层中所进行的寻径功能.如果在一台多宿主机中寻径功能被禁止了,则这个主机可以隔离与它相连的网络之间的通信流量;然而与它相连的每一个网络都可以执行由它所提供的网络应用,如果这个应用允许的话,它们还可以共享数据.在双宿主机防火墙中禁止寻径大多数防火墙建立在运行UNIX的机器上. 证实在双宿主机防火墙中的寻径功能是否被禁止是非常重要的;如果该功能没有被禁止,你必须知道如何去禁止它.为了在基于UNIX的双宿主机中禁止进行寻径,需要重新配置和编译内核. 在BSD UNIX系统中该过程如下所述.使用MAKE命令编译UNIX系统内核. 使用一个叫做CONFIG的命令来读取内核配置文件并生成重建内核所需的文件. 内核配置文件在/usr/sys/conf或/usr/src/sys目录下. 在使用Intel硬件的BSDI UNIX平台上,配置文件在/usr/src/sys/i386/conf目录下.为检查你所使用的是哪一个内核配置文件,你可以对内核映像文件使用strings命令并查找操作系统的名字. 例如:% strings /bsd | grep BSDBSDI $Id: if_pe.c, v 1.4 1993/02/21 20:35:01 karels Exp $BSDI $Id: if_petbl.c, v 1.2 1993/02/21 20:36:09 karels Exp $BSD/386@(#)BSDI BSD/386 1.0 kernel #0: Wed Mar 24 17:23:44 MST 1993polk@:/home/hilltop/polk/sys.clean/compile/GENERIC最后一行说明当前的配置文件是GENERIC.进入配置文件目录(/usr/src/sys/i386/conf),将文件GENERIC复制到一个新的配置文件中,其名字应对新的配置有所启发. 例如,你可以将这个文件称为FIREW ALL或LOCAL.cd /usr/src/sys/i386/confcp GENERIC FIREWALL下一步,编辑文件FIREW ALL中的选项参数IPFORWARDING,将其值改为- 1,代表“不转发任何IP数据报”. 这个变量的作用是设置内核变量ipforwarding的值,从而禁止IP转发.options IPFORW ARDING=-1在某些其它的系统上,你看到的可能不是IPFORW ARDING参数,而是:options GA TEWAY为禁止IP分组的转发,可以将一个#号放在这一行的起始处,将这句话注释掉.#options GA TEWAY同时,检验下列TCP/IP内核配置语句是否存在:options INET # Internet Protocol support is to be includedpseudo-device loop # The loop back device is to be defined (127.0.0.1)pseudo-device ehter # Generic Ethernet support such as ARP functionspseudo-device pty # pseudo teletypes for telnet /rlogin accessdevice we0 at isa? port 0x280 # Could be different for your Ethernet interface运行CONFIG命令来建立LOCAL目录,然后进入该目录:config LOCALcd ../../compile/LOCAL然后,运行MAKE命令来建立必要的相关部件和内核:make dependmake将内核映像复制到根目录下,然后重新启动(reboot):cp /bsd /bsd.oldcp bsd /bsdreboot现在,这台主机可以用来作为双宿主机防火墙了.怎样破坏双宿主机防火墙的安全了解双宿主机防火墙的安全性是如何被破坏的是很有用的,因为这样一来你就可以采取相应的措施来防止发生这种破坏.对安全最大的危胁是一个攻击者掌握了直接登录到双宿主机的权限. 登录到一个双宿主机上总是应该通过双宿主机上的一个应用层代理进行. 对从外部不可信任网络进行登录应该进行严格的身份验证如果外部用户获得了在双宿主机上进行登录的权利,那么内部网络就容易遭到攻击. 这种攻击可以通过以下任何一种方式来进行:1)通过文件系统上宽松的许可权限制2)通过内部网络上由NFS安装的卷3)利用已经被破坏了的用户帐号,通过在这类用户的主目录下的主机等价文件,如.rhosts,来访问由Berkeley r*工具授权的服务4)利用可能恢复的过分访问权的网络备份程序5)通过使用没有适当安全防范的用于管理的SHELL脚本6)通过从没有适当安全防范的过时软件的修订版和发行文档来掌握系统的漏洞7)通过安装允许IP传递的老版本操作系统内核,或者安装存在安全问题的老版本操作系统内核.如果一台双宿主机失效了,则内部网络将被置于外部攻击之下,除非这个问题很快被查出并解决.在前面,我们已经了解到UNIX内核变量ifrorwarding控制着是否允许进行IP路由选择. 如果一个攻击者获得了足够的系统权限,则这个攻击者就可以改变这个内核变量的值,从而允许IP转发. 在允许IP转发后,防火墙机制就会被旁路掉了.双宿主机防火墙上的服务除了禁止IP转发,你还应该从双宿主机防火墙中移走所有的影响到安全的程序、工具和服务,以免落入攻击者的手中. 下面是UNIX双宿主机防火墙的一部分有用的检查点:1)移走程序开发工具:编译器、链接器等.2)移走你不需要或不了解的具有SUID和SGID权限的程序. 如果系统不工作,你可以移回一些必要的基本程序.3)使用磁盘分区,从而使在一个磁盘分区上发动的填满所有磁盘空间的攻击被限制在那个磁盘分区当中.4)删去不需要的系统和专门帐号.5)删去不需要的网络服务,使用netstat -a来检验. 编辑/etc/inetd.conf和/etc/services文件,删除不需要的网络服务定义.2.4代理服务和应用层网关代理服务(Proxy Service)代理服务使用的的方法与分组过滤器不同,代理(Proxy)使用一个客户程序(或许经过修改),与特定的中间结点连接,然后中间结点与期望的服务器进行实际连接. 与分组过滤器所不同的是,使用这类防火墙时外部网络与内部网络之间不存在直接连接. 因此,即使防火墙发生了问题,外部网络也无法与被保护的网络连接. 中间结点通常为双宿主机.代理服务可提供详细的日志记录(log)及审计(audit)功能,这大大提高了网络的安全性,也为改进现有软件的安全性能提供了可能性. 代理服务器可运行在双宿主机上,它是基于特定应用程序的. 为了通过代理支持一个新的协议,必须修改代理以适应新协议. 在一个称为SOCKS的免费程序库中包括了与许多标准系统调用基本兼容的代理版本,如SOCKS()、BIND()、CONNECT()等. 在URL统一资源定位地址ftp:///pub/security/sock.cstc中可以得到该程序.代理服务通常由两个部分构成:代理服务器程序和客户程序. 相当多的代理服务器要求使用固定的客户程序. 例如SOCKS要求适应SICKS的客户程序. 如果网络管理员不能改变所有的代理服务器和客户程序,系统就不能正常工作. 代理使网络管理员有了更大的能力改善网络的安全特性. 然而,它也给软件开发者、网络系统员和最终用户带来了很大的不便,这就是使用代理的代价. 也有一些标准的客户程序可以利用代理服务器通过防火墙运行,如mail、FTP和telnet等. 即便如此,最终用户也许还需要学习特定的步骤通过防火墙进行通信.透明性对基于代理服务企的防火墙显然是一个大问题. 即使是那些声称是透明性防火墙的代理也期望应用程序使用特定的TCP或UDP端口. 假如一个节点在非标准端口上运行一个标准应用程序,代理将不支持这个应用程序. 许多防火墙允许系统管理员运行两个代理拷贝,一个在标准端口运行,另一个在非标准端口运行,常用服务的最大数目取决于不同的防火墙产品.基于代理服务的防火墙厂商正在开始解决这个问题. 基于代理的产品开始改进成能够设置常用服务和非标准端口. 然而,只要应用程序需要升级,基于代理的用户会发现他们必须发展新的代理. 一个明显的例子是许多的Web浏览器中加入了大量的安全措施. 防火墙的购买者应留心询问防火墙厂商他们的产品到底能处理哪些应用程序. 另外, 基于代理服务器的防火墙常常会使网络性能明显下降. 相当多的防火墙不能处理高负载的网络通信.应用层网关应用层网关可以处理存储转发通信业务,也可以处理交互式通信业务. 通过适当的程序设计,应用层网关可以理解在用户应用层(OSI模型第七层)的通信业务. 这样便可以在用户层或应用层提供访问控制,并且可以用来对各种应用程序的使用情况维持一个智能性的日志文件. 能够记录和控制所有进出通信业务,是采用应用层网关的主要优点. 在需要时,在网关本身中还可以增加额外的安全措施.对于所中转的每种应用,应用层网关需要使用专用的程序代码. 由于有这种专用的程序代码,应用层网关可以提供高可靠性的安全机制. 每当一个新的需保护的应用加入网络中时,必须为其编制专门的程序代码. 正是如此,许多应用层网关只能提供有限的应用和服务功能.为了使用应用层网关,用户或者在应用层网关上登录请求,或者在本地机器上使用一个为该服务特别编制的程序代码. 每个针对特定应用的网关模块都有自己的一套管理工具和命令语言.采用应用层网关的一个缺陷是必须为每一项应用编制专用程序. 但从安全角度上看,这也是一个优点,因为除非明确地提供了应用层网关,就不可能通过防火墙. 这也是在实践“未被明确允许的就将被禁止”的原则.专用应用程序的作用是作为“代理”接收进入的请求,并按照一个访问规则检查表进行核查,检查表中给出所允许的请求类型. 在这种情况下,这个代理程序被称为一个应用层服务程序代理. 当收到一个请求并证实该请求是允许的之后,代理程序将把该请求转发给所要求的服务程序. 因此,代理程序担当着客户机和服务器的双重角色. 它作为服务器接收外来请求,而在转发请求时它又担当客户机. 一旦会话已经建立起来,应用代理程序便作为中转站在起动该应用的客户机和服务器之间转抄数据. 因为在客户机和服务器之间传递的所有数据均由应用层代理程序转发,因此它完全控制着会话过程,并可按照需要进行详细的记录. 在许多应用层网关中,代理程序是由一个单一的应用层模块实现的.为了连接到一个应用层代理程序,许多应用层网关要求用户在内部网络的主机上运行一个专用的客户方应用程序. 另一种方法是使用TELNET命令并给出可提供代理的应用服务的端口号. 例如:如果应用代理程序运行在主机上,其端口号为63,则可以使用下列命令:telnet 63在连接到代理服务所在的端口之后,你将会看到标识该应用代理的特定的提示符. 这时,需要执行专门配制命令来指定目的服务器. 不管采用的是哪种途径,用户与标准服务之间的接口将会被改变. 如果使用的是一个专用的客户程序,则必须对该程序进行修改,使它总是连向代理程序所在的主机(即代理机)上,并告诉代理机你所要连接的目的地址. 此后,代理机将与最终的目标地址相连并传递数据. 一些代理服务程序模拟标准应用服务的工作方式,当用户指定一个在不同网络中的连接目标时,代理应用程序就将被调用.对于某一应用代理程序,如果需使用专用的客户机程序时,那么就必须在所有的要使用INTERNET。