防火墙策略里明明放行了 FTP,客户端能登录、能列目录,但一传文件就卡死。这种「半通不通」的现象,几乎都是多通道协议撞上了防火墙。
问题的根源:一个协议,两条连接
FTP 是最典型的例子。它用两条 TCP 连接:
- 控制连接:客户端 → 服务器 21 端口,全程保持,用来发命令(登录、列目录、传文件指令);
- 数据连接:真正传文件的那条,端口是协商出来的、随机的。
关键在最后一句——数据连接用什么端口,是写在控制连接的数据报文里的。防火墙如果不解析应用层内容,它看到的就是:
第 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)的思路是:让防火墙去看控制连接的报文内容,把协商出来的连接提前「登记」下来。
会话表 vs server-map,分工很清楚
| 会话表(session table) | server-map | |
|---|---|---|
| 存什么 | 一条已经建立的连接的五元组 | 一条即将建立的连接的五元组 |
| 怎么产生 | 首包匹配策略 permit 后创建 | ASPF 解析应用层内容后动态创建 |
| 作用 | 后续包直接命中,跳过策略 | 数据连接到达时 |
| 老化时间 | 按协议定(TCP 一般 30 分钟) | 短得多(默认约 30 分钟,但常配更短) |
| 双机热备 | 必须同步 | 必须同步(否则切换后数据连接断) |
把 server-map 理解成「防火墙给多通道协议开的一张临时通行证」最贴切。它不是永久放行,会老化。
华为 USG 配置
华为 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
几个容易搞错的地方
- detect 的方向搞反了:这是最常见的错误。ASPF 需要解析客户端发出的控制报文,所以 detect 要配在「客户端区域 → 服务器区域」这个方向上;
- ASPF 不替代安全策略:控制连接仍然需要一条 permit 策略。ASPF 只管「协商出来的第二条连接」;
- 被动模式往往不需要 ASPF:PASV 模式下数据连接是客户端发起的,方向正常,只要客户端到服务器的随机端口有策略放行就行(或者策略里直接放行整个服务)。所以很多环境「关了 ASPF 也能用 FTP」——那是因为客户端默认用了 PASV。
还有哪些协议需要 ASPF
| 协议 | 为什么需要 | 华为关键字 |
|---|---|---|
| FTP | 数据连接端口协商(PORT / PASV) | detect ftp |
| SIP | SDP 报文里带媒体流(RTP)的地址和端口 | detect sip |
| H.323 | 呼叫信令里协商 H.245 通道 | detect h323 |
| RTSP | SETUP 报文里协商 RTP 端口 | detect rtsp |
| MGCP / SCCP | 语音呼叫控制 | detect mgcp / detect sccp |
共同特征:控制通道和业务通道分离,且业务通道的地址端口由控制通道动态协商。只要符合这个特征,纯状态检测的防火墙就一定会挡。
排错
- 现象:能登录、能列目录、传文件卡死 → 先
display firewall server-map看有没有生成表项。没有 → detect 没开或方向错了;有但没生效 → 看会话表里数据连接有没有建起来; - 现象:切换主备后 FTP 传文件断 → HRP 没同步 server-map,检查 HRP 的备份内容;
- 现象:时好时坏 → server-map 老化时间太短,长传输过程中表项过期了,把老化时间调大;
- 万能验证手段:在客户端同时开
display firewall server-map反复刷,看执行 FTP 操作时表项有没有实时冒出来。
一句话总结:ASPF 是状态检测的补丁,专门对付「控制通道协商出业务通道」的协议。会话表管已建立的连接,server-map 管即将建立的连接;配 ASPF 的核心是
detect写在正确的区域方向上。
📌 本篇整理自 2024–2025 的「数通」学习笔记(HCIE-Datacom 方向)
整理自原始笔记的「ASPF」页。
原笔记主要讲 ASPF 的定义与 server-map 概念,本文补齐了 FTP 主动/被动两种模式在防火墙视角下的具体差异、detect 方向这个高频错误点,以及 PASV 模式下往往不需要 ASPF 的原因。
配置命令保留华为 VRP 原样。