1.什么是防火墙?
防火墙是一个或一组系统,它在网络之间执行访问控制策略。实现防火墙的实际方式各不相同,但是在原则上,防火墙可以被认为是这样一对机制:一种机制是拦阻传输流通行,另一种机制是允许传输流通过。一些防火墙偏重拦阻传输流的通行,而另一些防火墙则偏重允许传输流通过。了解有关防火墙的最重要的概念可能就是它实现了一种访问控制策略。如果你不太清楚你需要允许或否决那类访问,你可以让其他人或某些产品根据他(它)们认为应当做的事来配置防火墙,然后他(它)们会为你的机构全面地制定访问策略。
2.为何需要防火墙?
同其它任何社会一样,Internet也受到某些无聊之人的困扰,这些人喜爱在网上做这类的事,像在现实中向其他人的墙上喷染涂鸦、将他人的邮箱推倒或者坐在大街上按汽车喇叭一样。一些人试图通过Internet完成一些真正的工作,而另一些人则拥有敏感或专有数据需要保护。一般来说,防火墙的目是将那些无聊之人挡在你的网络之外,同时使你仍可以完成工作。
许多传统风格的企业和数据中心都制定了计算安全策略和必须遵守的惯例。在一家公司的安全策略规定数据必须被保护的情况下,防火墙更显得十分重要,因为它是这家企业安全策略的具体体现。如果你的公司是一家大企业,连接到Internet上的最难做的工作经常不是费用或所需做的工作,而是让管理层信服上网是安全的。防火墙不仅提供了真正的安全性,而且还起到了为管理层盖上一条安全的毯子的重要作用。
最后,防火墙可以发挥你的企业驻Internet“大使”的作用。许多企业利用其防火墙系统作为保存有关企业产品和服务的公开信息、下载文件、错误修补以及其它一些文件的场所。这些系统当中的几种系统已经成为Internet服务结构(如UUnet.uu.net、whitehouse.gov、gatekeeper.dec.com)的重要组成部分,并且给这些机构的赞助者带来了良好的影响。
3.防火墙可以防范什么?
一些防火墙只允许电子邮件通过,因而保护了网络免受除对电子邮件服务攻击之外的任何攻击。另一些防火墙提供不太严格的保护措施,并且拦阻一些众所周知存在问题的服务。
一般来说,防火墙在配置上是防止来自“外部”世界未经授权的交互式登录的。这大大有助于防止破坏者登录到你网络中的计算机上。一些设计更为精巧的防火墙可以防止来自外部的传输流进入内部,但又允许内部的用户可以自由地与外部通信。如果你切断防火墙的话,它可以保护你免受网络上任何类型的攻击。
防火墙的另一个非常重要的特性是可以提供一个单独的“拦阻点”,在“拦阻点”上设置安全和审计检查。与计算机系统正受到某些人利用调制解调器拨入攻击的情况不同,防火墙可以发挥一种有效的“电话监听”(Phone tap)和跟踪工具的作用。防火墙提供了一种重要的记录和审计功能;它们经常可以向管理员提供一些情况概要,提供有关通过防火墙的传流输的类型和数量以及有多少次试图闯入防火墙的企图等等信息。
4.防火墙不能防范什么?
防火墙不能防范不经过防火墙的攻击。许多接入到Internet的企业对通过接入路线造成公司专用数据数据泄露非常担心。不幸得是,对于这些担心来说,一盘磁带可以被很有效地用来泄露数据。许多机构的管理层对Internet接入非常恐惧,它们对应当如何保护通过调制解调器拨号访问没有连惯的政策。当你住在一所木屋中,却安装了一扇六英尺厚的钢门,会被认为很愚蠢。然而,有许多机构购买了价格昂贵的防火墙,但却忽视了通往其网络中的其它几扇后门。要使防火墙发挥作用,防火墙就必须成为整个机构安全架构中不可分割的一部分。防火墙的策略必须现实,能够反映出整个网络安全的水平。例如,一个保存着超级机密或保密数据的站点根本不需要防火墙:首先,它根本不应当被接入到Internet上,或者保存着真正秘密数据的系统应当与这家企业的其余网络隔离开。
防火墙不能真正保护你防止的另一种危险是你网络内部的叛变者或白痴。尽管一个工业间谍可以通过防火墙传送信息,但他更有可能利用电话、传真机或软盘来传送信息。软盘远比防火墙更有可能成为泄露你机构秘密的媒介!防火墙同样不能保护你避免愚蠢行为的发生。通过电话泄露敏感信息的用户是社会工程(social engineering)的好目标;如果攻击者能找到内部的一个“对他有帮助”的雇员,通过欺骗他进入调制解调器池,攻击者可能会完全绕过防火墙打入你的网络。
5.防火墙能否防止病毒的攻击?
防火墙不能有效地防范像病毒这类东西的入侵。在网络上传输二进制文件的编码方式太多了,并且有太多的不同的结构和病毒,因此不可能查找所有的病毒。换句话说,防火墙不可能将安全意识(security-consciosness)交给用户一方。总之,防火墙不能防止数据驱动的攻击:即通过将某种东西邮寄或拷贝到内部主机中,然后它再在内部主机中运行的攻击。过去曾发生过对不同版本的邮件寄送程序和幻像脚本(ghostscript)和免费PostScript阅读器的这类攻击。
对病毒十分忧虑的机构应当在整个机构范围内采取病毒控制措施。不要试图将病毒挡在防火墙之外,而是保证每个脆弱的桌面系统都安装上病毒扫描软件,只要一引导计算机就对病毒进行扫描。利用病毒扫描软件防护你的网络将可以防止通过软盘、调制解调器和Internet传播的病毒的攻击。试图御病毒于防火墙之外只能防止来自Internet的病毒,而绝大多数病毒是通过软盘传染上的。
尽管如此,还是有越来越多的防火墙厂商正提供“病毒探测”防火墙。这类防火墙只对那种交换Windows-on-Intel执行程序和恶意宏应用文档的毫无经验的用户有用。不要指望这种特性能够对攻击起到任何防范作用。
6.在防火墙设计中需要做哪些基本设计决策?
在负责防火墙的设计、制定工程计划以及实施或监督安装的幸运儿面前,有许多基本设计问题等着他去解决。
首先,最重要的问题是,它应体现你的公司或机构打算如何运行这个系统的策略:安装后的防火墙是为了明确地拒绝除对于连接到网络至关重的服务之外的所有服务,或者,安装就绪的防火墙是为以非威胁方式对“鱼贯而入”的访问("queuing" access)提供一种计量和审计的方法。在这些选择中存在着某种程度的偏执狂;防火墙的最终功能可能将是行政上的结果,而非工程上的决策。
第二个问题是:你需要何种程度的监视、冗余度以及控制水平?通过解决第一个问题,确定了可接受的风险水平(例如你的偏执到何种程度)后,你可以列出一个必须监测什么传输、必须允许什么传输流通行以及应当拒绝什么传输的清单。换句话说,你开始时先列出你的总体目标,然后把需求分析与风险评估结合在一起,挑出与风险始终对立的需求,加入到计划完成的工作的清单中。
第三个问题是财务上的问题。在此,我们只能以模糊的表达方式论述这个问题,但是,试图以购买或实施解决方案的费用多少来量化提出的解决方案十分重要。例如,一个完整的防火墙的高端产品可能价值10万美元,而低端产品可能是免费的。像在Cisco或类似的路由器上做一些奇妙的配置这类免费选择不会花你一分钱,只需要工作人员的时间和几杯咖啡。从头建立一个高端防火墙可能需要几个人工月,它可能等于价值3万美元的工作人员工资和利润。系统管理开销也是需要考虑的问题。建立自行开发的防火墙固然很好,但重要的是使建立的防火墙不需要费用高昂的不断干预。换句话说,在评估防火墙时,重要的是不仅要以防火墙目前的费用来评估它,而且要考虑到像支持服务这类后续费用。
出于实用目的,我们目前谈论的是网络服务提供商提供的路由器与你内部网络之间存在的静态传输流路由服务,因此基于为一事实,在技术上,还需要做出几项决策。传输流路由服务可以通过诸如路由器中的过滤规则在IP层实现,或通过代理网关和服务在应用层实现。
需要做出的决定是,是否将暴露的简易机放置在外部网络上为telnet、ftp、news等运行代理服务,或是否设置像过滤器这样的屏蔽路由器,允许与一台或多台内部计算机的通信。这两种方式都存在着优缺点,代理机可以提供更高水平的审计和潜在的安全性,但代价是配置费用的增加,以及可能提供的服务水平的降低(由于代理机需要针对每种需要的服务进行开发)。由来以久的易使性与安全性之间的平衡问题再次死死地困扰着我们。
7.防火墙的基本类型是什么?
在概念上,有两种类型的防火墙:
1、网络级防火墙
2、应用级防火墙
这两种类型的差异并不像你想像得那样大,最新的技术模糊了两者之间的区别,使哪个“更好”或“更坏”不再那么明显。同以往一样,你需要谨慎选择满足你需要的防火墙类型。
网络级防火墙一般根据源、目的地址做出决策,输入单个的IP包。一台简单的路由器是“传统的”网络级防火墙,因为它不能做出复杂的决策,不能判断出一个包的实际含意或包的实际出处。现代网络级防火墙已变得越来越复杂,可以保持流经它的接入状态、一些数据流的内容等等有关信息。许多网络级防火墙之间的一个重要差别是防火墙可以使传输流直接通过,因此要使用这样的防火墙通常需要分配有效的IP地址块。网络级防火墙一般速度都很快,对用户很透明。
网络级防火墙的例子:在这个例子中,给出了一种称为“屏蔽主机防火墙”(screened host
firewall)的网络级防火墙。在屏蔽主机防火墙中,对单个主机的访问或从单个主机进行访问是通过运行在网络级上的路由器来控制的。这台单个主机是一台桥头堡主机(bastion host),是一个可以(希望如此)抵御攻击的高度设防和保险的要塞。
网络级防火墙的例子:在这个例子中,给出了一种所谓“屏蔽子网防火墙”的网络级防火墙。在屏蔽子网防火墙中,对网络的访问或从这个网络中进行访问是通过运行在网络级上的路由器来控制的。除了它实际上是由屏蔽主机组成的网络外,它与被屏蔽主机的作用相似。
应用级防火墙一般是运行代理服务器的主机,它不允许传输流在网络之间直接传输,并对通过它的传输流进行记录和审计。由于代理应用程序是运行在防火墙上的软件部件,因此它处于实施记录和访问控制的理想位置。应用级防火墙可以被用作网络地址翻译器,因为传输流通过有效地屏蔽掉起始接入原址的应用程序后,从一“面”进来,从另一面出去。在某些情况下,设置了应用级防火墙后,可能会对性能造成影响,会使防火墙不太透明。早期的应用级防火墙,如那些利用TIS防火墙工具包构造的防火墙,对于最终用户不很透明,并需要对用户进行培训。应用级防火墙一般会提供更详尽的审计报告,比网络级防火墙实施更保守的安全模型。
应用级防火墙举例:这此例中,给出了一个所谓“双向本地网关”(dual homed gateway)的应用级防火墙。双向本地网关是一种运行代理软件的高度安全主机。它有两个网络接口,每个网络上有一个接口,拦阻通过它的所有传输流。
防火墙未来的位置应当处于网络级防火墙与应用级防火墙之间的某一位置。网络级防火墙可能对流经它们的信息越来越“了解”(aware),而应用级防火墙可能将变得更加“低级”和透明。最终的结果将是能够对通过的数据流记录和审计的快速包屏蔽系统。越来越多的防火墙(网络和应用层)中都包含了加密机制,使它们可以在Internet上保护流经它们之间的传输流。具有端到端加密功能的防火墙可以被使用多点Internet接入的机构所用,这些机构可以将Internet作为“专用骨干网”,无需担心自己的数据或口令被偷看。
8.什么是“单故障点”?应当如何避免出现这种故障?
安全性取决于一种机制的结构具有单故障点。运行桥头堡主机的软件存在错误。应用程序存在错误。控制路由器的软件存在错误。使用所有这些组件建造设计安全的网络,并以冗余的方式使用它们才有意义。
如果你的防火墙结构是屏蔽子网,那么,你有两台包过滤路由器和一台桥头堡主机。(参见本节的问题2)Internet访问路由器不允许传输流从Internet进入你的专用网络。然而,如果你不在桥头堡主机以及(或)阻塞(choke)路由器上与其它任何机制一道执行这个规则(rule)的话,那么只要这种结构中的一个组件出现故障或遭到破坏就会使攻击者进入防火墙内部。另一方面,如果你在桥头堡主机上具有冗余规则,并在阻塞路由器上也有冗余规则,那么攻击者必须对付三种机制。
此外,如果这台桥头堡主机或阻塞路由器使用规则来拦阻外部访问进入内部网络的话,你可能需要让它触发某种报警,因为你知道有人进入了你的访问路由器。
9.如何才能将所有的恶意的传输拦在外面?
对于重点在于安全而非连接性的防火墙来说,你应当考虑缺省拦阻所有的传输,并且只特别地根据具体情况允许你所需要的服务通过。
如果你将除特定的服务集之外的所有东西都挡在外面,那么你已经使你的任务变得很容易了。你无需再为周围的每样产品和每件服务的各种安全问题担心了,你只需关注特定产品和服务存在的各种安全问题。:-)
在启动一项服务之前,你应当考虑下列问题:
*这个产品的协议是人们熟知的公开协议吗?
*为这个协议提供服务的应用程序的应用情况是否可供公开检查?
*这项服务和产品是否为人们熟知?
*使用这项服务会怎样改变防火墙的结构?攻击者会从不同的角度看待这些吗?攻击者能利用这点进入我的内部网络,或者会改变我的DMZ中主机上的东西吗?
在考虑上述问题时,请记住下列忠告:
*“不为人所知的安全性根本不安全。许多未公开的协议都被那些坏家伙研究并破解过。
*无论营销人员说些什么,不是所有的协议或服务在设计时考虑了安全性。事实上,真正在设计时考虑了安全性的协议或服务数量很少。
*甚至在考虑过安全性的情况下,并不是所有的机构都拥有合格的负责安全的人员。在那些没有称职负责安全的人员的机构中,不是所有的机构都愿意请称职的顾问参与工程项目。这样做的结果是那些其它方面还称职的、好心肠的开发者会设计出不安全的系统。
*厂商越不愿意告诉你他们系统的真正工作原理,它就越有可能可存安全性(或其它)问题。只有有什么东西需要隐瞒的厂商才有理由隐瞒他们的设计和实施情况。
10.有哪些常见的攻击?应当如何保护系统不受它们的攻击呢?
每个站点与其它站点遭受攻击的类型都略有不同。但仍有一些共同之处。
SMTP会话攻击(SMTP Session Hijacking)
在这种攻击中,垃圾邮件制造者将一条消息复制成千上万份,并按一个巨大的电子邮件地址清单发送这条消息。由于这些地址清单常常很糟糕,并且为了加快垃圾制造者的操作速度,许多垃圾制造者采取了将他们所有的邮件都发送到一台SMTP服务器上作法,由这台服务器负责实际发送这些邮件。
当然,弹回(bounces)消息、对垃圾制造者的抱怨、咒骂的邮件和坏的PR都涌入了曾被用作中继站的站点。这将着实要让这个站点破费一下了,其中大部分花费被用到支付以后清除这些信息的人员费用上。
《防止邮件滥用系统传输安全性建议》(The Mail Abuse Prevention System Transport Security Initiative)中对这个问题作了详尽的叙述,以及如何对每个寄信人进行配置防止这种攻击。
利用应用程序中的错误(bugs)
不同版本的web服务器、邮件服务器和其它Internet服务软件都存在各种错误,因此,远程(Internet)用户可以利用错误做从造成对计算机的控制到引起应用程序瘫痪等各种后果。
只运行必要的服务、用最新的补丁程序修补程序以及使用应用过一段时间的产品可以减少遭遇这种风险的可能。
利用操作系统中的错误
这类攻击一般也是由远程用户发起的。相对于IP网络较新的操作系统更易出现问题,而很成熟的操作系统有充分的时间来发现和清除存在的错误。攻击者经常可以使被攻击的设备不断重新引导、瘫痪、失去与网络通信的能力,或替换计算机上的文件。
因此,尽可能少地运行操作系统服务可以有助于防范对系统的攻击。此外,在操作系统前端安装一个包过滤器也可以大大减少受这类攻击的次数。
当然,选择一个稳定的操作系统也同样会有帮助。在选择操作系统时,不要轻信“好货不便宜”这类说法。自由软件操作系统常常比商用操作系统更强健。
11.我必须满足用户要求的各种要求吗?
对这个问题的答案完全有可能是“不”。对于需要什么,不需要什么,每个站点都有自己的策略,但是,重要的是记住作为一家机构的看门人的主要工作之一是教育。用户需要流视频、实时聊天,并要求能够向请求在内部网络上的活数据库进行交互查询的外部客户提供服务。
这意味着完成任何这类事情都会给机构造成风险,而造成的风险往往比想像中沿着这条路走下去的“价值”的回报更高。多数用户不愿使自己的机构遭受风险。他们只看一看商标,阅读一下广告,他们也愿意做上述那些事。重要的是了解用户真正想干些什么,帮助他们懂得他们可以以更安全的方式实现他们的真正目的。
你不会总受到欢迎,你可以甚至会发现自己收到了难以置信愚蠢的命令,让你做一些诸如“打开所有的口子”这样的事,但不要为此担心。在这种时刻,明智的做法是将你的交换数据全都保存起来,这样当一个十二岁的小孩闯入网络时,你至少能够使你自己远离混乱局面。
12.如何才能通过自己的防火墙运行Web/HTTP?
有三种办法做到这点:
1、如果你使用屏蔽路由器的话,允许“建立起的”连接经过路由器接入到防火墙外。
2、使用支持SOCKS的Web客户机,并在你的桥头堡主机上运行SOCKS。
3、运行桥头堡主机上的某种具有代理功能的Web服务器。一些可供选择的代理服务器包括Squid、Apache、Netscape Proxy和TIS防火墙工具包中的http-gw。这些选件中的多数还可以代理其它协议(如gopher和ftp),并可缓存捕获的对象。后者一般会提高用户的性能,使你能更有效地使用到Internet的连接。基本上所有的Web客户机(Mozilla、Internet Explorer、Lynx等等)都具有内置的对代理服务器的支持。
13.在使用防火墙时,怎样使用DNS呢?
一些机构想隐藏DNS名,不让外界知道。许多专家认为隐藏DNS名没有什么价值,但是,如果站点或企业的政策强制要求隐藏域名,它也不失为一种已知可行的办法。你可能必须隐藏域名的另一条理由是你的内部网络上是否有非标准的寻址方案。不要自欺欺人的认为,如果隐藏了你的DNS名,在攻击者打入你的防火墙时,会给攻击者增加困难。有关你的网络的信息可以很容易地从网络层获得。假如你有兴趣证实这点的话,不妨在LAN上“ping”一下子网广播地址,然后再执行“arp -a”。还需要说明的是,隐藏DNS中的域名不能解决从邮件头、新闻文章等中“泄露”主机名的问题。
这种方法是许多方法中的一个,它对于希望向Internet隐瞒自己的主机名的机构很有用。这种办法的成功取决于这样一个事实:即一台机器上的DNS客户机不必与在同一台机器上的DNS服务器对话。换句话说,正是由于在一台机器上有一个DNS服务器,因此,将这部机器的DNS客户机活动重定向到另一台机器上的DNS服务器没有任何不妥(并且经常有好处)。
首先,你在可以与外部世界通信的桥头堡主机上建立DNS服务器。你建立这台服务器使它宣布对你的域名具有访问的权力。事实上,这台服务器所了解的就是你想让外部世界所了解的:你网关的名称和地址、你的通配符MX记录等等。这台服务器就是“公共”服务器。
然后,在内部机器上建立一台DNS服务器。这台服务器也宣布对你的域名具有权力;与公共服务器不同,这台服务器“讲的是真话”。它是你的“正常”的命名服务器,你可以在这台服务器中放入你所有的“正常”DNS名。你再设置这台服务器,使它可以将它不能解决的查询转发到公共服务器(例如,使用Unix机上的/etc/
named.boot中的“转发器”行(forwarder line))。
最后,设置你所有的DNS客户机(例如,Unix机上的/etc/resolv.conf文件)使用内部服务器,这些DNS客户机包括公共服务器所在机器上的DNS客户机。这是关键。
询问有关一台内部主机信息的内部客户机向内部服务器提出问题,并得到回答;询问有关一部外部主机信息的内部客户机向内部服务器查询,内部客户机再向公共服务器进行查询,公共服务器再向Internet查询,然后将得到的答案再一步一步传回来。公共服务器上的客户机也以相同的方式工作。但是,一台询问关于一台内部主机信息的外部客户机,只能从公共服务器上得到“限制性”的答案。
这种方式假定在这两台服务器之间有一个包过滤防火墙,这个防火墙允许服务器相互传递DNS,但除此之外,限制其它主机之间的DNS。
这种方式中的另一项有用的技巧是利用你的IN-ADDR.AROA域名中通配符PTR记录。这将引起对任何非公共主机的“地址到名称”(address-to-name)的查找返回像“unknown.YOUR.DOMAIN”这样的信息,而非返回一个错误。这就满足了像ftp.uu.net匿名FTP站点的要求。这类站点要求得到与它们通信的计算机的名字。当与进行DNS交叉检查的站点通信时,这种方法就不灵了。在交叉检查中,主机名要与它的地址匹配,地址也要与主机名匹配。
14.怎样才能穿过防火墙使用FTP?
一般来说,可以通过使用像防火墙工具包中的ftp-gw这类代理服务器,或在有限的端口范围允许接入连接到网络上(利用如“建立的”屏蔽规则这样的规则来限制除上述端口外的接入),使FTP可以穿过防火墙工作。然后,修改FTP客户机,使其将数据端口连接在允许端口范围内的一个端口上。这样做需要能够修改在内部主机上的
FTP客户机应用。
在某些情况下,如果FTP的下载是你所希望支持的,你不妨考虑宣布FTP为“死协议”(dead protocol),并且让户通过Web下载文件。如果你选择FTP-via-Web方式,用户将不能使用FTP向外传输文件,这可能会造成问题,不过这取决你试图完成什么。
另一个不同的办法是使用FTP "PASV"选项来指示远程FTP服务器允许客户机开始连接。PASV方式假设远程系统上的FTP服务器支持这种操作。(详细说明请参看RFC1579)
另一些站点偏爱建立根据SOCKS库链接的FTP程序的客户机版本。
15.怎样才能穿过防火墙使用telnet?
利用像防火墙工具包中的tn-gw这类应用代理,或简单地配置一台路由器使它利用像“建立的”屏蔽规则等策略允许接出,一般都可以支持使用telnet。应用代理可以以运行在桥头堡主机上的独立代理的形式,或以SOCKS服务器和修改的客户机的形式存在。
16.怎样才能穿过防火墙使用RealAudio?
RealNetworks中含有关于如何使穿过防火墙RealAudio的一些说明。在没有清楚地了解做哪些改动,了解新的改动将带来什么样的风险的情况下,就改动你的防火墙,是很不明智的。
17.如何才能使web服务器作为专用网络上的一个数据库的前端呢?
实现这点的最佳途径是通过特定的协议在web服务器与数据库服务器之间允许很有限的连接。特定的协议只支持你将使用的功能的级别。允许原始SQL或其它任何可为攻击者利用来进行定制提取(extractions)的东西,一般来说不是一个好主意。
假设攻击者能够进入你的web服务器,并以web服务器同样的方式进行查询。难道没有一种机制能提取web服务器不需要的像信用卡信息这样的敏感信息吗?攻击者难道不能发出一次SQL选择,然后提取你整个的专用数据库吗?
同其它所有应用一样,“电子商务”应用从一开始设计时就充分考虑到了安全问题,而不是以后再想起来“增加”安全性。应当从一个攻击者的角度,严格审查你的结构。假设攻击者了解你的结构的每一个细节。现在,再问问自己,想要窃取你的数据、进行非授权的改动或做其它任何你不想让做的事的话,应当做些什么。你可能会发现,不需要增加任何功能,只需做出一些设计和实施上的决策就可大大地增加安全性。
下面是一些如何做到这点的想法:
以一般的原则,从数据库中提取你所需要的数据,使你不用对包含攻击者感兴趣的信息的整个数据库进行查询。对你允许在web服务器与数据库之间传输流实行严格的限制和审计。