防火墙与H.323协议


随着Internet的快速发展,在网上进行多媒体通信,如网络会议,网络电话等应用迅速普及。随着这些技术的大规模应用,一些现存网络的冲突也突显了出来。比如当前一些网络实体限制端到端的分组(包)通过,这些实体指的就是防火墙和网络地址转换器。

一、H.323简介

现在常用的网络会议软件和网络电话软件采用的是国际电信联盟(ITU-T)制定的H.323协议族,其中包括H.225,H.245,Q.931等,另外还有IETF制定的SIP(会话启动协议),SIP协议采用与http类似的文本命令形式,而且协议比较简单,是未来网络电话和即时通讯的方向。但由于H.323出现较早,已经有很多商业应用,比如微软的NetMeeting采用的就是比较成熟的H.323,另外中国的电信企业实施IP电话事也适用的H.323协议。所以H.323还将会在长时间内和SIP同时存在。

H.323标准定义了一个在基于分组的网络上进行灵活的,实时的,可交互的多媒体通信协议集。个人计算机能在包交换网络(网际网和内部网)和电路交换网络上传输音频,视频和数据。

H.323网络包括终端,网关,网守(gatekeeper)和多点控制单元(MCU).

网守在局域网上监视所有在其区域内的H.323呼叫,它提供两个主要的服务:呼叫准入和地址解析。所有在此区内的H.323客户端必须在网守的协助下开始一个呼叫,另外网守还可以根据当前可用带宽决定是否允许客户呼叫。

网关提供在异种网络之间操作的能力,例如在包交换网络和电话网之间就需要有一个网关进行协议和数据的转换。

MCU(多点控制单元)提供多方的多媒体会议能力。它协调所有参与者的媒体通信能力,为端点提供音频混合和视频选择(端点本身不能完成这个功能)。

下面我们以点到点的H.323通信为例说明其通信过程。在此例中,我们用Alice和Bob作为H.323通信的两个端点。Alice在防火墙的外侧,Bob在防火墙的内侧。

首先,Alice向Bob的H.323知名端口1720建立了一条连接。然后,Bob和Alice在此连接上发送Q.931包,在这些交换的数据包中,Bob和Alice发送动态的端口用于建立H.245连接(即上图CONNECT数据包中的H.245 Address)。

随后,呼叫者根据在Q.931流中协商的临时端口建立H.245连接。H.245处理所有的呼叫参数协商,例如所要用的编码解码算法等。一旦这些参数协商完毕,H.245会话开始执行OpenLogicalChannel,这个过程为特定的媒体流(如:音频或视频)发送传输者和发送者的RTP和RTCP地址和端口(即上图OpenLogicalChannel和OpenLogicalChannelAck中的RTP及RTCP Address)。然后,这些媒体流就可以在两个端点之间进行传输,直到会话结束。

二、H.323通过防火墙的难点

1、大量应用动态端口

通过防火墙可以限定进入网内的数据包类型和流量(这种限定可以基于源IP地址、目的IP地址或端口号等简单的规则)。对于H.323协议,需要开放的端口为1718或1719(发向网守的RAS消息所用端口)、1720(呼叫信令消息所用端口)。但是这样的设定并不能完整地解决H.323应用穿越防火墙的问题,主要原因是媒体流需要通过RTP协议来传输,而传输所需要的源端口和目的端口是动态确定的,这些端口可能是大于1024的任意端口,因此要使H.323数据流通过防火墙,需要在防火墙规则中打开所有大于1024的端口,这显然是非常不安全的。

2、防火墙的网络地址转换

另外,随着Internet的快速膨胀,Ipv4地址空间将处于严重耗尽的境况。网络地址转换(NAT)可以解决这个问题。网络地址转换分为传统的网络地址转换和网络地址端口转换。

传统的网络地址转换就是将通过防火墙的地址进行转换,允许一个组织在内部通信时使用一定范围内的私有地址,当与外部通信时使用一个小的公共IP地址池

另一种网络地址转换是网络地址和端口转换,这种转换形式有一块内部地址,一个或多个外部地址,然后用端口号进行区分。

NAT是置于两网间的边界,其功能是将外网可见的IP地址与内网所用的地址相映射,这样,每一受保护的内网可重用特定范围的IP地址(192.168.x.x),而这些地址是不用于公网的。从外网来的含公网地址信息的数据包先到达NAT,NAT使用预设好的规则(其组元包含源地址、源端口、目的地址、目的端口、协议)来修改数据包,然后再转发给内网接受点。对于流出内网的数据包也须经过这样的转换处理。

从安全性上来看NAT提供了对外隐藏内网拓扑的一个手段,但也给H.323应用带来巨大的麻烦。协议消息包一般是在特定区段中内嵌IP地址和端口号,而不是放置在IP包头,这样如果仅仅使用NAT,协议里的IP和端口号不能指向正确的地方,从而导致通信不能正常进行。

3、ASN.1编码

H.323的大部分控制信息用ASN.1进行编码,这是一种非常复杂的编码模式,相同版本的相同应用在连接相同的目的时,会使用不同的选项,从而使相同成员在数据流中的偏移量不同。为了在提取其中的有用信息,需要对用ASN.1编码过的数据包进行仔细的解码。