防火墙策略里明明放行了 FTP,客户端能登录、能列目录,但一传文件就卡死。这种「半通不通」的现象,几乎都是多通道协议撞上了防火墙。

问题的根源:一个协议,两条连接

FTP 是最典型的例子。它用两条 TCP 连接:

关键在最后一句——数据连接用什么端口,是写在控制连接的数据报文里的。防火墙如果不解析应用层内容,它看到的就是:

防火墙视角
第 1 条连接: 10.1.1.10:1025 → 200.1.1.1:21     ← 策略放行了 FTP,通过
第 2 条连接: 10.1.1.10:1026 → 200.1.1.1:49937   ← 端口 49937 是什么鬼?策略没放行,丢掉
                                                     客户端就卡在「正在传输数据…」

★ 防火墙不知道 49937 是 FTP 协商出来的
★ 因为它没看控制连接里的应用层内容

FTP 的两种模式,麻烦的方向还不一样

主动模式(PORT)被动模式(PASV)
谁发起数据连接服务器 → 客户端客户端 → 服务器
服务器用什么端口固定 20 端口随机高端口
客户端怎么告知发 PORT 命令,告诉服务器「来连我的 IP:端口」发 PASV 命令,服务器回「你来连我 IP:端口」
防火墙视角的问题外网服务器主动进内网,方向反了,默认策略必挡方向对,但端口随机,策略里没法预先写
谁需要改配置客户端(改成 PASV)服务器或防火墙

日常最常见的现象是:浏览器/资源管理器访问 FTP 卡在「正在获取目录列表」。原因通常是主动模式——客户端发了 PORT,服务器从 20 端口往回连,被防火墙挡了。把客户端改成被动模式往往立刻就好。

ASPF 怎么解:从会话表到 server-map

ASPF(Application Specific Packet Filter)的思路是:让防火墙去看控制连接的报文内容,把协商出来的连接提前「登记」下来。

ASPF 三步流程:控制连接建立、解析报文生成 server-map、数据连接命中放行
▲ ASPF 的三步:控制连接 → 解析生成 server-map → 数据连接命中放行

会话表 vs server-map,分工很清楚

会话表(session table)server-map
存什么一条已经建立的连接的五元组一条即将建立的连接的五元组
怎么产生首包匹配策略 permit 后创建ASPF 解析应用层内容后动态创建
作用后续包直接命中,跳过策略数据连接到达时先查这里,命中即放行
老化时间按协议定(TCP 一般 30 分钟)短得多(默认约 30 分钟,但常配更短)
双机热备必须同步必须同步(否则切换后数据连接断)

把 server-map 理解成「防火墙给多通道协议开的一张临时通行证」最贴切。它不是永久放行,会老化。

华为 USG 配置

华为 USG 上 ASPF 分两个层面:全局的协议识别和区域间的检测方向。

huawei usg · ASPF
# ① 在区域间开启 ASPF 检测(关键是方向!)
firewall interzone trust untrust
 detect ftp                    # 检测 FTP
 detect sip                    # 检测 SIP
 detect h323                   # 检测 H.323
 detect rtsp                   # 检测 RTSP(视频点播)

# ★ detect 的方向:写「客户端所在区域 服务器所在区域」
#   因为 ASPF 是站在客户端侧去解析控制连接
#   内网用户访问外网 FTP → firewall interzone trust untrust / detect ftp
#   外网用户访问 DMZ 的 FTP → firewall interzone untrust dmz / detect ftp

# ② 查看生成的 server-map
display firewall server-map                    # ★ 所有 server-map
display firewall server-map verbose            # 详细信息(含老化时间)
display firewall server-map type ftp

# ③ 相关会话
display firewall session table application ftp

# ④ 如果不需要了,清掉
reset firewall server-map

几个容易搞错的地方

还有哪些协议需要 ASPF

协议为什么需要华为关键字
FTP数据连接端口协商(PORT / PASV)detect ftp
SIPSDP 报文里带媒体流(RTP)的地址和端口detect sip
H.323呼叫信令里协商 H.245 通道detect h323
RTSPSETUP 报文里协商 RTP 端口detect rtsp
MGCP / SCCP语音呼叫控制detect mgcp / detect sccp

共同特征:控制通道和业务通道分离,且业务通道的地址端口由控制通道动态协商。只要符合这个特征,纯状态检测的防火墙就一定会挡。

排错

一句话总结:ASPF 是状态检测的补丁,专门对付「控制通道协商出业务通道」的协议。会话表管已建立的连接,server-map 管即将建立的连接;配 ASPF 的核心是 detect 写在正确的区域方向上。

📌 本篇整理自 2024–2025 的「数通」学习笔记(HCIE-Datacom 方向)

整理自原始笔记的「ASPF」页。
原笔记主要讲 ASPF 的定义与 server-map 概念,本文补齐了 FTP 主动/被动两种模式在防火墙视角下的具体差异、detect 方向这个高频错误点,以及 PASV 模式下往往不需要 ASPF 的原因。
配置命令保留华为 VRP 原样。