ALG(Application Level Gateway,应用层网关)主要完成对应用层报文的处理。通常情况下,NAT只对报文头中的IP地址和端口信息进行转换,不对应用层数据载荷中的字段进行分析。然而一些特殊协议,它们报文的数据载荷中可能包含IP地址或端口信息,这些内容不能被NAT进行有效的转换,就可能导致问题。
例如,FTP应用就由数据连接和控制连接共同完成,而且数据连接的建立动态地由控制连接中的载荷字段信息决定,这就需要ALG来完成载荷字段信息的转换,以保证后续数据连接的正确建立。
ALG在与NAT(Network Address Translation,网络地址转换)、ASPF(Application Specific Packet Filter,基于应用层状态的包过滤)配合使用的情况下,可以实现地址转换、数据通道检测和应用层状态检查的功能。
l 地址转换
对报文应用层数据载荷中携带的IP地址、端口、协议类型(TCP或者UDP)、对端地址(在数据载荷中带有对端的地址)进行地址转换。
l 数据通道检测
提取数据通道信息,为后续的报文连接建立数据通道。此处的数据通道为相对于用户的控制连接而言的数据连接。
l 应用层状态检查
对报文的应用层协议状态进行检查,若正确则更新报文状态机进行下一步处理,否则丢弃报文。
本特性支持对多种应用层协议的ALG处理,不同的协议对以上三种功能的支持情况有所不同,实际中根据具体需要选择支持全部或部分功能。
目前实现ALG功能的常用应用层协议包括:
l DNS(Domain Name System,域名系统)
l FTP(File Transfer Protocol,文件传输协议)
l H.323(包括RAS、H.225、H.245),一种多媒体会话协议
l HTTP(Hyper Text Transport Protocol,超级文本传输协议)
l ICMP(Internet Control Message Protocol,Internet控制报文协议)
l ILS(Internet Locator Server,Internet定位服务)
l MSN/QQ,两种常见的语音视频通讯协议
l NBT(Network Basic Input/Output System,网络基本输入/输出系统)
l RTSP(Real-Time Streaming Protocol,实时流协议)
l SIP(Session Initiation Protocol,会话发起协议)
l SQLNET,一种Oracle数据库语言
l TFTP(Trivial File Transfer Protocol,简单文件传输协议)
下面以FTP协议为例,简单描述使能ALG特性的设备在网络中的工作过程。如图1所示,位于外部网络的客户端以PASV方式访问内部网络的FTP服务器,经过中间的设备Router进行NAT转换,该设备上使能了ALG特性。
图1 PASV方式的FTP-ALG
整个通信过程包括如下四个阶段:
(1) 建立控制通道
客户端向服务器发送TCP连接请求。TCP连接建立成功后,服务器和客户端进入用户认证阶段。若TCP连接失败,服务器会断开与客户端的连接。
(2) 用户认证
客户端向服务器发送认证请求,报文中包含FTP命令(USER、PASSWORD)及命令所对应的内容。
客户端发送的认证请求报文在通过配置了ALG的设备时,报文载荷中携带的命令字将会被解析出来,用于进行状态机转换过程是否正确的检查。若状态机转换发生错误,则丢弃报文。这样可防止客户端发送状态机错误的报文攻击服务器或者非法登陆服务器,起到保护服务器的作用。
客户端的认证请求报文通过ALG处理之后,到达服务器端,服务器将对其进行响应。
(3) 创建数据通道
认证状态正确且用户是服务器已经授权的客户端,才能和服务器建立数据连接,进行数据的交互。
如图1所示,当客户端发送“PASV”命令发起连接时,服务器会在发送给客户端的PASV响应报文中携带自己的私网地址和端口号(IP1,Port1),响应报文经过ALG设备时被解析,其中携带的服务器的私网地址和端口号被转换成其对应的公网地址和端口号(IP2,Port2),之后在该地址和端口与客户端的地址和端口之间将建立起数据通道。
(4) 数据交互
客户端和服务器之间的数据交互可以直接通过数据通道来进行。