第1部分 数据包过滤以及基本安全措施
第1章 数据包过滤防火墙的预备知识
一个小型站点可能会通过多种方式连接到互联网,如T1专线、电缆调制解调器、DSL、无线、PPP、综合业务数字网(ISDN)或者其他的方式。直接连接到互联网的计算机通常是安全问题的焦点。无论是一台计算机还是由连接起来的多台计算机所组成的局域网(LAN),对于小型站点来说,最初的焦点将是直接连接到互联网的那台计算机。这台计算机将被用来搭建防火墙。
防火墙(firewall)这个术语根据其实现方式和使用目的不同而有多种不同的含义。在本书中,防火墙意味着直接连接到互联网的计算机。防火墙也是针对Internet访问实施安全策略的地方。防火墙计算机的外部网卡便是连接到互联网的连接点,或称为网关(gateway)。防火墙存在的意义是保护网关内部的站点免受外部威胁。
一个简单的防火墙设置有时被称作“堡垒防火墙”,因为它是您抵御外部攻击的主要防线。您的许多安全措施都建立在这位保卫您领地的“卫士”之上。它会尽一切可能来保护系统安全。
在这条防线之后的是您的一台或一组计算机。充当防火墙的计算机所扮演的角色可能只是简单地作为您局域网中其他计算机连接到互联网的连接点。您可以在防火墙后的计算机上运行本地的私有服务,例如共享的打印机或者共享的文件系统,或者让您所有的计算机都能连接到互联网。您的某台计算机上可能会存放着您的私人财务记录。您也许想让这台计算机访问Internet,但您不会想让任何人来访问这台计算机。有时,您可能希望向互联网提供您自己的服务。局域网中的某台计算机可能会托管着您的个人站点,另外一台计算机则可能会作为邮件服务器或者网关。您的设置和目的将决定您的安全策略。
防火墙存在的目的是为了执行您定义的安全策略。这些策略反映了您所做出的决策:允许哪些Internet服务访问您的机器,通过您的计算机向外提供哪些服务,哪些服务只为特定的远程用户或站点提供,哪些服务和程序您只希望在本地运行以便仅供您私人使用。安全策略实际上就是访问控制和授权使用私有及受保护的服务、程序以及您计算机上的文件。
虽然家庭和小型企业系统并不会遇到大型公司站点所面临的全部安全问题,但设置安全策略的基本思路和步骤仍是相同的。只是无需考虑那么多的因素,而且安全策略通常没有大型企业站点那样严格,其重点在于保护您的站点免受互联网上不速之客的访问。数据包过滤防火墙是一种常用的保护网络安全和控制外部访问的方法。
当然,拥有防火墙并不意味着您拥有了全面的防护。安全是一个过程,而不是一块硬件。例如,尽管有防火墙的存在,仍有可能通过下载间谍软件、广告软件或点击恶意邮件,使计算机的防护之门大开,继而招致外部对网络的攻击。采取措施以消除外部攻击所带来的危害与在防火墙上花费资源同样重要。在您的网络中使用最佳实践将有助于减少您的计算机被恶意使用的机会,并给予您的网络以弹性。
需要记住的一点是,互联网模式(Internet paradigm)是基于端到端透明这一前提的。对于正在通信的两台计算机来说,两者通信所使用的网络对二者来说是不可见的。实际上,如果通信路径上的某个网络设备失效,则两台计算机之间的流量会在两台计算机不知道的情况下通过新的通信线路继续传输。
理想情况下,防火墙应该是透明的。然而,防火墙可以通过在两台端点计算机之间的网络内引入单一故障点,来破坏互联网模式(Internet paradigm)。而且,并不是所有的网络应用程序使用的通信协议都能轻易通过一个简单的数据包过滤防火墙。如果没有额外的应用程序支持或更加复杂的防火墙技术,则不可能使特定流量穿越防火墙。
更加复杂的问题就是网络地址转换(Network Address Translation[NAT],Linux的说法是地址伪装)了。NAT使得一台计算机能够通过转换多台计算机的请求并将它们转发至相应的目的地从而代表很多其他的计算机。NAT和RFC 1918定义的私有IP地址的使用有效地减轻了即将出现的IPv4地址短缺。但NAT和RFC 1918私有地址空间的结合会使得某些类型的网络流量要么难以传输,要么需要复杂的技术或昂贵的成本才能完成传输。
最后一个复杂的地方来源于多媒体和点对点(P2P)协议的广泛使用,它们在实时通信软件和网络游戏中都有应用。这些协议与当今的防火墙技术相互对立。现如今,特定的防火墙解决方案必须对每一个应用协议单独进行建立和部署。而那种简单地、经济地处理这些协议的防火墙架构仍处在标准委员会的工作组的讨论中。
我们应该牢记,混合使用防火墙、DHCP和NAT会引入复杂性,导致站点为了满足用户使用某些网络服务的要求,不得不对系统的安全性做出一定程度的让步,理解这一点至关重要。小型企业通常不得不部署多个局域网和更复杂的网络配置,以满足不同本地用户的多种安全需求。
在深入了解开发防火墙的细节之前,本章将先介绍数据包过滤防火墙的基础概念以及机制。这些概念包括网络通信的参考架构、基于网络的服务是如何被识别的、什么是数据包,以及网络上的计算机之间相互发送消息和信息的类型。
1.1 OSI网络模型
开放系统互联(Open System Interconnection,OSI)模型代表了基于层次的网络框架。OSI模型中的每一层都提供了不同于其他层的功能。如图1.1所示,OSI模型共包含7层。
这些层有时是以编号来标识的,最低层(物理层)是第一层,而最高层(应用层)是第七层。如果您听别人说过“三层交换机”,那他/她指的就是OSI模型中的第三层。作为一个对安全和入侵检测感兴趣的人,您必须了解OSI模型的各层,以便完全理解那些会对您的系统造成危害的攻击途径。
OSI模型中的每一层都很重要。那些您每天都在使用的协议,例如IP、TCP、ARP等也都分布在OSI模型的不同层。每一层在通信过程中都有它们各自不同的功能和角色。
OSI模型中的物理层被传输介质占据,例如电缆规格和相关的信号协议;换言之,它们传输比特。大多数情况下,除了保护设备和布线,网络入侵检测人员通常不会关心物理层。本书不会讨论太多有关物理安全的内容(门锁能多有趣?),因此我也不会投入太多的时间介绍OSI模型中的物理层。当然,保障物理线路安全的方式不同于保障无线设备安全的方式。
紧接着在物理层上层的是数据链路层。数据链路层在给定的物理介质上传输数据,并负责传输过程中的错误检测和恢复。物理硬件地址的定义也在这一层,例如以太网卡的介质访问控制(Media Access Control,MAC)地址。
在数据链路层之上的便是IP网络里至关重要的第三层——网络层。它负责逻辑寻址与数据路由。IP协议是网络层的协议,这意味着IP地址和子网掩码由网络层使用。路由器和一些交换机工作在第三层,它们在逻辑上或物理上分隔的网络之间传递数据。
第四层——传输层——是能够建立可靠性的重要一层。传输层的协议包括TCP和UDP。第五层是会话层,在该层上,会话在两个端点之间建立。第六层是表示层,主要负责与其上的应用层进行通信,还定义了使用的加密方式等。最后是应用层,它负责向用户或应用程序显示数据。
除了OSI模型之外,还存在另外一种模型,即DARPA模型(有时也被称作TCP/IP参考模型),这种模型仅分为4层。在讨论大多数有关网络的内容时,使用OSI模型是一种惯例。
当数据从应用程序处沿OSI模型的各层向下传递时,下一层的协议会在数据上添加一些它们自己的额外信息。这些数据通常包括一个由上一层添加到数据上的头部,有时还会添加尾部。这个过程称为封装(encapsulation)。封装的过程会一直持续直到数据在物理介质上传输。对于以太网来说,数据在传输时被称为帧。当以太网帧到达了它的目的地后,数据帧会开始沿OSI模型的各层向上传递,每一层都会读取发送方相应各层的头部(也有可能读取尾部)信息。这个过程称为解封(demultiplexing[1])。
1.1.1 面向连接和无连接的协议
在OSI模型的某些层中,协议可以根据它们是否面向连接来定义。这个定义参考了协议所提供的包括错误控制、流控制、数据分片和数据重组等功能。
让我们回想一下电话呼叫时的那种面向连接的协议。通常存在一种用于拨出电话并进行通话的双方都认可的协议。拨出电话的人,即通信的发起者,通过拨出电话号码来开始一次通话。另一个人(或者一台机器,越来越多的情况下是机器)接受电话通信的请求以便开始对话。发起者的通话请求通常由接收者一端的电话铃声所表示。接收者拿起电话,说“你好”或者其他的问候语。这时,发起者便对接收者的问候致以礼貌的回复。至此,我们可以确定会话已经成功建立了。接下来进行的便是会话的内容。在会话过程中,如果出现了一些问题,例如线路上有杂音,则一方会要求另一方重复他/她刚才所说的话。通话结束时,大多情况下,两方都会说“再见”来表明他/她已经说完了,而这通电话也将在不久后结束。
这个例子基本上显示了面向连接的协议(例如TCP)的部分场景。其实也有例外,就像TCP协议中也有一些异常或错误一样。例如,有时候,会话的发起会因为技术原因而失败,而这通常在发起方和接收方的掌控之外。
与面向连接的协议不同的是,无连接的协议更像是通过邮局传递明信片。在发信人将消息写在卡片上并将它丢进邮筒之后,发信人(大体上)就失去了对发出消息的控制。发信人并不会直接收到关于明信片是否被成功送达的确认消息。无连接的协议包括UDP和IP。
1.1.2 下一步
接下来,我将开始对互联网协议(IP)进行更加详细的介绍。然而,我强烈建议您再花些时间学习OSI模型以及相应的协议。协议和OSI模型的知识对于安全专家而言至关重要。我强烈推荐一本由Kevin R. Fall和W. Richard Stevens合著的TCP/IP Illustrated, Volume 1, Second Edition,它几乎是所有计算机专家桌上的必备之物。