包过滤防火墙是最原始的防火墙,现在的绝大多数路由器都具有包过滤功能,因此路由器就可以作为包过滤防火墙。使用包过滤防火墙前,要制订规则,这些规则说明什么样的数据能够通过,什么样的数据禁止通过,多条规则组成一个访问控制列表(Access Control List,ACL)。对所有数据,防火墙都要检查它与ACL中的规则是否匹配。在确定过滤规则之前,需要做如下决定。
(1)打算提供何种网络服务,并以何种方向(从内部网络到外部网络,或者从外部网络到内部网络)提供这服务。
(2)是否限制内部主机与因特网进行连接。
(3)因特网上是否存在某些可信任主机,它们需要以什么形式访问内部网。
包过滤防火墙根据每个包头部的信息来决定是否要将包继续传输,从而增强安全性。对于不同的包过滤防火墙,用来生成规则进行过滤的包头部信息不完全相同,但通常都包括以下信息:
(1)接口和方向:包是流入还是离开网络,这些包通过哪个接口。
(2)源和目的IP地址:检查包从何而来(源IP地址)、发往何处(目的IP地址)。
(3)IP选项:检查所有选项字段,特别是要阻止源路由(Source Routing)选项。
(4)高层协议:使用IP包的上层协议类型,例如TCP还是UDP。
(5)TCP包的ACK位检查:这一字段可帮助确定是否有及以何种方向建立连接。(6)ICMP的报文类型:可以阻止某些刺探网络信息的企图。
(7)TCP和UDP包的源和目的端口:此信息帮助确定正在使用的是哪些服务。
创建包过滤防火墙的过滤规则时,要注意以下重要事项:
(1)在规则中要使用IP地址,而不要使用主机名或域名。虽然进行IP地址欺骗和域名欺骗都不是非常难的事,但在很多攻击中,IP地址欺骗常常是不容易做到的,因为黑客想要真正得到响应并非易事。然而只要黑客能够访问DNS数据库,进行域名欺骗却是很容易的事。这时,域名看起来是真实的,但它对应的IP地址却是另一个虚假的地址。
(2)不要回应所有从外部网络接口来的ICMP数据,因为它们很可能给黑客暴露信息,特别是哪种包可以流入网络,哪种包不可以流入网络的信息。响应对某些ICMP数据可能等于告诉黑客,在某个地方确实有一个包过滤防火墙在工作。在这种情况下,对黑客来说有信息总比没有好。防火墙的主要功能之一就是隐藏内部网络的信息。黑客通过对信息的筛选处理,可以发现什么服务不在运行,而最终发现什么服务在运行。如果不响应ICMP数据,就可以限制黑客得到可用的信息。
(3)要丢弃所有从外部进入而其源IP地址是内部网络的包。这很可能是有人试图利用这些包进行IP地址欺骗,以达到通过网络安全关口的目的。
(4)防火墙顺序使用ACL中的规则,只要有一条规则匹配,就采取规则中规定的动作,后面的规则不再使用。所以,规则的顺序非常重要,错误的顺序可能使网络不能正常工作,或可能导致严重的安全问题。
1.用于包过滤的IP头信息
通常,包过滤防火墙只根据包的头部信息来操作。由于在每个包里有多个不同的协议头,所以需要检查那些对包过滤非常重要的协议头。但大多数包过滤防火墙不使用以太网帧的头部信息,帧里的源物理地址和其他信息没有太大用处,因为源物理地址一般是包通过因特网的最近一个路由器的物理地址。
接下来是IP包的头部信息,主要过滤以下几种头部信息。
(1)IP地址。显然源地址和目的地址是最有用的。如果防火墙只允许因特网上某些计算机访问内部网络,就可以采用基于源地址过滤的方法。相反亦然,可以对网络内部产生的包进行过滤,只允许某些特定目的地址的包通过防火墙到达因特网。
假设内部网络的网络地址为172.21.94.0/24,为阻止来自因特网的IP地址欺骗攻击,可以制订如表5-2所示的ACL。来自因特网的IP数据报不可能具有内部网络的IP地址,否则一定就是IP地址欺骗,第l条规则将禁止这样的数据通过。第2条规则将允许所有其他数据通过。但是如果这两条规则交换顺序,所有数据都会通过防火墙,就不能阻止ICMP消息了。
表5-2 阻止IP地址欺骗的ACL
在建立过滤规则时,一定要用IP地址,而不要用主机名或域名,因为域名欺骗比IP地址欺骗要容易得多。
(2)协议字段。IP包头部中的协议字段用以确定IP包中的数据是哪一个上层协议的数据,如TCP、UDP或ICMP。
通常,承载ICMP数据的包都应丢弃,因为ICMP数据将会告知对方本网内部的信息,这时可以制订如表5-3所示的ACL。当IP数据报装载ICMP消息时,IP数据报头部的协议字段的值为1,所以协议字段值为1的数据要禁止通过,这就是第l条规则规定的内容;若分组与第1条规则不匹配,则继续与第2条规则比较,任何分组都与第2条规则匹配,都能通过防火墙。这两条规则结合在一起,就能阻止ICMP消息通过防火墙,而其他数据都能通过防火墙。
表5-3 阻止ICMP消息通过的ACL
(3)IP包分片与选项字段。另一个IP包过滤要注意的是IP包分片与其他选项字段,它们都有可能导致某些攻击,而且现在IP包分片与选项字段用得越来越少,因此可以拒绝这样的IP包。
2.用于包过滤的TCP头信息
TCP是因特网服务使用最普遍的协议,例如,Telnet、FTP、SMTP和HTTP都是以TCP为基础的服务。TCP提供端点之间可靠的双向连接,进行TCP传输就像打电话一样,必须先建立连接,之后才能和被叫的用户建立可靠的连接。
主要过滤以下几种TCP的头部信息。
(1)端口号。有时仅仅依靠IP地址进行数据过滤是不可行的,因为目标主机上往往运行多种网络服务。如果仅仅基于包的源或目的地址来拒绝和允许该包,就会造成要么允许全部连接,要么拒绝全部连接的后果,而端口号可帮助我们有选择地拒绝或允许个别服务。例如,我们不想让用户采用Telnet的方式连接到系统,但这不等于同时禁止用户访问同一台计算机上的WWW服务。所以,在IP地址之外我们还要对TCP端口进行过滤。
默认的Telnet服务连接端口号是23,假如我们不允许客户机建立与服务器的Telnet连接,那么只需命令防火墙检查发往服务器的数据包,把其中目标端口号是23的包过滤掉就行了。这样,我们把IP地址和TCP端口号结合起来就可以作为过滤标准来实现可靠的防火墙。
与服务器不同,几乎所有的TCP客户程序都使用大于1023的随机分配端口号,所以,过滤客户机的端口号非常困难,几乎无法过滤。
一条好的包过滤规则可以同时指定源和目的端口。但是一些老的路由器不允许指定源端口,这可能会使防火墙产生很大的安全漏洞。例如,创建控制SMTP连接流入和流出的ACL,首先假设规则中只允许使用目的端口,如表5-4所示。
表5-4 SMTP连接ACL
(www.xing528.com)
续表
在这个例子中,可以看到规则1和规则3允许端口25的流入和流出连接,该端口是SMTP协议的默认端口。规则1允许外部计算机向内部网络的服务器端口25发送数据,规则2允许网络内部的服务器回应外部SMTP请求,并且假定它使用大于等于1024的端口号,因为规则只允许端口大于或等于1024的连接。
规则3和规则4允许反方向的SMTP连接,内部网络的计算机可以与外部网络的SMTP服务器的端口25建立连接。最后的规则5不允许其他任何连接。这些过滤规则看起来非常好,允许两个方向的SMTP连接,并且保证了内部局域网的安全,但这是错误的。当创建包过滤规则时,需要同时观察所有的规则,而不是一次只观察一条或两条。在这个例子中,规则2和规则4允许端口大于等于1024的所有服务,不论是流入还是流出方向。黑客可以利用这一个漏洞去做各种事情,包括与特洛伊木马程序通信。要修补这些规则,除了能够指定目的端口之外,还要能够指定源端口。让我们看下一个改进以后的例子,如表5-5所示。
表5-5 改进后的SMTP连接ACL
这时,不再允许通信两端端口都大于等于1024的连接。相反,在连接的一端,这些连接被绑定到SMTP端口25上。
(2)SYN位。在TCP协议头中,有一个控制比特位:SYN。在三次握手建立连接的前两次握手期间,该位要置1。SYN洪水是一种拒绝服务攻击,黑客不断发送SYN位已经置1的包,这样目标主机就要浪费宝贵的CPU周期建立连接,并且分配内存。检查SYN位虽然不可能过滤所有SYN位已经置1的包,但是可以监视日志文件,发现不断发送这类包的主机以便让那些主机不能通过防火墙。
这种过滤机制只适用于TCP协议,对UDP包而言就无效了,因为UDP包没有SYN位。
(3)ACK位。TCP是一种可靠的通信协议,采用滑动窗口实现流量控制,每个发送出去的包必须获得一个确认,在响应包中ACK位置1就表示确认号有效。在包过滤防火墙中,通过检查这一位以及通信的方向,可以只允许建立某个方向的连接。
例如,如果仅允许建立一个从内部计算机到因特网上服务器的HTTP会话,但不允许相反方向的连接,那么就要建立和表5-6相似的ACL。
表5-6 过滤ACK位的ACL
规则1允许内部网计算机向因特网上WWW服务器发送包,目的端口号是WWW服务器的端口80,并且允许ACK为0或1的包通过防火墙。规则2允许因特网上的WWW服务器向内部主机返回包。
外部计算机无法主动与内部计算机建立一个TCP连接,因为规则2说明进入数据的ACK位必须置1,否则将被丢弃。初始连接请求(第一次握手)的ACK位为0,这足以防止外部计算机主动与内部计算机建立TCP连接。
同样,这种过滤机制只适用于TCP协议,因为UDP包没有ACK位。
3.UDP包的过滤
现在回过头来看看怎么解决UDP问题。UDP包没有SYN位与ACK位,所以不能据此过滤。UDP是发出去就不管的“不可靠”通信,这种类型的服务通常用于广播、路由、多媒体等广播形式的通信任务。有一个最简单的可行办法,防火墙设置为只转发来自内部接口的UDP包外出,来自外部接口的UDP包则禁止进入内部网络。但这显然不太合理,因为绝大多数应用都是双向通信。
状态检测防火墙可以通过“记忆”出站的UDP包来解决这个问题:如果入站UDP包匹配最近出站UDP包的地址和端口号就让它进来;如果在内存中找不到匹配的出站信息就拒绝它。
与TCP类似,UDP包中的端口号也是很好的过滤依据。
4.ICMP包的过滤
TCP/IP协议族使用网际控制报文协议(ICMP)在双方之间发送控制和管理信息。例如,有一种ICMP报文称为源抑制报文,计算机发送这种报文告诉连接的发送方停止发送包。这样可以进行数据流控制,从而连接的接收端不会因不堪重负而丢包。数据过滤中很有可能不需要阻止该报文,因为源抑制报文很重要。重定向报文用于告诉主机或路由器使用其他的路径到达目的地,利用这类报文,黑客可以向路由器发送错误数据来搅乱路由表。
ICMP数据很有用,但也很有可能被利用来收集网络的有关信息,我们必须区别对待。防火墙的一个重要功能就是让外部得不到网络内部主机的信息。为做到这一点,需要阻止以下几种报文类型:
(1)流入的echo请求和流出的echo响应——允许内部用户使用ping命令测试外部主机的连通性,但不允许相反方向的类似报文。
(2)流入的重定向报文——这些信息可以用来重新配置网络的路由表。
(3)流出的目的不可到达报文和流出的服务不可用报文——不允许任何人刺探网络。通过找出那些不可到达或那些不可提供的服务,黑客就更加容易锁定攻击目标。
5.包过滤防火墙的优缺点
包过滤防火墙是最简单的一种防火墙,与应用代理防火墙相比较,包过滤防火墙有其优缺点。以下是包过滤防火墙的一些优点:
(1)包过滤是“免费的”,如果已经有了路由器,它很可能支持包过滤。在小型局域网内,单个路由器用作包过滤防火墙足够了。
(2)理论上只需要在局域网连接到因特网或外部网的地方设置一个过滤器,这里是网络的一个扼流点。
(3)使用包过滤防火墙,不需要专门培训用户或使用专门的客户端和服务器程序。包过滤防火墙会为网络用户透明地完成各种工作。
当然,包过滤防火墙也有不足之处:
(1)使路由器难以配置,特别是使用大量规则进行复杂配置的时候。在这种情况下容易出错,并且很难进行完全的测试。
(2)当包过滤防火墙出现故障,或者配置不正确的时候,对网络产生的危害比应用代理防火墙产生的危害大得多。当路由器的过滤规则没有正确配置时,会允许包通过,但代理应用程序出现故障时,不直接让包通过。代理的故障对连接不会产生安全漏洞。
(3)包过滤防火墙只对少量数据,如IP包的头部信息进行过滤。由于仅使用这些信息来决定是否让包通过防火墙,所以包过滤防火墙的工作限制在它力所能及的范围之内。状态检测技术改进了这一点,但对于一个完整的防火墙解决方案,除了考虑仍然使用包过滤防火墙之外,还需考虑使用应用代理防火墙。
(4)很多具有包过滤功能的防火墙缺少健壮的日志功能,因此当系统被渗入或被攻击时,很难得到大量有用信息。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。