应用层协议检测
针对在用户数据包内嵌入 IP 寻址信息的服务或在动态分配端口上打开辅助信道的服务,需要使用检测引擎。这些协议需要 ASA 执行深度数据包检测,而不是通过快速路径传递数据包。因此,检测引擎可能会影响整体吞吐量。默认情况下,ASA 上启用了几个常见检测引擎,但您可能需要根据您的网络启用其他检测引擎。
以下主题详细说明应用检测。
何时使用应用协议检测
当用户建立连接时,ASA 会对照 ACL 检查数据包、创建地址转换并为快速路径中的会话创建条目,以便后续数据包可绕过耗时的检查。但是,快速路径依赖于可预测的端口号,且不在数据包内执行地址转换。
许多协议开放辅助 TCP 或 UDP 端口。已知端口上的初始会话用于协商动态分配的端口号。
其他应用在需要与源地址匹配的数据包中嵌入 IP 地址,源地址通常在通过 ASA 时被转换。
如果使用类似的应用,需要启用应用检测。
当您对嵌入 IP 地址的服务启用应用检测时,ASA 转换嵌入的地址并更新受转换影响的所有校验和或其他字段。
当您对使用动态分配的端口的服务启用应用检测时,ASA 监控会话以标识动态端口分配并允许特定会话期间在这些端口上进行数据交换。
检测策略映射
可以使用检测策略映射为许多应用检测配置特殊操作。这些映射是可选的:无需配置映射,即可为支持检测策略映射的协议启用检测。仅在需要执行非默认检测操作的情况下,才需要这些映射。
检测策略映射由下列一个或多个要素组成。检测策略映射的确切可用选项视应用而定。
-
流量匹配条件 - 将应用流量与特定于应用的条件进行匹配(例如 URL 字符串,随后可以对这些条件启用操作)。
对于某些流量匹配条件,可使用正则表达式来匹配数据包中的文本。请务必在配置策略映射之前,在正则表达式类映射中单独或集中创建和测试正则表达式。
-
检测类映射 - 某些检测策略映射可以实现使用检测类映射包含多个流量匹配条件。然后,可以在检测策略映射中识别检测类映射,并整体启用用于类的操作。创建类映射和直接在检测策略映射中定义流量匹配的差别在于,您可以创建更复杂的匹配条件和重复使用类映射。然而,您无法为不同的匹配设置不同操作。
-
参数 - 参数会影响检测引擎的行为。
以下主题提供更多详细信息。
更换正在使用的检测策略映射
如果在服务策略中已启用使用某一策略映射的检测,则更换策略映射需要分两步进行。首先,必须删除该检测。然后,为策略映射提供新的名称,再将其重新添加到策略中。
例如,要将 SIP 检测中的 sip-map1 替换为 sip-map2,请使用以下命令序列:
hostname(config)# policy-map test
hostname(config-pmap)# class sip
hostname(config-pmap-c)# no inspect sip sip-map1
hostname(config-pmap-c)# inspect sip sip-map2
如何处理多个流量类
在检测策略映射中可以指定多个检测类映射或直接匹配。
如果一个数据包匹配不同的类或直接匹配,则 ASA 应用操作的顺序由内部 ASA 规则决定,而不是按操作添加到检测策略映射的顺序应用应用。内部规则由应用类型和解析数据包的逻辑顺序确定,并且不可由用户配置。例如,对于 HTTP 流量,解析 Request Method 字段优先于解析 Header Host Length 字段;Request Method 字段的操作早于 Header Host Length 字段的操作。 例如,以下匹配命令可以按任意顺序输入,但首先匹配的是 match request method get 命令。
match request header host length gt 100
reset
match request method get
log
如果操作丢弃数据包,则在检测策略映射中将不会执行进一步操作。例如,如果第一个操作是重置连接,将不会匹配任何进一步的匹配条件。如果第一个操作是记录数据包,则会发生第二个操作,例如,重置连接。
如果一个数据包匹配多个相同的匹配条件,则按策略映射中显示匹配条件的顺序匹配它们。例如,如果一个数据包的报头长度为 1001,则该数据包匹配以下第一个命令,执行记录,然后再匹配第二个命令并进行重置。如果颠倒两个 match 命令的顺序,则该数据包在匹配第二个 match 命令之前会被丢弃并重置连接,而从不会进行日志记录。
match request header length gt 100
log
match request header length gt 1000
reset
根据类映射中的最低优先级匹配选项(优先级以内部规则为准),确定一个类映射与另一个类映射的类型相同或直接匹配。如果某个类映射具有与另一个类映射相同的最低优先级匹配选项类型,则根据类映射添加到策略映射的顺序来匹配类映射。如果每个类映射的最低优先级匹配选项不同,则首先匹配具有较高优先级匹配选项的类映射。 例如,以下三个类映射包含两类 match 命令:match request-cmd(优先级较高)和 match filename(优先级较低)。ftp3 类映射包括这两种命令,但它们根据最低优先级命令 match filename 排序。ftp1 类映射包括最高优先级命令,所以首先进行匹配,不考虑它在策略映射中的顺序。ftp3 类映射的排序优先级与同样包含 match filename 命令的 ftp2 类映射相同。它们按照在策略映射中所处的顺序进行匹配:ftp3 先于 ftp2。
class-map type inspect ftp match-all ftp1
match request-cmd get
class-map type inspect ftp match-all ftp2
match filename regex abc
class-map type inspect ftp match-all ftp3
match request-cmd get
match filename regex abc
policy-map type inspect ftp ftp
class ftp3
log
class ftp2
log
class ftp1
log
应用检测准则
故障转移
需要检测的多媒体会话的状态信息不通过用于状态故障转移的状态链路进行传递。但通过状态链路进行复制的 GTP、M3UA, 和 SIP 例外。您必须在 M3UA 检测中配置严格应用服务器进程 (ASP) 状态检查,才能执行状态故障转移。
集群
集群中不支持以下检测:
-
CTIQBE
-
H323、H225 和 RAS
-
IPsec 穿透
-
MGCP
-
MMP
-
RTSP
-
SCCP(瘦客户端)
-
WAAS
IPv6
以下检测中支持 IPv6:
-
Diameter
-
DNS over UDP
-
FTP
-
GTP
-
HTTP
-
ICMP
-
IPSec 直通
-
IPv6
-
M3UA
-
SCCP(瘦客户端)
-
SCTP
-
SIP
-
SMTP
-
VXLAN
以下检测中支持 NAT64:
-
DNS over UDP
-
FTP
-
HTTP
-
ICMP
-
SCTP
其他准则
-
某些检测引擎不支持 PAT、NAT、外部 NAT 或相同安全接口之间的 NAT。有关 NAT 支持的详细信息,请参阅默认检测和 NAT 限制。
-
对于所有应用检测,ASA 允许同时活动的数据连接数限为 200 个连接。例如,如果 FTP 客户端打开多个辅助连接,FTP 检测引擎只允许 200 个活动连接,第 201 个连接将被丢弃,并且自适应安全设备将生成系统错误消息。
-
检测的协议受制于高级 TCP 状态跟踪,这些连接的 TCP 状态不会自动复制。如果这些连接复制到备用设备,将会尽力尝试重新建立 TCP 状态。
-
如果系统确定 TCP 连接需要检测,系统在检测之前,将会清除除关于数据包的 MSS 和选择性确认 (SACK) 选项以外的所有 TCP 选项。其他选项将被清除,即使您在应用于连接的 TCP 映射中允许这些选项。
-
默认检测定向到 ASA(流向接口)的 TCP/UDP 流量。但是,即使启用 ICMP 检测,也不会检测流向接口的 ICMP 流量。因此,到接口的 ping(回应请求)可能会在特定情况下失败,例如,如果回应请求来自 ASA 可以通过备用默认路由到达的源。
应用检测的默认设置
以下主题介绍应用检测的默认操作。
默认检测和 NAT 限制
默认情况下,配置包括会匹配所有默认应用检测流量并对所有接口的流量应用检测的策略(全局策略)。默认应用检测流量包括流向各个协议的默认端口的流量。只能应用一个全局策略,因此如果要改变全局策略(例如,要对非标准端口应用检测,或者要添加默认情况下未启用的检测),需要编辑默认策略或者禁用默认策略并应用新策略。
下表列出了所有支持的检测、用于默认类映射的默认端口和默认打开的检测引擎(以粗体显示)。该表中还对任何 NAT 限制作了备注。在该表中:
-
默认情况下为默认端口启用的检测引擎以粗体显示。
-
ASA 符合指示的标准,但它不会对要检测的数据包执行合规性。例如,FTP 命令应采用特定的顺序,但 ASA 不执行该顺序。
应用 |
默认协议、端口 |
NAT 限制 |
标准 |
备注 |
---|---|---|---|---|
CTIQBE |
TCP/2748 |
无扩展 PAT。 无 NAT64。 (集群)无静态 PAT。 |
- |
— |
DCERPC |
TCP/135 |
无 NAT64。 |
- |
— |
Diameter |
TCP/3868 TCP/5868(用于 TCP/TLS) SCTP/3868 |
无 NAT/PAT。 |
RFC 6733 |
需要 Carrier 许可证。 |
DNS over UDP DNS over TCP |
UDP/53 UDP/443 TCP/53 |
无可用于通过 WINS 进行名称解析的 NAT 支持。 |
RFC 1123 |
要检测 DNS over TCP,必须在 DNS 检测策略映射中启用 DNS/TCP 检测。 UDP/443 仅用于思科 Umbrella DNScrypt 会话。 |
FTP |
TCP/21 |
(集群)无静态 PAT。 |
RFC 959 |
— |
GTP |
UDP/3386 (GTPv0) UDP/2123 (GTPv1+) |
无扩展 PAT。 无 NAT。 |
— |
需要 Carrier 许可证。 |
H.323 H.225 和 RAS |
TCP/1720 UDP/1718 UDP (RAS) 1718-1719 |
(集群)无静态 PAT。 无扩展 PAT。 不支持对同类安全接口执行 NAT。 无 NAT64。 |
ITU-T H.323、H.245、H225.0、Q.931、Q.932 |
— |
HTTP |
TCP/80 |
— |
RFC 2616 |
请注意,MTU 限制会去除 ActiveX 和 Java。如果 MTU 因为太小而不允许在一个数据包中包含 Java 或 ActiveX 标记,可能不会出现去除操作。 |
ICMP |
ICMP |
- |
— |
不会检测流向 ASA 接口的 ICMP 流量。 |
ICMP 错误 |
ICMP |
- |
— |
— |
ILS (LDAP) |
TCP/389 |
无扩展 PAT。 无 NAT64。 |
- |
— |
即时消息 (IM) |
因客户端而异 |
无扩展 PAT。 无 NAT64。 |
RFC 3860 |
— |
IP 选项 |
RSVP |
无 NAT64。 |
RFC 791、RFC 2113 |
— |
IPSec 穿透 |
UDP/500 |
无 PAT。 无 NAT64。 |
- |
— |
IPv6 |
— |
无 NAT64。 |
RFC 2460 |
— |
LISP |
— |
无 NAT 或 PAT。 |
- |
— |
M3UA |
SCTP/2905 |
无面向嵌入式地址的 NAT 或 PAT。 |
RFC 4666 |
需要 Carrier 许可证。 |
MGCP |
UDP/2427、2727 |
无扩展 PAT。 无 NAT64。 (集群)无静态 PAT。 |
RFC 2705bis-05 |
— |
MMP |
TCP/5443 |
无扩展 PAT。 无 NAT64。 |
- |
— |
基于 IP 的 NetBIOS 名称服务器 |
UDP/137、138(源端口) |
无扩展 PAT。 无 NAT64。 |
— |
通过执行 NBNS UDP 端口 137 和 NBDS UDP 端口 138 的数据包 NAT 来支持 NetBIOS。 |
PPTP |
TCP/1723 |
无 NAT64。 (集群)无静态 PAT。 |
RFC 2637 |
— |
RADIUS 记账 |
UDP/1646 |
无 NAT64。 |
RFC 2865 |
— |
RSH |
TCP/514 |
无 PAT。 无 NAT64。 (集群)无静态 PAT。 |
Berkeley UNIX |
— |
RTSP |
TCP/554 |
无扩展 PAT。 无 NAT64。 (集群)无静态 PAT。 |
RFC 2326、2327、1889 |
无 HTTP 掩蔽处理。 |
SCTP |
SCTP |
— |
RFC 4960 |
需要 Carrier 许可证。 虽然可以对 SCTP 流量执行静态网络对象 NAT(无动态 NAT/PAT),但检测引擎不用于 NAT。 |
SIP |
TCP/5060 UDP/5060 |
在安全级别相同或低于较高安全级别的接口上无 NAT/PAT。 无扩展 PAT。 无 NAT64 或 NAT46。 (集群)无静态 PAT。 |
RFC 2543 |
某些情况下不处理 TFTP 上传的思科 IP 电话配置。 |
瘦客户端 (SCCP) |
TCP/2000 |
不支持对同类安全接口执行 NAT。 无扩展 PAT。 无 NAT64、NAT46 或 NAT66。 (集群)无静态 PAT。 |
— |
某些情况下不处理 TFTP 上传的思科 IP 电话配置。 |
SMTP 和 ESMTP |
TCP/25 |
无 NAT64。 |
RFC 821、1123 |
— |
SNMP |
UDP/161、162 同样运行 Cisco Secure Firewall eXtensible 操作系统 (FXOS) 的平台上的 UDP/4161。 |
无 NAT 或 PAT。 |
RFC 1155、1157、1212、1213、1215 |
v.2 RFC 1902-1908;v.3 RFC 2570-2580。 在 FXOS 平台上,如果配置了 SNMP,则会自动启用该检测功能,且无法禁用。 |
SQL*Net |
TCP/1521 |
无扩展 PAT。 无 NAT64。 (集群)无静态 PAT。 |
— |
v.1 和 v.2。 |
STUN |
TCP/3478 UDP/3478 |
(WebRTC) 仅静态 NAT/PAT44。 (思科 Spark)静态 NAT/PAT44 和 64;动态 NAT/PAT。 |
RFC 5245、5389 |
— |
Sun RPC |
TCP/111 UDP/111 |
无扩展 PAT。 无 NAT64。 |
- |
— |
TFTP |
UDP/69 |
无 NAT64。 (集群)无静态 PAT。 |
RFC 1350 |
不转换负载 IP 地址。 |
WAAS |
TCP/1 - 65535 |
无扩展 PAT。 无 NAT64。 |
- |
— |
XDMCP |
UDP/177 |
无扩展 PAT。 无 NAT64。 (集群)无静态 PAT。 |
- |
— |
VXLAN |
UDP/4789 |
不适用 |
RFC 7348 |
虚拟可扩展局域网。 |
默认检测策略映射
某些检测类型使用隐藏的默认策略映射。例如,如果启用 ESMTP 检测但不指定映射,将会使用 _default_esmtp_map。
说明每种检测类型的各节中介绍了默认检测。可以使用 show running-config all policy-map 命令查看这些默认映射。
DNS 检测是唯一一种采用明确配置的默认映射 preset_dns_map 的检测。