摘 要 防火墙技术的核心思想是在不安全的网际网环境中构造一个相对安全的子网环境. 本文介绍了防火墙技术的基本概念和系统结构,讨论了实现防火墙的两种主要技术手段:一种是基于分组过滤技术(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 BSD
BSDI $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 1993
polk@hilltop.BSDI.COM:/home/hilltop/polk/sys.clean/compile/GENERIC
最后一行说明当前的配置文件是GENERIC.
进入配置文件目录(/usr/src/sys/i386/conf),将文件GENERIC复制到一个新的配置文件中,其名字应对新的配置有所启发. 例如,你可以将这个文件称为FIREWALL或LOCAL.
cd /usr/src/sys/i386/conf
cp GENERIC FIREWALL
下一步,编辑文件FIREWALL中的选项参数IPFORWARDING,将其值改为- 1,代表“不转发任何IP数据报”. 这个变量的作用是设置内核变量ipforwarding的值,从而禁止IP转发.
options IPFORWARDING=-1
在某些其它的系统上,你看到的可能不是IPFORWARDING参数,而是:
options GATEWAY
为禁止IP分组的转发,可以将一个#号放在这一行的起始处,将这句话注释掉.
#options GATEWAY
同时,检验下列TCP/IP内核配置语句是否存在:
options INET # Internet Protocol support is to be included
pseudo-device loop # The loop back device is to be defined (127.0.0.1)
pseudo-device ehter # Generic Ethernet support such as ARP functions
pseudo-device pty # pseudo teletypes for telnet /rlogin access
device we0 at isa? port 0x280 # Could be different for your Ethernet interface
运行CONFIG命令来建立LOCAL目录,然后进入该目录:
config LOCAL
cd ../../compile/LOCAL
然后,运行MAKE命令来建立必要的相关部件和内核:
make depend
make
将内核映像复制到根目录下,然后重新启动(reboot):
cp /bsd /bsd.old
cp bsd /bsd
reboot
现在,这台主机可以用来作为双宿主机防火墙了.
RSS订阅






收 藏
推 荐