第221篇:应用层识别与深度包检测(DPI)

关键词

DPI、深度包检测、应用识别、协议解析、特征匹配、行为分析、加密流量识别


一、DPI 概述

1.1 什么是 DPI

DPI(Deep Packet Inspection,深度包检测)不仅检查 IP 头部的五元组,还深入到应用层分析报文内容:

传统包过滤(到 L4): | 源 IP 10.0.0.1 | 目的 IP 8.8.8.8 | 端口 443/TCP | 协议 HTTPS | ← 只看到这里 | | --- | --- | --- | --- | --- |

DPI(到 L7): | 源 IP 10.0.0.1 | 目的 IP 8.8.8.8 | 端口 443/TCP | 协议 HTTPS | 应用层内容 Google YouTube Video Streaming | | --- | --- | --- | --- | --- | ↑ 传统方法只到这里 ↑ DPI 可以看到这里

1.2 DPI 的识别方法

DPI 使用多种技术组合来识别应用:

识别技术                    原理                      精度    性能
───────────────────────────────────────────────────────────────
端口识别                    检查 TCP/UDP 端口号        低      最高
特征字匹配                  匹配报文中的特定字符串      中-高   高
协议解码                    完整解析协议流程            高      中
行为分析                    分析通信行为模式            中      低
机器/深度学习               训练模型识别                 高      低

二、DPI 识别技术详解

2.1 端口识别

最简单的识别方法——根据端口号判断应用:

端口号          传统应用
──────────────────────
80/TCP          HTTP
443/TCP         HTTPS
21/TCP          FTP
22/TCP          SSH
25/TCP          SMTP
53/UDP          DNS

局限性:
  1. 应用可以运行在非标准端口(HTTP on 8080)
  2. 标准端口可能跑不同应用(443 跑 WebSocket)
  3. P2P 应用动态使用随机端口

2.2 特征字匹配

识别 HTTP 流量的特征字:

HTTP 请求的特征字:
  GET /index.html HTTP/1.1
  Host: www.example.com
  User-Agent: Mozilla/5.0
  ↑ 特征字符串

华为 DPI 特征库包含:
  - 5000+ 应用特征
  - 每 2 周更新一次
  - 支持自定义特征

# 查看 DPI 应用识别结果
display application statistics
  Application           Sessions    Bandwidth
  YouTube               1234        500 Mbps
  Facebook              567         200 Mbps
  WeChat                890         50 Mbps
  Unknown               45          10 Mbps

2.3 协议解码

以 HTTP 为例,DPI 对协议进行完整解码:

原始流量:
  TCP Payload:
  47 45 54 20 2f 69 6e 64 65 78 2e 68 74 6d 6c ...
  (GET /index.html ...)

DPI 解码结果:
  方法:GET
  URI:/index.html
  版本:HTTP/1.1
  主机:www.example.com
  用户代理:Chrome/120
  内容类型:text/html
  状态码:200 OK

# 支持解码的协议列表(华为防火墙)
display dpi protocol supported
  Protocol              Category
  HTTP                  Web
  FTP                   File Transfer
  SMTP/POP3/IMAP       Email
  DNS                  Name Resolution
  SIP/H.323            VoIP
  MySQL/MSSQL          Database
  SMB/NFS              File Sharing

三、DPI 应用场景

3.1 应用识别 + 安全策略

# 基于应用的安全策略(而非端口)
security-policy
 rule name Block_P2P
  source-zone trust
  destination-zone untrust
  application app BitTorrent                    # 识别 BitTorrent 应用
  application app Thunder                         # 识别迅雷
  action deny                                    # 一律禁止
!
 rule name Limit_Video
  source-zone trust
  destination-zone untrust
  application app YouTube
  application app NetFlix
  action permit
  profile bandwidth YouTube 10000                # 限速 10 Mbps

3.2 带宽管理

# 不同应用分配不同带宽
bandwidth-profile name Enterprise_QoS
 # 关键业务保障
 application app ERP cir 50000 pir 100000        # ERP:50-100M
 application app Voice cir 10000 pir 20000        # VoIP:10-20M
 application app Video_Conference cir 20000 pir 50000 # 视频会议:20-50M
 !
 # 非关键业务限速
 application app YouTube cir 5000 pir 10000       # 视频:5-10M
 application app Games cir 2000 pir 5000           # 游戏:2-5M
 !
 # 其余应用
 default cir 10000 pir 30000                     # 其余共享 10-30M

3.3 日志审计

# DPI 应用日志
display application log
  Time                User        Application       Action    Bandwidth
  2024-03-15 10:00:01 10.0.0.1   YouTube           Permit    5 Mbps
  2024-03-15 10:00:02 10.0.0.2   BitTorrent        Deny      0
  2024-03-15 10:00:03 10.0.0.3   WeChat            Permit    0.1 Mbps
  2024-03-15 10:00:04 10.0.0.1   Zoom              Permit    2 Mbps

四、加密流量识别

4.1 挑战

HTTPS/TLS 加密后,DPI 无法看到明文内容:

加密流量: | 源 IP 10.0.0.1 | | 端口 443 | | TLS 加密数据(不可读) 0x8A3F ... 不可解析 | | --- | --- | --- | --- | --- |

4.2 基于元数据的识别

即使加密,DPI 仍可以通过流量特征判断应用:

加密流量的识别依据:

1. TLS SNI(Server Name Indication)
   Client Hello 中的 SNI 字段是明文:
   SNI = www.youtube.com → 识别为 YouTube

2. 流量模式
   视频流:稳定的大流量、长连接
   网页浏览:突发性、短连接
   VoIP:小包、固定间隔
   P2P:对称流量、大量 UDP

3. JA3 指纹
   TLS 握手参数(密码套件、扩展)的唯一组合
   每个客户端的 JA3 指纹不同
   可识别 VPN、Tor 等加密隧道

配置:
  # 加密流量识别
  application-profile name Encrypted_Detect
   ja3 enable                                    # JA3 指纹识别
   sni enable                                    # SNI 域名识别
   traffic-analysis enable                       # 流量模式分析

五、DPI 性能考量

5.1 性能开销

DPI 处理级别与性能:

处理级别                吞吐量          CPU 占用
───────────────────────────────────────────────
无 DPI(L4 转发)        10 Gbps         5%
端口识别(基本 DPI)     8 Gbps          15%
特征匹配                 5 Gbps          30%
协议解码                 3 Gbps          50%
完整 DPI + 内容过滤      2 Gbps          70%

5.2 优化策略

1. 按需启用 DPI
   对内网到内网的流量跳过 DPI
   只对 Internet 边界流量启用

   security-policy
    rule name Internal_Traffic
     source-zone trust
     destination-zone trust
     action permit                                # 跳过 DPI

2. 应用白名单
   已知安全的流量跳过 DPI

   application-profile name Skip_DPI
    skip application app WeChat                   # 微信跳过 DPI
    skip application app Corporate_VPN

3. 硬件加速
   华为 USG6600E/9500E 内置 DPI 硬件加速引擎
   吞吐量可达 10 Gbps(全 DPI 场景)

六、总结

知识点 核心要点
DPI 深入 L7 应用层的报文检测技术
识别方法 端口、特征字、协议解码、行为分析
应用场景 安全策略、带宽管理、日志审计
加密流量 SNI/JA3/流量模式间接识别
性能影响 DPI 越深,性能开销越大
优化策略 按需启用、白名单跳过、硬件加速

七、思考

  1. DPI 和传统包过滤(L4 ACL)的本质区别是什么?
  2. DPI 有哪几种识别技术?它们的精度和性能如何权衡?
  3. HTTPS 加密后,DPI 还能识别出 YouTube 流量吗?如何识别?
  4. 如果 DPI 误将正常应用识别为恶意应用,应该怎么排查和修正?
  5. 在一个 10Gbps 的出口链路上启用全 DPI,会对性能有什么影响?

下篇预告:第222篇《带宽管理与应用限速》——基于应用识别的智能带宽管理,保障关键业务带宽。