防火墙的结构和原理

2022-10-21 围观热度 562网站专题
无论服务器部署在哪里,现在一般都会在前面部署一个防火墙,如果包无法通过防火墙,就无法到达服务器。因此,让我们先来探索一下包是如何通过防火墙的。
防火墙的基本思路刚才已经介绍过了,即只允许发往特定服务器中的特定应用程序的包通过,然后屏蔽其他的包。不过,特定服务器上的特定应用程序这个规则看起来不复杂,但网络中流动着很多各种各样的包,如何才能从这些包中分辨出哪些可以通过,哪些不能通过呢?为此,人们设计了多种方式[插图],其中任何一种方式都可以实现防火墙的目的,但出于性能、价格、易用性等因素,现在最为普及的是包过滤方式。因此,我们的探险之旅就集中介绍一下包过滤方式的防火墙是怎样工作的。
网络包的头部包含了用于控制通信操作的控制信息,只要检查这些信息,就可以获得很多有用的内容。这些头部信息中,经常用于设置包过滤规则的字段如表5.1所示。不过,光看这张表还是难以理解过滤规则是如何设置的,所以我们来看一个具体的例子[插图]。表5.1 地址转换和包过滤中用于设置规则的字段
假设我们的网络如图5.2所示,将开放给外网的服务器和公司内网分开部署,Web服务器所在的网络可以从外网直接访问。现在我们希望允许从互联网访问Web服务器(图5.2①),但禁止Web服务器访问互联网(图5.2②)。以前很少禁止Web服务器访问互联网,但现在出现了一些寄生在服务器中感染其他服务器的恶意软件,如果阻止Web服务器访问互联网,就可以防止其他服务器被感染。要实现这样的要求,应该如何设置包过滤的规则呢?我们就用这个例子来看一看包过滤的具体思路。
在设置包过滤规则时,首先要观察包是如何流动的。通过接收方IP地址和发送方IP地址,我们可以判断出包的起点和终点。在图5.2①的例子中,包从互联网流向Web服务器,从互联网发送过来的包其起点是不确定的,但终点是确定的,即Web服务器。因此,我们可以按此来设定规则,允许符合规则的包通过。也就是说,允许起点(发送方IP地址)为任意,终点(接收方IP地址)为Web服务器IP地址的包通过(图5.2中表的第1行)。如果可以确定发送方IP地址,也可以将其加入规则,但这个例子中起点是不确定的,因此可以不将发送方IP地址设为判断条件。
这样一来,从互联网发往Web服务器的包就可以通过防火墙了,但光这样还无法完成访问。因为收到包之后,Web服务器需要通过确认应答机制[插图]通知发送方数据已经正常收到,这需要Web服务器向互联网发送包。在Web服务器发往互联网的包中,我们可以将起点(发送方IP地址)为Web服务器地址的包设置为允许通过(图5.2中表的第3行)。像这样,我们可以先根据接收方和发送方地址判断包的流向,并设置是允许还是阻止。
不过,按照前面的设置,相当于允许了互联网和Web服务器之间所有的包通过,这个状态很危险。假如服务器上还有一个文件服务器程序在工作,那么这些文件就可能会被非法访问从而造成信息泄露。有风险的还不仅是文件服务器,现在每天都会发布若干安全漏洞,可以说随处都隐藏着风险。因此,我们最好是阻止除了必需服务(也就是本例中的Web服务)以外的所有应用程序的包。
当我们要限定某个应用程序时,可以在判断条件中加上TCP头部或者UDP头部中的端口号。Web服务器的端口号为80[插图],因此我们在刚才的接收方IP地址和发送方IP地址的基础上再加上80端口作为条件就可以了。也就是说,当包的接收方IP地址为Web服务器地址,且接收方端口号为80时,允许这些包通过(图5.2中表的第1行);或者当包的发送方IP地址为Web服务器地址,且发送方端口号为80时,允许这些包通过(图5.2中的表的第3行)。如果要允许访问除Web之外的其他应用程序,则只要将该应用程序的端口号设置到防火墙中并允许通过就可以了。
通过防火墙像这样,我们可以在防火墙中设置各种规则,当包到达防火墙时,会根据这些规则判断是允许通过还是阻止通过。如果判断结果为阻止,那么这个包会被丢弃并被记录下来[插图]。这是因为这些被丢弃的包中通常含有非法入侵的痕迹,通过分析这些包能够搞清楚入侵者使用的手法,从而帮助我们更好地防范非法入侵。
如果包被判断为允许通过,则该包会被转发出去,这个转发的过程和路由器是相同的。如果我们只关注判断是否允许包通过这一点,可能会觉得防火墙是一种特殊机制,而且市面上销售的防火墙大多是专用的硬件设备或者软件,这也加深了大家的这种印象。实际上,在防火墙允许包通过之后,就没有什么特别的机制了,因此包过滤并不是防火墙专用的一种特殊机制,而是应该看作在路由器的包转发功能基础上附加的一种功能。只不过当判断规则比较复杂时,通过路由器的命令难以维护这些规则,而且对阻止的包进行记录对于路由器来说负担也比较大,因此才出现了专用的硬件和软件。如果规则不复杂,也不需要记录日志,那么用内置包过滤功能的普通路由器来充当防火墙也是可以的。
防火墙无法抵御的攻击防火墙可以根据包的起点和终点来判断是否允许其通过,但仅凭起点和终点并不能筛选出所有有风险的包。比如,假设Web服务器在收到含有特定数据的包时会引起宕机。但是防火墙只关心包的起点和终点,因此即便包中含有特定数据,防火墙也无法发现,于是包就被放行了。然后,当包到达Web服务器时,就会引发服务器宕机。通过这个例子大家可以看出,只有检查包的内容才能识别这种风险,因此防火墙对这种情况无能为力。
要应对这种情况有两种方法。这个问题的根源在于Web服务器程序的Bug,因此修复Bug防止宕机就是其中一种方法。这类Bug中,危险性较高的会作为安全漏洞公布出来,开发者会很快发布修复了Bug的新版本,因此持续关注安全漏洞信息并更新软件的版本是非常重要的。
另一种方法就是在防火墙之外部署用来检查包的内容并阻止有害包的设备或软件[插图]。当然,即便是采用这种方法也并不是完美无缺的,因为包的内容是否有风险,是由Web服务器有没有Bug决定的,因此当服务器程序中有潜在的Bug并且尚未被发现时,我们也无法判断包中的风险,也无法阻止这样的包。也就是说,我们无法抵御未知的风险。从这一点来看,这种方法和直接修复Bug的方法是基本等效的,但如果服务器数量较多,更新软件版本需要花费一定的时间,或者容易忘记更新软件,这时对包的内容进行检查就会比较有效。
微信扫码咨询 微信扫码咨询
微信咨询 微信咨询