ALG 应用
配置应用程序属性
要配置应用程序属性,请在层次结构级别包含 application
语句 [edit applications]
:
[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) 并将其包含在应用程序集中以进行服务处理。要配置应用程序协议,请在层次结构级别包含 application-protocol
语句 [edit applications application application-name]
:
[edit applications application application-name] application-protocol protocol-name;
表 1 显示了支持的协议列表。有关特定协议的更多信息,请参阅 ALG 描述。
协议名称 |
CLI 值 |
评论 |
---|---|---|
引导协议 (BOOTP) |
|
支持 BOOTP 和动态主机配置协议 (DHCP)。 |
分布式计算环境 (DCE) 远程过程调用 (RPC) |
|
要求 |
DCE RPC 端口图 |
|
要求 |
域名系统 (DNS) |
|
要求 |
Exec |
|
要求 |
Ftp |
|
要求 |
H.323 |
|
– |
艾克阿尔格 |
|
要求语句具有值 |
互联网控制消息协议 (ICMP) |
|
要求 |
互联网间 ORB 协议 |
|
– |
Ip |
|
– |
登录 |
|
– |
网络BIOS |
|
要求 |
网展 |
|
要求 |
点对点隧道协议 |
|
– |
真实音频 |
|
– |
实时流式处理协议 (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 地址感知网络寻址概述。
配置网络协议
该 protocol
语句允许您指定要在应用程序定义中匹配哪些受支持的网络协议。要配置网络协议,请在层次结构级别包含 protocol
语句 [edit applications application application-name]
:
[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 |
|
需要 or |
Udp |
|
需要 or |
有关可能的数值的完整列表,请参阅 RFC 1700,分配的编号(适用于 Internet 协议套件)。
不支持将 IP 版本 6 (IPv6) 作为应用程序定义中的网络协议。
默认情况下,两次 NAT 功能可能会影响嵌入在 ICMP 错误消息有效负载中的 IP、TCP 和 UDP 标头。对于两次 NAT 配置,可以在应用程序语句中包含 and protocol tcp
protocol udp
语句。有关配置两次 NAT 的详细信息,请参阅 Junos 地址感知网络寻址概述。
配置 ICMP 代码和类型
ICMP 代码和类型与网络协议一起为应用程序定义中的数据包匹配提供了附加规范。要配置 ICMP 设置,请在层次结构级别包含 icmp-code
and icmp-type
语句 [edit applications application application-name]
:
[edit applications application application-name] icmp-code value; icmp-type value;
只能包含一个 ICMP 代码和类型值。语句 application-protocol
必须具有值 icmp
。 表 3 显示了支持的 ICMP 值列表。
CLI 声明 |
描述 |
---|---|
|
此值或关键字提供的信息比 更 要代替数值,您可以指定以下文本同义词之一(还会列出字段值)。关键字按与其关联的 ICMP 类型分组: 参数问题: 重定向: 超时: 无法访问: |
|
通常,将此匹配项与 要代替数值,可以指定以下文本同义词之一(还会列出字段值): |
如果配置的接口具有包含拒绝操作的输入防火墙过滤器和包含状态防火墙规则的服务集,则路由器将在数据包上运行有状态防火墙规则之前执行输入防火墙过滤器。因此,当数据包转发引擎通过接口发送 ICMP 错误消息时,有状态防火墙规则可能会丢弃数据包,因为在输入方向上看不到数据包。
可能的解决方法是包括一个转发表过滤器来执行拒绝操作,因为这种类型的过滤器是在输入方向的有状态防火墙之后执行的,或者包括一个输出服务过滤器,以防止本地生成的 ICMP 数据包进入有状态防火墙服务。
配置源端口和目标端口
TCP 或 UDP 源端口和目标端口结合网络协议为应用程序定义中的数据包匹配提供附加规范。要配置端口,请在层次结构级别包含 destination-port
[edit applications application application-name]
and source-port
语句:
[edit applications application application-name] destination-port value; source-port value;
必须定义一个源端口或目标端口。通常,您可以结合 match 语句指定 protocol
此匹配项,以确定端口上使用的协议;有关约束条件,请参阅 表 1。
您可以指定数值或 表 4 中列出的文本同义词之一。
端口名称 |
对应端口号 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
有关匹配条件的更多信息,请参阅 《路由策略》、《防火墙过滤器》和《流量监管器用户指南》。
配置非活动超时期限
您可以指定应用程序不活动的超时期限。如果软件在持续时间内未检测到任何活动,则当计时器过期时,流将变为无效。要配置超时期限,请在层次结构级别包含 inactivity-timeout
语句 [edit applications application application-name]
:
[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 数据包。此 ALG 仅支持 ESP 隧道模式。您可以使用预定义的 IKE ALG 应用程序 junos-ike
,该应用程序具有目标端口 (500)、非活动超时(30 秒)、门超时(120 秒)和 ESP 会话空闲超时(800 秒)的预定义值。如果要将 IKE ALG 用于与预定义 junos-ike
应用程序不同的值,则需要配置新的 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 数据流量)空闲超时(以秒为单位)。如果此时没有 IPsec 数据流量在 ESP 会话上传递,则该会话将被删除。默认值为 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 注册,请在层次结构级别包含
learn-sip-register
[edit applications application application-name]
语句:[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。要配置超时期限,请在层次结构级别包含
sip-call-hold-timeout
语句[edit applications application application-name]
:[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 会将“发件人:、收件人:”和 Call-ID:“字段与呼叫表进行比较,以确定消息的呼叫上下文。如果到达与现有呼叫匹配的新邀请消息,ALG 会将其作为重新邀请进行处理。
当包含 SDP 信息的消息到达时,ALG 会分配端口并在这些端口与 SDP 中的端口之间创建 NAT 映射。由于 SDP 需要实时传输协议 (RTP) 和实时控制协议 (RTCP) 通道的顺序端口,因此 ALG 提供连续的偶数端口。如果找不到一对端口,则会丢弃 SIP 消息。
本主题包含以下部分:
拨出电话
当使用从内部网络到外部网络的 SIP 请求消息发起 SIP 呼叫时,NAT 将替换 SDP 中的 IP 地址和端口号,并将 IP 地址和端口号绑定到瞻博网络防火墙。“通过”、“联系人”、“路由”和“记录路由 SIP 标头”字段(如果存在)也会绑定到防火墙 IP 地址。ALG 存储这些映射,以便在重新传输和 SIP 响应消息中使用。
然后,SIP ALG 会在防火墙上打开针孔,以允许媒体通过基于 SDP 以及“通过”、“联系”和“记录路由”标头字段中的信息协商的动态分配端口上的设备。针孔还允许传入数据包到达联系人、通过和记录路由 IP 地址和端口。处理返回流量时,ALG 会将原始联系、通过、路由和记录路由 SIP 字段插入回数据包中。
来电
传入呼叫从公共网络发起到公共静态 NAT 地址或设备上的接口 IP 地址。静态 NAT 是指向内部主机的静态配置的 IP 地址;接口 IP 地址由 ALG 动态记录,因为它监控内部主机发送到 SIP 注册商的注册消息。当设备收到传入的 SIP 数据包时,它会设置会话并将数据包的有效负载转发到 SIP ALG。
ALG 检查 SIP 请求消息(最初是邀请),并根据 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 地址和端口号与上一次邀请相比没有更改 — 如果是,ALG 将删除旧针孔并创建新的针孔以允许媒体通过。ALG 还会监控过孔、接触和记录路由 SIP 字段,并在确定这些字段已更改时打开新的针孔。
转接呼叫
例如,网络外部的用户 A 呼叫网络内的用户 B,而用户 B 将呼叫前转给网络外的用户 C。SIP ALG 将来自用户 A 的邀请作为正常传入呼叫进行处理。但是,当 ALG 检查网络外部从 B 到 C 的转发呼叫并注意到使用相同的接口到达 B 和 C 时,它不会在防火墙中打开针孔,因为媒体将直接在用户 A 和用户 C 之间流动。
呼叫终止
BYE 消息终止呼叫。当设备收到 BYE 消息时,它会像转换任何其他消息一样转换标头字段。但是,由于接收方必须以 200 OK 确认 BYE 消息,因此 ALG 会将呼叫拆解延迟 5 秒,以便有时间传输 200 OK。
呼叫重新邀请消息
重新邀请消息将新的媒体会话添加到呼叫中并删除现有媒体会话。将新媒体会话添加到呼叫时,将在防火墙中打开新的针孔并创建新的地址绑定。该过程与原始呼叫设置相同。从呼叫中删除一个或多个媒体会话时,针孔将关闭并释放绑定,就像使用 BYE 消息一样。
呼叫会话计时器
SIP ALG 使用会话过期值在未收到“重新邀请”或“更新”消息时使会话超时。ALG 从对邀请的 200 OK 响应中获取会话过期值(如果存在),并将此值用于发出超时信号。如果 ALG 在会话超时之前收到另一个邀请,则会将所有超时值重置为此新邀请或默认值,然后重复该过程。
作为预防措施,SIP ALG 使用硬超时值来设置呼叫可以存在的最长时间。这可确保在发生以下事件之一时设备受到保护:
终端系统在呼叫期间崩溃,并且未收到 BYE 消息。
恶意用户从不发送 BYE 来尝试攻击 SIP ALG。
SIP 代理的不良实现无法处理记录路由,并且从不发送 BYE 消息。
网络故障会阻止接收 BYE 消息。
呼叫取消
任何一方都可以通过发送 CANCEL 消息来取消呼叫。收到 CANCEL 消息后,SIP ALG 会关闭防火墙的针孔(如果已打开)并释放地址绑定。在释放资源之前,ALG 会将控制通道老化延迟大约 5 秒,以便有时间让最后的 200 OK 通过。当 5 秒超时到期时,无论 487 响应还是非 200 响应到达,呼叫都将终止。
分 叉
分叉使 SIP 代理能够同时向多个目标发送单个邀请消息。当单个呼叫的多个 200 OK 响应消息到达时,SIP ALG 会解析但使用它收到的前 200 OK 消息更新呼叫信息。
SIP 消息
SIP 消息格式由 SIP 标头部分和 SIP 正文组成。在请求消息中,标头部分的第一行是请求行,其中包括方法类型、request-URI 和协议版本。在响应消息中,第一行是状态行,其中包含状态代码。SIP 报头包含用于信令的 IP 地址和端口号。SIP 正文与标头部分用空行分隔,保留用于会话描述信息,这是可选的。Junos OS 目前仅支持 SDP。SIP 主体包含用于传输媒体的 IP 地址和端口号。
SIP 接头
在以下示例 SIP 请求消息中,NAT 替换标头字段中的 IP 地址,以对外部网络隐藏这些地址。
INVITE bob@10.150.20.5
SIP/2.0 Via: SIP/2.0/UDP10.150.20.3
:5434 From: alice@10.150.20.3
To: bob@10.150.20.5
Call-ID: a12abcde@10.150.20.3
Contact: 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 正文中的 SDP 信息包括 ALG 用于为媒体流创建通道的 IP 地址。SDP 部分的转换还会分配资源,即发送和接收媒体的端口号。
以下示例 SDP 部分的摘录显示了为资源分配而转换的字段。
o=user 2344234 55234434 IN IP410.150.20.3
c=IN IP410.150.20.3
m=audio43249
RTP/AVP 0
SIP 消息可以包含多个媒体流。此概念类似于将多个文件附加到电子邮件。例如,从 SIP 客户端发送到 SIP 服务器的邀请消息可能具有以下字段:
c=IN IP410.123.33.4
m=audio33445
RTP/AVP 0 c=IN IP410.123.33.4
m=audio33447
RTP/AVP 0 c=IN IP410.123.33.4
m=audio33449
RTP/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,请在层次结构级别包含 snmp-command
语句 [edit applications application application-name]
:
[edit applications application application-name] snmp-command value;
支持的值为 get
、 get-next
、 set
和 trap
。您只能配置一个匹配值。 application-protocol
层次结构级别的语句 [edit applications application application-name]
必须具有值 snmp
。有关指定应用程序协议的信息,请参阅 配置应用程序协议。
配置 RPC 程序编号
您可以为数据包匹配指定 RPC 程序编号。要配置 RPC 程序编号,请在层次结构级别包含rpc-program-number
[edit applications application application-name]
语句:
[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 值,请在层次结构级别包含 ttl-threshold
语句 [edit applications application application-name]
:
[edit applications application application-name] ttl-threshold value;
application-protocol
层次结构级别的语句[edit applications application application-name]
必须具有值 traceroute
。有关指定应用程序协议的信息,请参阅配置应用程序协议。
配置通用唯一标识符
可以为 DCE RPC 对象指定通用唯一标识符 (UUID)。要配置 UUID 值,请在层次结构级别包含 uuid
语句 [edit applications application application-name]
:
[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
、Forward
或Drop
:流状态表示
Watch
ALG 监控控制流以获取有效负载中的信息。根据需要对标头和有效负载执行 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
有关系统日志消息的完整列表,请参阅 系统日志资源管理器。