ALG 应用
配置应用程序属性
要配置应用属性,请在层次结构级别包含[edit applications]该application语句:
[edit applications] application application-name { application-protocol protocol-name; child-inactivity-timeout seconds; destination-port port-number; gate-timeout seconds; icmp-code value; icmp-type value; inactivity-timeout value; protocol type; rpc-program-number number; snmp-command command; source-port port-number; ttl-threshold value; uuid hex-value; }
您可以通过配置 application-set 语句对应用程序对象进行分组;有关更多信息,请参阅 配置应用程序集。
本节包含用于配置应用程序的以下任务:
- 配置应用协议
- 配置网络协议
- 配置 ICMP 代码和类型
- 配置源端口和目标端口
- 配置非活动超时期间
- 配置 IKE ALG 应用
- 配置 SIP
- 配置 SNMP 命令进行数据包匹配
- 配置 RPC 程序编号
- 配置 TTL 阈值
- 配置通用唯一标识符
配置应用协议
该application-protocol语句允许您指定要配置哪些受支持的应用协议 (ALG) 并将其包含在用于服务处理的应用集中。要配置应用协议,请在层次结构级别包含[edit applications application application-name]该application-protocol语句:
[edit applications application application-name] application-protocol protocol-name;
表 1 显示了支持的协议列表。有关特定协议的更多信息,请参阅 ALG 说明。
协议名称 |
CLI 值 |
注释 |
|---|---|---|
自举协议 (BOOTP) |
|
支持 BOOTP 和动态主机配置协议 (DHCP)。 |
分布式计算环境 (DCE) 远程过程调用 (RPC) |
|
要求 |
DCE RPC 端口图 |
|
要求 |
域名系统 (DNS) |
|
要求 |
执行官 |
|
要求 |
FTP |
|
要求 |
H.323 |
|
– |
IKE ALG |
|
要求 |
互联网控制信息协议 (ICMP) |
|
要求 |
互联网 ORB 间协议 |
|
– |
IP |
|
– |
登录信息 |
|
– |
NetBIOS |
|
要求 |
NetShow |
|
要求 |
点对点隧道协议 |
|
– |
真实音频 |
|
– |
实时流协议 (RTSP) |
|
要求 |
RPC 用户数据报协议 (UDP) 或 TCP |
|
要求 |
RPC 端口映射 |
|
要求 |
外壳 |
|
要求 |
会话启动协议 |
|
– |
SNMP |
|
要求 |
SQLNet |
|
要求 |
讲座节目 |
|
|
追踪路由 |
|
要求 |
简单 FTP (TFTP) |
|
要求 |
WinFrame |
|
– |
当在同一服务集中配置了两次 NAT 时,您可以根据状态防火墙、NAT 或 CoS 规则为 ICMP 和跟踪路由配置应用级网关 (ALG)。这些 ALG 不能应用于由数据包网关控制器协议 (PGCP) 创建的流。两次 NAT 不支持任何其他 ALG。NAT 仅应用 IP 地址和 TCP 或 UDP 报头,不应用有效负载。
有关配置两次 NAT 的详细信息,请参阅 Junos Address Aware 网络寻址概述。
配置网络协议
该protocol语句允许您指定在应用定义中要匹配的受支持网络协议。要配置网络协议,请在层次结构级别包含[edit applications application application-name]该protocol语句:
[edit applications application application-name] protocol type;
将协议类型指定为数值;对于更常用的协议,命令行界面 (CLI) 中还支持文本名称。 表 2 显示了支持的协议列表。
网络协议类型 |
CLI 值 |
注释 |
|---|---|---|
IP 安全性 (IPsec) 身份验证头 (AH) |
|
– |
外部网关协议 (EGP) |
|
– |
IPsec 封装安全性有效负载 (ESP) |
|
– |
通用路由封装 (GR) |
|
– |
ICMP |
|
需要值 |
ICMPv6 |
|
需要值 |
互联网组管理协议 (IGMP) |
|
– |
IP 中的 IP |
|
– |
OSPF |
|
– |
协议无关组播 (PIM) |
|
– |
资源预留协议 (RSVP) |
|
– |
TCP |
|
需要 或 |
UDP |
|
需要 或 |
有关可能数值的完整列表,请参阅 RFC 1700,分配的编号(适用于互联网协议套件)。
在应用定义中,不支持 IP 版本 6 (IPv6) 作为网络协议。
默认情况下,两次 NAT 功能会影响嵌入在 ICMP 错误消息有效负载中的 IP、TCP 和 UDP 报头。您可以将 and protocol udp 语protocol tcp句与应用程序语句一起包含在两次 NAT 配置中。有关配置两次 NAT 的详细信息,请参阅 Junos Address Aware 网络寻址概述。
配置 ICMP 代码和类型
ICMP 代码和类型与网络协议一起为应用定义中的数据包匹配提供了附加规范。要配置 ICMP 设置,请在层次结构级别包括 icmp-code [edit applications application application-name] and icmp-type 语句:
[edit applications application application-name] icmp-code value; icmp-type value;
您只能包含一个 ICMP 代码和类型值。语句的 application-protocol 值 icmp必须为 。 表 3 显示了支持的 ICMP 值列表。
CLI 声明 |
描述 |
|---|---|
|
此值或关键字提供比 可以指定以下文本同义词之一来代替数值(也会列出字段值)。关键字按与之关联的 ICMP 类型进行分组: 参数-问题: 重定向: 超时: 不可访问: |
|
通常,将此匹配与 可以指定以下文本同义词之一来代替数值(字段值也会列出): |
如果为接口配置了包含拒绝作的输入防火墙过滤器和包含状态防火墙规则的服务集,则在对数据包运行状态防火墙规则之前,路由器将先执行输入防火墙过滤器。因此,当数据包转发引擎通过接口发出 ICMP 错误消息时,状态防火墙规则可能会丢弃该数据包,因为在输入方向上看不到该数据包。
可能的变通方法是包括一个转发表过滤器来执行拒绝作(因为这种类型的过滤器是在输入方向的状态防火墙之后执行的),或者包括一个输出服务过滤器,以防止本地生成的 ICMP 数据包进入状态防火墙服务。
配置源端口和目标端口
TCP 或 UDP 源端口和目的端口与网络协议一起,为应用定义中的数据包匹配提供了附加规范。要配置端口,请在[edit applications application application-name]层次结构级别包括 destination-port and source-port 语句:
[edit applications application application-name] destination-port value; source-port value;
您必须定义一个源端口或目标端口。通常,将此匹配与 protocol match 语句一起指定,以确定端口上使用的协议;有关限制,请参阅 表 1。
您可以指定一个数值或 表 4 中列出的文本同义词之一。
端口名称 |
对应端口号 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
有关匹配条件的更多信息,请参阅路由 策略、防火墙过滤器和流量监管器用户指南。
配置非活动超时期间
您可以为应用程序非活动指定超时时间。如果软件在此期间未检测到任何活动,则在计时器到期时流将失效。要配置超时期限,请在层次结构级别包含[edit applications application application-name]该inactivity-timeout语句:
[edit applications application application-name] inactivity-timeout seconds;
默认值为 30 秒。您为应用程序配置的值将覆盖在层次结构级别上 [edit interfaces interface-name service-options] 配置的任何全局值;有关更多信息,请参阅 配置服务接口的默认超时设置。
配置 IKE ALG 应用
在 Junos OS 17.4R1 之前,MX 系列路由器上的 Junos VPN Site Secure IPsec 功能套件不支持网络地址转换遍历 (NAT-T)。IKE ALG 允许在不符合 NAT-T 的 IPsec 对等方之间通过 NAPT-44 和 NAT64 过滤器传递 IKEv1 和 IPsec NAT 数据包。此 ALG 仅支持 ESP 隧道模式。您可以使用预定义的 IKE ALG 应用程序,该应用程序 junos-ike具有目标端口 (500)、非活动超时(30 秒)、门超时(120 秒)和 ESP 会话空闲超时(800 秒)的预定义值。如果想要使用与预定义 junos-ike 应用程序不同的值的 IKE ALG,则需要配置新的 IKE ALG 应用程序。
要配置 IKE ALG 应用程序,请执行以下作:
指定应用程序的名称。
[edit applications] user@host# set application junos-ike
指定 IKE ALG。
[edit applications application junos-ike] user@host# set application-protocol ike-esp-nat
指定 UDP 协议。
[edit applications application junos-ike] user@host# set protocol udp
指定 500 作为目标端口。
[edit applications application junos-ike] user@host# set destination-port 500
-
指定 IKE 会话在被删除之前处于非活动状态的秒数。默认设置为 30 秒。
[edit applications application junos-ike] user@host# set inactivity-timeout seconds
指定 IKE 在 IPsec 客户端和服务器之间建立安全关联之后,以及 ESP 流量开始双向运行之前可以经过的秒数。如果在此超时值之前 ESP 流量尚未启动,则 ESP 门将被删除,ESP 流量将被阻止。默认设置为 120 秒。
[edit applications application junos-ike] user@host# set gate-timeout seconds
指定 ESP 会话(IPsec 数据流量)空闲超时(以秒为单位)。如果此期间未在 ESP 会话上传递任何 IPsec 数据流量,则删除该会话。默认设置为 800 秒。
[edit applications application junos-ike] user@host# set child-inactivity-timeout seconds
配置 SIP
会话初始化协议 (SIP) 是一种通用协议,用于在电话、传真、视频会议、即时消息和文件交换等 Internet 服务中涉及的端点之间进行通信。
Junos OS 根据 RFC 3261 SIP:会话启动协议中所述的标准提供 ALG 服务。Junos OS 下的 SIP 流如 RFC 3665, 会话启动协议 (SIP) 基本呼叫流示例中所述。
在实施 Junos OS SIP ALG 之前,应熟悉 Junos OS SIP ALG 限制中讨论的某些限制
将 NAT 与 SIP ALG 结合使用会导致 SIP 报头字段由于地址转换而发生变化。有关这些转换的说明,请参阅 SIP ALG 与网络地址转换的交互。
要在自适应服务接口上实施 SIP,请在层次结构级别上配置该application-protocol语句,其中包含值 sip。[edit applications application application-name]有关此语句的详细信息,请参阅配置应用程序协议。此外,您还可以配置另外两个语句来修改 SIP 的实现方式:
您可以使路由器接受 NAT 防火墙后面的端点设备的任何传入 SIP 呼叫。当防火墙后面的设备向防火墙外的代理注册时,AS 或多服务 PIC 将保持注册状态。启用该
learn-sip-register语句后,路由器可以使用此信息接受入站呼叫。如果未配置此语句,则不接受入站呼叫;只有防火墙后面的设备才能呼叫防火墙外的设备。要配置 SIP 注册,请在层次结构级别包含
[edit applications application application-name]该learn-sip-register语句:[edit applications application application-name] learn-sip-register;
注意:该
learn-sip-register声明不适用于下一代服务 MX-SPC3。您也可以通过发出
show services stateful-firewall sip-register命令来手动检查 SIP 寄存器;有关更多信息,请参阅 Junos OS 系统基础知识和服务命令参考。新一代服务不支持该show services stateful-firewall sip-register命令。您可以为处于保留状态的 SIP 呼叫持续时间指定超时时间。当呼叫处于保留状态时,没有任何活动,并且流量可能会在配置
inactivity-timeout的时间段到期后超时,从而导致呼叫状态拆除。为避免这种情况,当呼叫处于保留状态时,流定时器将重置为sip-call-hold-timeout周期,以保留呼叫状态并流时间超过该inactivity-timeout周期。注意:该
sip-call-hold-timeout声明不适用于下一代服务 MX-SPC3。要配置超时期限,请在层次结构级别包含
[edit applications application application-name]该sip-call-hold-timeout语句:[edit applications application application-name] sip-call-hold-timeout seconds;
默认值为 7200 秒,范围为 0 到 36,000 秒(10 小时)。
SIP ALG 与网络地址转换的交互
网络地址转换 (NAT) 协议使专用子网中的多个主机能够共享单个公共 IP 地址以访问互联网。对于传出流量,NAT 将专用子网中主机的专用 IP 地址替换为公共 IP 地址。对于传入流量,公共 IP 地址将转换回私有地址,并将消息路由到私有子网中的相应主机。
将 NAT 与会话启动协议 (SIP) 服务一起使用更为复杂,因为 SIP 消息在 SIP 报头和 SIP 正文中都包含 IP 地址。将 NAT 与 SIP 服务一起使用时,SIP 报头包含有关呼叫方和接收方的信息,设备会转换此信息以对外部网络隐藏该信息。SIP 正文包含会话描述协议 (SDP) 信息,其中包括用于传输介质的 IP 地址和端口号。设备转换 SDP 信息以分配资源以发送和接收媒体。
SIP 消息中的 IP 地址和端口号的替换方式取决于消息的方向。对于传出邮件,客户端的专用 IP 地址和端口号将替换为瞻博网络防火墙的公共 IP 地址和端口号。对于传入邮件,防火墙的公共地址将替换为客户端的私有地址。
当通过防火墙发送 INVITE 消息时,SIP 应用层网关 (ALG) 会将信息从消息标头收集到调用表中,并使用该信息将后续消息转发到正确的端点。当新消息到达时,例如 ACK 或 200 OK,ALG 会将“From:、To: 和 Call-ID:” 字段与调用表进行比较,以识别消息的调用上下文。如果收到与现有调用匹配的新 INVITE 消息,ALG 会将其作为 REINVITE 处理。
当包含 SDP 信息的消息到达时,ALG 将分配端口并在这些端口和 SDP 中的端口之间创建 NAT 映射。由于 SDP 需要实时传输协议 (RTP) 和实时控制协议 (RTCP) 通道的顺序端口,因此 ALG 提供连续的偶奇端口。如果找不到一对端口,则丢弃 SIP 消息。
本主题包含以下部分:
去电
当 SIP 呼叫发起时,有来自内部网络到外部网络的 SIP 请求消息,NAT 将替换 SDP 中的 IP 地址和端口号,并将 IP 地址和端口号绑定到瞻博网络防火墙。Via、Contact、Route 和 Record-Route SIP 报头字段(如果存在)也绑定到防火墙 IP 地址。ALG 存储这些映射,用于重传和 SIP 响应消息。
然后,SIP ALG 会打开防火墙中的针孔,允许介质通过根据 SDP 以及 Via、Contact 和 Record-Route 标头字段中的信息协商的动态分配端口上的设备。针孔还允许传入数据包到达接触、通过和记录路由 IP 地址和端口。处理返回流量时,ALG 会将原始联系人、Via、路由和记录路由 SIP 字段插入回数据包中。
来电
传入呼叫从公共网络发起到公共静态 NAT 地址或设备上的接口 IP 地址。静态 NAT 是静态配置的指向内部主机的 IP 地址;接口 IP 地址由 ALG 动态记录,因为它会监控内部主机发送到 SIP 注册器的 REGISTER 消息。当设备收到传入的 SIP 数据包时,它会建立一个会话并将数据包的有效负载转发到 SIP ALG。
ALG 检查 SIP 请求消息(最初为 INVITE),并根据 SDP 中的信息为传出介质打开门。当 200 OK 响应消息到达时,SIP ALG 会对 IP 地址和端口执行 NAT,并在出站方向上打开针孔。(打开的门的生存时间很短,如果未快速收到 200 OK 响应消息,它们就会超时。
当 200 OK 响应到达时,SIP 代理将检查 SDP 信息并读取每个介质会话的 IP 地址和端口号。设备上的 SIP ALG 对地址和端口号执行 NAT,为出站流量打开针孔,并刷新入站方向上门的超时。
当 ACK 到达 200 OK 时,它还会通过 SIP ALG。如果消息包含 SDP 信息,SIP ALG 将确保 IP 地址和端口号不会从之前的 INVITE 更改,如果更改,则 ALG 将删除旧针孔并创建新的针孔以允许媒体通过。ALG 还会监控 Via、Contact 和 Record-Route SIP 字段,并在确定这些字段已更改时打开新的针孔。
呼叫转移
例如,网络外的用户 A 呼叫网络内的用户 B,以及用户 B 将呼叫转发至网络外的用户 C。SIP ALG 将来自用户 A 的 INVITE 作为正常传入呼叫进行处理。但是,当 ALG 检查网络外从 B 到 C 的转接呼叫,并注意到使用同一接口到达 B 和 C 时,它不会打开防火墙中的针孔,因为介质将直接在用户 A 和用户 C 之间流动。
呼叫终止
BYE 消息终止呼叫。当设备收到 BYE 消息时,它会像转换任何其他消息一样转换标头字段。但是,由于接收方必须通过 200 OK 确认 BYE 消息,因此 ALG 会将呼叫拆解延迟五秒钟,以便有时间传输 200 OK。
呼叫重新邀请消息
重新邀请消息可将新的媒体会话添加到呼叫中并删除现有媒体会话。将新的媒体会话添加到呼叫中时,防火墙中将打开新的针孔并创建新的地址绑定。该过程与原始呼叫设置相同。从呼叫中删除一个或多个媒体会话时,针孔将关闭并释放绑定,就像使用 BYE 消息一样。
呼叫会话计时器
如果未收到 Re-INVITE 或 UPDATE 消息,SIP ALG 使用 Session-Expires 值使会话超时。ALG 从对 INVITE 的 200 OK 响应中获取 Session-Expires 值(如果存在),并使用此值发出超时信号。如果 ALG 在会话超时之前收到另一个 INVITE,它会将所有超时值重置为此新的 INVITE 或默认值,并重复该过程。
作为预防措施,SIP ALG 使用硬超时值来设置呼叫可以存在的最长时间。这可确保在发生以下事件之一时设备受到保护:
终端系统在呼叫期间崩溃,未收到 BYE 消息。
恶意用户从不发送 BYE 试图攻击 SIP ALG。
SIP 代理的不良实现无法处理 Record-Route,并且从不发送 BYE 消息。
网络故障会阻止接收 BYE 消息。
呼叫取消
任何一方都可以通过发送 CANCEL 消息来取消呼叫。收到 CANCEL 消息后,SIP ALG 会关闭通过防火墙的针孔(如果有)并释放地址绑定。在释放资源之前,ALG 会将控制通道老化延迟大约五秒,以便为最终的 200 OK 留出时间。当 5 秒超时到期时,呼叫将终止,无论是否有 487 或非 200 响应到达。
分叉
分叉使 SIP 代理能够同时向多个目的地发送单个 INVITE 消息。当单个呼叫收到多条 200 条 OK 响应消息时,SIP ALG 将解析但使用收到的前 200 条 OK 消息更新呼叫信息。
SIP 消息
SIP 消息格式由 SIP 标头部分和 SIP 正文组成。在请求消息中,标头部分的第一行是请求行,其中包括方法类型、请求 URI 和协议版本。在响应消息中,第一行是状态行,其中包含状态代码。SIP 报头包含用于信令的 IP 地址和端口号。SIP 正文与标头部分用空行分隔,保留用于会话描述信息,这是可选的。Junos OS 目前仅支持 SDP。SIP 正文包含用于传输介质的 IP 地址和端口号。
SIP 报头
在以下示例 SIP 请求消息中,NAT 替换标头字段中的 IP 地址,以对外部网络隐藏它们。
INVITE bob@10.150.20.5SIP/2.0 Via: SIP/2.0/UDP10.150.20.3:5434 From: alice@10.150.20.3To: bob@10.150.20.5Call-ID: a12abcde@10.150.20.3Contact: alice@10.150.20.3:5434 Route: <sip:netscreen@10.150.20.3:5060> Record-Route: <sip:netscreen@10.150.20.3:5060>
IP 地址转换的执行方式取决于消息的类型和方向。消息可以是以下任何一项:
入站请求
出站响应
出站请求
呼入响应
表 5 显示了在每种情况下如何执行 NAT。请注意,对于多个报头字段,ALG 不仅仅决定消息来自网络内部还是外部。它还必须确定哪个客户端发起了调用,以及消息是请求还是响应。
入站请求 (从公立到私立) |
自: |
将域替换为本地地址 |
从: |
无 |
|
呼叫 ID: |
无 |
|
通过: |
无 |
|
请求 URI: |
将 ALG 地址替换为本地地址 |
|
联系方式: |
无 |
|
记录路由: |
无 |
|
路线: |
无 |
|
出站响应 (从私有到公立) |
自: |
将 ALG 地址替换为本地地址 |
从: |
无 |
|
呼叫 ID: |
无 |
|
通过: |
无 |
|
请求 URI: |
不适用 |
|
联系方式: |
将本地地址替换为 ALG 地址 |
|
记录路由: |
将本地地址替换为 ALG 地址 |
|
路线: |
无 |
|
出站请求 (从私有到公立) |
自: |
无 |
从: |
将本地地址替换为 ALG 地址 |
|
呼叫 ID: |
无 |
|
通过: |
将本地地址替换为 ALG 地址 |
|
请求 URI: |
无 |
|
联系方式: |
将本地地址替换为 ALG 地址 |
|
记录路由: |
将本地地址替换为 ALG 地址 |
|
路线: |
将 ALG 地址替换为本地地址 |
|
出站响应 (从公立到私立) |
自: |
无 |
从: |
将 ALG 地址替换为本地地址 |
|
呼叫 ID: |
无 |
|
通过: |
将 ALG 地址替换为本地地址 |
|
请求 URI: |
不适用 |
|
联系方式: |
无 |
|
记录路由: |
将 ALG 地址替换为本地地址 |
|
路线: |
将 ALG 地址替换为本地地址 |
SIP 正文
SIP 正文中的 SDP 信息包括 ALG 用于为媒体流创建信道的 IP 地址。SDP 部分的转换还会分配资源,即用于发送和接收介质的端口号。
以下示例 SDP 部分的摘录显示了为资源分配而转换的字段。
o=user 2344234 55234434 IN IP410.150.20.3c=IN IP410.150.20.3m=audio43249RTP/AVP 0
SIP 消息可以包含多个媒体流。其概念类似于将多个文件附加到电子邮件中。例如,从 SIP 客户端发送到 SIP 服务器的 INVITE 消息可能具有以下字段:
c=IN IP410.123.33.4m=audio33445RTP/AVP 0 c=IN IP410.123.33.4m=audio33447RTP/AVP 0 c=IN IP410.123.33.4m=audio33449RTP/AVP 0
Junos OS 支持为每个方向协商多达 6 个 SDP 通道,因此每次调用总共 12 个通道。
Junos OS SIP ALG 限制
以下限制适用于 SIP ALG 的配置:
仅支持 RFC 3261 中所述的方法。
仅支持 SIP 版本 2。
TCP 不支持用作 MS-MPC 信号发送消息的传输机制,但新一代服务支持。
使用 STUN 时,请勿配置 SIP ALG。 如果客户端使用 STUN/TURN 检测呼叫方与响应方或代理之间的防火墙或 NAT 设备,则客户端会尝试最佳猜测 NAT 设备行为,并采取相应措施进行呼叫。
在 MS-MPC 上,请勿将与端点无关的映射 NAT 池选项与 SIP ALG 结合使用。 将导致错误。这不适用于新一代服务。
MS-MPC 不支持 IPv6 信令数据,但新一代服务支持。
不支持身份验证。
不支持加密消息。
MS-MPC 不支持 SIP 分段,但新一代服务支持。
假定包含 SIP 消息的最大 UDP 数据包大小为 9 KB。不支持大于此的 SIP 消息。
假设 SIP 消息中的最大介质通道数为 6。
关键字段中不支持完全限定域名 (FQDN)。
不支持 QoS。SIP 支持 DSCP 重写。
不支持高可用性,热备用除外。
SIP 或 NAT 不支持超时设置为“永不”。
不支持组播(分叉代理)。
配置 SNMP 命令进行数据包匹配
您可以为数据包匹配指定 SNMP 命令设置。要配置 SNMP,请在层次结构级别包含[edit applications application application-name]该snmp-command语句:
[edit applications application application-name] snmp-command value;
支持的值为 get、 、 get-nextset和 trap。您只能配置一个匹配值。application-protocol层级的[edit applications application application-name]语句必须具有值 snmp。有关指定应用程序协议的信息,请参阅配置应用程序协议。
配置 RPC 程序编号
您可以指定一个 RPC 程序号进行数据包匹配。要配置 RPC 程序编号,请在层次结构级别包含[edit applications application application-name]该rpc-program-number语句:
[edit applications application application-name] rpc-program-number number;
用于 DCE 或 RPC 的值范围为 100,000 到 400,000。 application-protocol 层级的 [edit applications application application-name] 语句必须具有值 rpc。有关指定应用程序协议的信息,请参阅 配置应用程序协议。
配置 TTL 阈值
您可以指定追踪路由生存时间 (TTL) 阈值,用于控制追踪路由可接受的网络渗透级别。要配置 TTL 值,请在层次结构级别包含[edit applications application application-name]该ttl-threshold语句:
[edit applications application application-name] ttl-threshold value;
application-protocol层级的[edit applications application application-name]语句必须具有值 traceroute。有关指定应用程序协议的信息,请参阅配置应用程序协议。
配置通用唯一标识符
您可以为 DCE RPC 对象指定通用唯一标识符 (UUID)。要配置 UUID 值,请在层次结构级别包含[edit applications application application-name]以下uuid语句:
[edit applications application application-name] uuid hex-value;
该 uuid 值采用十六进制表示法。 application-protocol 层级的 [edit applications application application-name 语句必须具有值 dce-rpc。有关指定应用程序协议的信息,请参阅 配置应用程序协议。有关 UUID 编号的更多信息,请参阅 http://www.opengroup.org/onlinepubs/9629399/apdxa.htm。
也可以看看
配置应用程序集
您可以通过在层次结构级别包含[edit applications]该语句以及每个应用程序的application语句,将application-set已定义的应用程序分组到命名对象中:
[edit applications]
application-set application-set-name {
application application;
}
有关典型应用程序集的示例,请参阅 示例:配置应用程序协议。
示例:配置应用协议
以下示例显示了描述在端口 78 上运行的特殊 FTP 应用程序的应用程序协议定义:
[edit applications]
application my-ftp-app {
application-protocol ftp;
protocol tcp;
destination-port 78;
timeout 100; # inactivity timeout for FTP service
}
以下示例显示了 8 类(ICMP 回显)的特殊 ICMP 协议 (application-protocol icmp):
[edit applications]
application icmp-app {
application-protocol icmp;
protocol icmp;
icmp-type icmp-echo;
}
以下示例显示了一个可能的应用程序集:
[edit applications]
application-set basic {
http;
ftp;
telnet;
nfs;
icmp;
}
该软件包括一组预定义的众所周知的应用协议。该集包括无状态防火墙过滤器已识别其 TCP 和 UDP 目的端口的应用。
验证 ALG 会话的输出
本节包含 ALG 会话成功输出的示例以及有关系统日志配置的信息。您可以比较会话结果,以检查配置是否正常运行。
FTP 示例
此示例分析活动 FTP 会话期间的输出。它由四种不同的流组成;两个是控制流,两个是数据流。该示例由以下部分组成:
示例输出
MS-MPC 卡
对于 MS-MPC,以下是作模式命令的完整 show services stateful-firewall conversations application-protocol ftp 示例输出:
user@host>show services stateful-firewall conversations application-protocol ftp
Interface: ms-1/3/0, Service set: CLBJI1-AAF001
Conversation: ALG protocol: ftp
Number of initiators: 2, Number of responders: 2
Flow State Dir Frm count
TCP 1.1.79.2:14083 -> 2.2.2.2:21 Watch I 13
NAT source 1.1.79.2:14083 -> 194.250.1.237:50118
TCP 1.1.79.2:14104 -> 2.2.2.2:20 Forward I 3
NAT source 1.1.79.2:14104 -> 194.250.1.237:50119
TCP 2.2.2.2:21 -> 194.250.1.237:50118 Watch O 12
NAT dest 194.250.1.237:50118 -> 1.1.79.2:14083
TCP 2.2.2.2:20 -> 194.250.1.237:50119 Forward O 5
NAT dest 194.250.1.237:50119 -> 1.1.79.2:14104
对于每个流量,第一行显示流量信息,包括协议 (TCP)、源地址、源端口、目标地址、目标端口、流量状态、方向和帧计数。
流的状态可以是
Watch、 或ForwardDrop:流状态表示
WatchALG 监控控制流以获取有效负载中的信息。根据需要对标头和有效负载执行 NAT 处理。流在
Forward转发数据包时不监控有效负载。根据需要对标头执行 NAT。Drop流会丢弃与 5 元组匹配的任何数据包。
帧计数 (
Frm count) 显示该流上处理的数据包数。
第二行显示 NAT 信息。
source表示源 NAT。dest表示目标 NAT。NAT 行中的第一个地址和端口是要为该流转换的原始地址和端口。
NAT 行中的第二个地址和端口是该流的转换地址和端口。
MX-SPC3 卡
在 MX-SPC3 服务卡上,以下是作模式命令的完整 show services sessions application-protocol ftp 示例输出:
user@host>show services sessions application-protocol ftp Session ID: 536870917, Service-set: ss1, Policy name: p1/131085, Timeout: 1, Valid Logical system: root-logical-system Resource information : FTP ALG, 1, 1 In: 12.10.10.10/35281 --> 22.20.20.3/8204;tcp, Conn Tag: 0x0, If: vms-2/0/0.100, Pkts: 6, Bytes: 320, Out: 22.20.20.3/8204 --> 60.1.1.2/48747;tcp, Conn Tag: 0x0, If: vms-2/0/0.200, Pkts: 9, Bytes: 8239, Session ID: 536870919, Service-set: ss1, Policy name: p1/131085, Timeout: 29, Valid Logical system: root-logical-system Resource information : FTP ALG, 1, 0 In: 12.10.10.10/44194 --> 22.20.20.3/21;tcp, Conn Tag: 0x0, If: vms-2/0/0.100, Pkts: 13, Bytes: 585, Out: 22.20.20.3/21 --> 60.1.1.2/48660;tcp, Conn Tag: 0x0, If: vms-2/0/0.200, Pkts: 11, Bytes: 650, Total sessions: 2
对于每个会话:
第一行显示流信息,包括会话 ID、服务集名称、策略名称、会话超时、逻辑系统名称及其状态。
第二行
Resource information表示会话由 ALG 创建,包括 ALG 名称 (FTP ALG) 和 ASL 组 ID(1)和 ASL 资源 ID(控制会话为 0,数据会话为 1)。第三行
In为正向流,第四行Out为逆向流,包括源地址、源端口、目标地址、目标端口、协议 (TCP)、会话连接标记、接口的Out传入In和传出、接收的帧数和字节数。根据需要对标头执行 NAT。
FTP 系统日志消息
系统日志消息在 FTP 会话期间生成。有关系统日志的详细信息,请参阅 系统日志消息。
MS-MPC 卡
在创建 FTP 控制流期间,将生成以下系统日志消息:
规则接受系统日志:
Oct 27 11:42:54 (FPC Slot 1, PIC Slot 1) {ss_ftp}[FWNAT]: ASP_SFW_RULE_ACCEPT: proto 6 (TCP) application: ftp, fe-3/3/3.0:1.1.1.2:4450 -> 2.2.2.2:21, Match SFW accept rule-set:, rule: ftp, term: 1创建接受流系统日志:
Oct 27 11:42:54 (FPC Slot 1, PIC Slot 1) {ss_ftp}[FWNAT]: ASP_SFW_CREATE_ACCEPT_FLOW: proto 6 (TCP) application: ftp, fe-3/3/3.0:1.1.1.2:4450 -> 2.2.2.2:21, creating forward or watch flow用于创建数据流的系统日志:
Oct 27 11:43:30 (FPC Slot 1, PIC Slot 1) {ss_ftp}[FWNAT]: ASP_SFW_FTP_ACTIVE_ACCEPT: proto 6 (TCP) application: ftp, so-2/1/2.0:2.2.2.2:20 -> 1.1.1.2:50726, Creating FTP active mode forward flow
MX-SPC3 卡
在创建 FTP 控制流期间,将生成以下系统日志消息:
用于创建 FTP 控制会话的系统日志:
Mar 23 23:58:54 esst480r RT_FLOW: RT_FLOW_SESSION_CREATE_USF: Tag svc-set-name ss1: session created 20.1.1.2/52877->30.1.1.2/21 0x0 junos-ftp 20.1.1.2/52877->30.1.1.2/21 0x0 N/A N/A N/A N/A 6 p1 ss1-ZoneIn ss1-ZoneOut 818413576 N/A(N/A) ge-1/0/2.0 UNKNOWN UNKNOWN UNKNOWN N/A N/A -1 N/A Mar 23 23:59:00 esst480r junos-alg: RT_ALG_FTP_ACTIVE_ACCEPT: application:ftp data, vms-3/0/0.0 30.1.1.2:20 -> 20.1.1.2:33947 (TCP)
用于创建 FTP 数据会话的系统日志:
Mar 23 23:59:00 esst480r RT_FLOW: RT_FLOW_SESSION_CREATE_USF: Tag svc-set-name ss1: session created 30.1.1.2/20->20.1.1.2/33947 0x0 junos-ftp-data 30.1.1.2/20->20.1.1.2/33947 0x0 N/A N/A N/A N/A 6 p1 ss1-ZoneOut ss1-ZoneIn 818413577 N/A(N/A) ge-1/1/6.0 FTP-DATA UNKNOWN UNKNOWN Infrastructure File-Servers 2 N/A
FTP 数据会话销毁的系统日志:
Mar 23 23:59:02 esst480r RT_FLOW: RT_FLOW_SESSION_CLOSE_USF: Tag svc-set-name ss1: session closed TCP FIN: 30.1.1.2/20->20.1.1.2/33947 0x0 junos-ftp-data 30.1.1.2/20->20.1.1.2/33947 0x0 N/A N/A N/A N/A 6 p1 ss1-ZoneOut ss1-ZoneIn 818413577 2954(4423509) 281(14620) 2 FTP-DATA UNKNOWN N/A(N/A) ge-1/1/6.0 No Infrastructure File-Servers 2 N/A
用于 FTP 控制会话销毁的系统日志:
Mar 23 23:59:39 esst480r RT_FLOW: RT_FLOW_SESSION_CLOSE_USF: Tag svc-set-name ss1: session closed Closed by junos-tcp-clt-emul: 20.1.1.2/52877->30.1.1.2/21 0x0 junos-ftp 20.1.1.2/52877->30.1.1.2/21 0x0 N/A N/A N/A N/A 6 p1 ss1-ZoneIn ss1-ZoneOut 818413576 23(1082) 18(1176) 45 UNKNOWN UNKNOWN N/A(N/A) ge-1/0/2.0 No N/A N/A -1 N/A
分析
控制流
MS-MPC 卡
控制流将在三次握手完成后建立。
控制从 FTP 客户端到 FTP 服务器的流量。TCP 目标端口为 21。
TCP 1.1.79.2:14083 -> 2.2.2.2:21 Watch I 13 NAT source 1.1.79.2:14083 -> 194.250.1.237:50118控制从 FTP 服务器到 FTP 客户端的流量。TCP 源端口为 21。
TCP 2.2.2.2:21 -> 194.250.1.237:50118 Watch O 12 NAT dest 194.250.1.237:50118 -> 1.1.79.2:14083
MX-SPC3 卡
控制流将在三次握手完成后建立。
控制从 FTP 客户端到 FTP 服务器的会话,TCP 目标端口为 21。
Session ID: 536870919, Service-set: ss1, Policy name: p1/131085, Timeout: 29, Valid Logical system: root-logical-system Resource information : FTP ALG, 1, 0 In: 12.10.10.10/44194 --> 22.20.20.3/21;tcp, Conn Tag: 0x0, If: vms-2/0/0.100, Pkts: 13, Bytes: 585, Out: 22.20.20.3/21 --> 60.1.1.2/48660;tcp, Conn Tag: 0x0, If: vms-2/0/0.200, Pkts: 11, Bytes: 650,
从 FTP 客户端到 FTP 服务器的数据会话,它适用于 FTP 被动模式。
Session ID: 536870917, Service-set: ss1, Policy name: p1/131085, Timeout: 1, Valid Logical system: root-logical-system Resource information : FTP ALG, 1, 1 In: 12.10.10.10/35281 --> 22.20.20.3/8204;tcp, Conn Tag: 0x0, If: vms-2/0/0.100, Pkts: 6, Bytes: 320, Out: 22.20.20.3/8204 --> 60.1.1.2/48747;tcp, Conn Tag: 0x0, If: vms-2/0/0.200, Pkts: 9, Bytes: 8239,
从 FTP 服务器到 FTP 客户端的数据会话,它适用于 FTP 活动模式:
Session ID: 549978117, Service-set: ss1, Policy name: p1/131085, Timeout: 1, Valid Logical system: root-logical-system Resource information : FTP ALG, 1, 1 In: 22.20.20.3/20 --> 60.1.1.3/6049;tcp, Conn Tag: 0x0, If: vms-2/0/0.200, Pkts: 10, Bytes: 8291, Out: 12.10.10.10/33203 --> 22.20.20.3/20;tcp, Conn Tag: 0x0, If: vms-2/0/0.100, Pkts: 5, Bytes: 268,
数据流
在 FTP 控制协议过程中,将协商 20 个数据端口以进行数据传输。这两个流是 FTP 客户端和 FTP 服务器之间的数据流:
TCP 1.1.79.2:14104 -> 2.2.2.2:20 Forward I 3
NAT source 1.1.79.2:14104 -> 194.250.1.237:50119
TCP 2.2.2.2:20 -> 194.250.1.237:50119 Forward O 5
NAT dest 194.250.1.237:50119 -> 1.1.79.2:14104
故障排除问题
如何知道 FTP ALG 是否处于活动状态?
对话中的 ALG 协议字段应显示
ftp。控制流中应该有一个有效的帧计数 (
Frm count)。数据流中的有效帧计数表示数据传输已发生。
我需要检查是否已建立 FTP 连接但未进行数据传输?
最有可能的是,控制连接已开启,但数据连接已关闭。
检查对话输出以确定控件流和数据流是否同时存在。
如何解释每个流量?每个流量是什么意思?
FTP 控制流发起方流 — 目标端口 21 的流
FTP 控制流响应器流 — 使用源端口的流;21
FTP 数据流发起方流 — 目标端口 20 的流
FTP 数据流响应方流 — 源端口 20 的流
RTSP ALG 示例
下面是 RTSP 对话的示例。应用程序使用 RTSP 协议进行控制连接。建立连接后,将使用 UDP 协议 (RTP) 发送介质。
此示例包含以下内容:
MS-MPC 的示例输出
以下是作模式命令的 show services stateful-firewall conversations 输出:
user@host# show services stateful-firewall conversations Interface: ms-3/2/0, Service set: svc_set Conversation: ALG protocol: rtsp Number of initiators: 5, Number of responders: 5 Flow State Dir Frm count TCP 1.1.1.3:58795 -> 2.2.2.2:554 Watch I 7 UDP 1.1.1.3:1028 -> 2.2.2.2:1028 Forward I 0 UDP 1.1.1.3:1029 -> 2.2.2.2:1029 Forward I 0 UDP 1.1.1.3:1030 -> 2.2.2.2:1030 Forward I 0 UDP 1.1.1.3:1031 -> 2.2.2.2:1031 Forward I 0 TCP 2.2.2.2:554 -> 1.1.1.3:58795 Watch O 5 UDP 2.2.2.2:1028 -> 1.1.1.3:1028 Forward O 6 UDP 2.2.2.2:1029 -> 1.1.1.3:1029 Forward O 0 UDP 2.2.2.2:1030 -> 1.1.1.3:1030 Forward O 3 UDP 2.2.2.2:1031 -> 1.1.1.3:1031 Forward O 0
MX-SPC3 服务卡的示例输出
以下是作模式命令的 show services sessions application-protocol rtsp 输出:
user@host# run show services sessions application-protocol rtsp Session ID: 1073741828, Service-set: sset1, Policy name: p1/131081, Timeout: 116, Valid Logical system: root-logical-system Resource information : RTSP ALG, 1, 0 In: 31.0.0.2/33575 --> 41.0.0.2/554;tcp, Conn Tag: 0x0, If: vms-4/0/0.1, Pkts: 8, Bytes: 948, Out: 41.0.0.2/554 --> 131.10.0.1/7777;tcp, Conn Tag: 0x0, If: vms-4/0/0.2, Pkts: 6, Bytes: 1117, Session ID: 1073741829, Service-set: sset1, Policy name: p1/131081, Timeout: 120, Valid Logical system: root-logical-system Resource information : RTSP ALG, 1, 1 In: 41.0.0.2/35004 --> 131.10.0.1/7780;udp, Conn Tag: 0x0, If: vms-4/0/0.2, Pkts: 220, Bytes: 79200, Out: 31.0.0.2/30004 --> 41.0.0.2/35004;udp, Conn Tag: 0x0, If: vms-4/0/0.1, Pkts: 0, Bytes: 0, Session ID: 1073741830, Service-set: sset1, Policy name: p1/131081, Timeout: 120, Valid Logical system: root-logical-system Resource information : RTSP ALG, 1, 4 In: 41.0.0.2/35006 --> 131.10.0.1/7781;udp, Conn Tag: 0x0, If: vms-4/0/0.2, Pkts: 220, Bytes: 174240, Out: 31.0.0.2/30006 --> 41.0.0.2/35006;udp, Conn Tag: 0x0, If: vms-4/0/0.1, Pkts: 0, Bytes: 0, Total sessions: 3
分析
RTSP 会话应包含与 RTSP 控制连接相对应的 TCP 流。应该有两个流,每个方向一个,从客户端到服务器,从服务器到客户端:
TCP 1.1.1.3:58795 -> 2.2.2.2:554 Watch I 7 TCP 2.2.2.2:554 -> 1.1.1.3:58795 Watch O 5
发起器流的 RTSP 控制连接从目标端口 554 发送。
响应方流的 RTSP 控制连接从源端口 554 发送。
UDP 流对应于通过 RTSP 连接发送的 RTP 介质。
故障排除问题
配置 RTSP ALG 时,介质不起作用。我该怎么办?
检查 RTSP 对话,看看 TCP 和 UDP 流是否同时存在。
ALG 协议应显示为
rtsp。
注意:流的状态显示为
Watch,因为 ALG 处理正在进行,并且客户端本质上是“监视”或处理与应用程序相对应的有效负载。对于 FTP 和 RTSP ALG 流,控制连接始终Watch是流。如何检查 ALG 错误?
您可以通过发出以下命令来检查错误。每个 ALG 都有一个单独的 ALG 数据包错误字段。
user@host# show services stateful-firewall statistics extensive Interface: ms-3/2/0 Service set: svc_set New flows: Accepts: 1347, Discards: 0, Rejects: 0 Existing flows: Accepts: 144187, Discards: 0, Rejects: 0 Drops: IP option: 0, TCP SYN defense: 0 NAT ports exhausted: 0 Errors: IP: 0, TCP: 276 UDP: 0, ICMP: 0 Non-IP packets: 0, ALG: 0 IP errors: IP packet length inconsistencies: 0 Minimum IP header length check failures: 0 Reassembled packet exceeds maximum IP length: 0 Illegal source address: 0 Illegal destination address: 0 TTL zero errors: 0, Illegal IP protocol number (0 or 255): 0 Land attack: 0 Non-IPv4 packets: 0, Bad checksum: 0 Illegal IP fragment length: 0 IP fragment overlap: 0 IP fragment reassembly timeout: 0 Unknown: 0 TCP errors: TCP header length inconsistencies: 0 Source or destination port number is zero: 0 Illegal sequence number and flags combinations: 0 SYN attack (multiple SYN messages seen for the same flow): 276 First packet not a SYN message: 0 TCP port scan (TCP handshake, RST seen from server for SYN): 0 Bad SYN cookie response: 0 UDP errors: IP data length less than minimum UDP header length (8 bytes): 0 Source or destination port number is zero: 0 UDP port scan (ICMP error seen for UDP flow): 0 ICMP errors: IP data length less than minimum ICMP header length (8 bytes): 0 ICMP error length inconsistencies: 0 Duplicate ping sequence number: 0 Mismatched ping sequence number: 0 ALG errors: BOOTP: 0, DCE-RPC: 0, DCE-RPC portmap: 0 DNS: 0, Exec: 0, FTP: 0 ICMP: 0 Login: 0, NetBIOS: 0, NetShow: 0 RPC: 0, RPC portmap: 0 RTSP: 0, Shell: 0 SNMP: 0, SQLNet: 0, TFTP: 0 Traceroute: 0
系统日志消息
启用系统日志生成和检查系统日志也有助于 ALG 流分析。本部分包含以下内容:
系统日志配置
您可以在 Junos OS CLI 中的多个不同级别配置启用系统日志消息。如以下示例配置所示,级别的选择取决于您希望事件日志记录的具体程度以及要包含的选项。有关配置选项的详细信息,请参阅适用于路由 设备的 Junos OS 管理库 (系统级别)或 适用于路由设备的 Junos OS 服务接口库 (所有其他级别)。
在最顶层的全球层面:
user@host# show system syslog file messages { any any; }在服务集级别:
user@host# show services service-set svc_set syslog { host local { services any; } } stateful-firewall-rules allow_rtsp; interface-service { service-interface ms-3/2/0; }在服务规则级别:
user@host# show services stateful-firewall rule allow_rtsp match-direction input-output; term 0 { from { applications junos-rtsp; } then { accept; syslog; } }
系统日志输出
系统日志消息在流创建期间生成,如以下示例所示:
以下系统日志消息指示 ASP 与接受规则匹配:
Oct 25 16:11:37 (FPC Slot 3, PIC Slot 2) {svc_set}[FWNAT]: ASP_SFW_RULE_ACCEPT: proto 6 (TCP) application: rtsp, ge-2/0/1.0:1.1.1.2:35595 -> 2.2.2.2:554, Match SFW accept rule-set: , rule: allow_rtsp, term: 0
有关系统日志消息的完整列表,请参阅 系统日志资源管理器。