《Linux防火墙(第4版)》——第2章 数据包过滤防火墙概念 2.1一个数据包过滤防火墙

  1. 云栖社区>
  2. 博客>
  3. 正文

《Linux防火墙(第4版)》——第2章 数据包过滤防火墙概念 2.1一个数据包过滤防火墙

异步社区 2017-05-02 20:32:00 浏览2050
展开阅读全文

本节书摘来自异步社区《Linux防火墙(第4版)》一书中的第2章,第2.1节,作者:【美】Steve Suehring(史蒂夫 苏哈林)著,更多章节内容可以访问云栖社区“异步社区”公众号查看

第2章 数据包过滤防火墙概念

什么是防火墙?过去的几年里,这个术语的含义已经发生了改变。根据RFC 2647“Benchmarking Terminology for Firewall Performance”,防火墙是“一台或一组设备,用以在网络间实施访问控制策略”。这个定义非常的宽泛,事实上有意如此。一个防火墙能够包含OSI模型中的很多层,并且可能会涉及进行数据包过滤的设备。它可以实施数据包检查和过滤,在更高的层次中对某应用程序实现某一策略,或做更多类似的事情。

一个无状态防火墙(不维护状态的防火墙,stateless firewall)通常仅仅在OSI模型的IP层(第三层)中执行一些数据包过滤,尽管有时这种类型的防火墙也会涉及更高层的协议。一个这种设备类型的例子可能包括一个边界路由器,它位于网络的边缘,实现了一个或更多的存取列表来防止各种类型的恶意流量进入本网络。有些人可能会说这种设备根本不是防火墙。然而,它看上去的确与RFC的定义相符。

一个边界路由器的访问列表可能会依据数据包所到达的接口的不同实现许多不同的策略。它通常会过滤连接到互联网的网络边界处的特定的数据包。这些数据包将会在本章中稍后进行讨论。

与无状态的防火墙相对的是状态防火墙(stateful firewall)。一个状态防火墙会对看到的一个会话中之前的数据包进行追踪,并基于此连接中已经看到的内容对数据包应用访问策略。状态防火墙隐含着它也拥有无状态防火墙所拥有的基础数据包过滤能力。一个状态防火墙会追踪一个TCP三次握手的阶段,并且会拒绝那些看上去对于三次握手来说失序的数据包。作为无连接协议,UDP对于状态防火墙来说处理起来会比较棘手,由于该通信过程中没有状态可言。然而,状态防火墙会跟踪最近的UDP报文交换以确定已经收到的某个数据包与一个近期发出的数据包相关。

一个应用层网关(Application-Level Gateway,ALG)有时被写为Application-Layer Gateway,它是另外一种形式的防火墙。与了解网络层以及传输层的无状态防火墙不同,应用层网关主要在OSI模型中的应用层(第七层)进行操作。应用层网关通常对于被传递的应用程序数据有较为深刻的了解,因此它能够寻找到任何与正被检查的应用程序的日常流量有偏差的部分。

一个应用层网关通常处在客户端和真实的服务器之间,并且主要目的是模仿服务器到客户端的行为。实际上,本地流量从不会离开本地LAN,而远处的流量也从不会进入本地LAN。

应用层网关有时也指的是一个模块,或是协助另一个防火墙的软件。许多防火墙与FTP ALG一起运行以支持FTP的主动模式数据通道,这种模式下客户端向FTP服务器发送用于连接的本地端口,以便服务器打开数据通道。服务器初始化到来的数据通道(然而,通常,客户端初始化所有连接)。应用层网关时常需要传递多媒体协议通过防火墙,因为多媒体会话通常使用由双方初始化的多个连接,并且通常会同时使用TCP和UDP。

ALG是一种代理。另一种形式的代理是链路层代理(circuit-level proxy)。链路层代理通常不具有应用层相关的知识,但它们能够实施存取和授权策略,并且它们充当原本的端到端连接中的终端点的作用。SOCKS是一个链路层代理的例子。代理服务器会扮演连接中两方的终端点的角色(既作为客户端从真实服务器处接收数据,又扮演服务器发送数据到真实的客户端),但服务器并没有任何应用相关的知识。

在这些例子中,防火墙的目的是实施您定义的访问控制或安全策略。安全策略对访问控制来说至关重要——在您的控制下,谁被允许而谁不被允许在服务器和网络上执行一些动作。

虽然对于防火墙来说,并没有明确的要求,但防火墙很多时候都执行了一些额外的任务,这些任务可能包含网络地址转换(Network Address Translation,NAT)、反病毒检测、事件通知、URL过滤、用户验证以及网络层加密。

本书的内容涵盖了数据包过滤防火墙、静态与动态防火墙、无状态与状态防火墙。所有这些提到的手段都是用来控制哪个服务能够由哪个用户访问。每种方法基于OSI参考模型里不同层次中的可用信息,都有其各自的优势和长处。

第1章介绍了防火墙所基于的概念和信息。本章会介绍这些信息在实现防火墙规则时是如何被使用的。

2.1 一个数据包过滤防火墙

在最基本的层面上,数据包过滤防火墙由一系列接受和拒绝的规则组成。这些规则明确地定义了哪些数据包被允许而哪些不被允许通过网络接口。防火墙规则使用第1章介绍的数据包报头来决定是否将数据包传递到它的目的地,还是静默地丢弃数据包,或拦截数据包并向发送的计算机返回一个错误条件。这些规则能够基于广泛的因素,包括源IP地址、目的IP地址、源端口、目的端口(更常用)、单个数据包的一部分如TCP报头、协议类型、MAC地址等。

MAC地址过滤在连接到互联网的防火墙中是不常见的。使用MAC地址过滤,防火墙可以阻挡或允许某些特定的MAC地址。然而,您十有八九可能仅仅看到一个MAC地址,这个地址来自于您防火墙上游的路由器。这意味着,只要您的防火墙可以看到,那么互联网上的所有主机看起来都有着同样的MAC地址。对于新防火墙管理员来说,一个常见的错误便是尝试在互联网防火墙中尝试使用MAC地址过滤。

使用混合的TCP/IP参考模型,则数据包过滤防火墙工作在网络层和传输层。如图2.1所示。

screenshot

管理防火墙的总体思路是:当您已经连接到互联网时,您需要十分仔细地控制到底允许什么在互联网和计算机之间传播。在连接到互联网的外部接口中,您应尽可能准确和明确地单独过滤从外部进入的数据和从内部发出的数据。

对于单一计算机的配置来说,将网络接口想象成一组I/O对可能会有所帮助。防火墙独立地过滤接口上进入和发出的数据。输入过滤器(input filter)和输出过滤器(output filter)能够,且基本上可以具有完全不同的规则。图2.2描述了规则处理的流程图。

这听上去挺强大,确实这样,但它却并不是绝对没错的安全机制。这只是故事的一部分,只是多层数据安全方法中的一层,并不是所有的应用程序通信协议都会提供自身以进行数据包过滤。

这种类型的过滤对于细粒度的验证和存取控制来说太过于低级。这些安全服务必须在更高的层次中提供。IP不具有查证发送者是否是他/她所声称的那个人的能力。在这一层中仅有的可用的识别信息是IP数据报头中的源地址。而源地址可以被轻易地修改。再向上一层,网络层和传输层都无法检查应用数据是否正确。然而,相比于能够更容易、更方便地在更高层次所做的控制,数据包层次允许在直接端口存取、数据包内容以及正确的通信协议方面进行更强力、更简单的控制。

没有了数据包层次的过滤,更高层的过滤以及代理安全措施将变得残缺或不起作用。至少在某种程度上,它们必须依赖下层通信协议的正确性。安全协议栈中的每一层都提供了其他层所不能提供的能力。
screenshot

网友评论

登录后评论
0/500
评论
异步社区
+ 关注