SQLNET ALG
Oracle SQL 服务器使用 SQLNET 协议从客户端执行 SQL 命令,包括负载平衡和特定于应用程序的服务。对有状态防火墙和 NAT 服务的支持要求您为 TCP 端口 1521 配置 SQLNET ALG。ALG 监控控制数据包,动态打开流量流量,并执行 NAT 地址和端口重写。
了解 SQLNET ALG
SQLNET 应用层网关 (ALG) 处理透明网络基板 (TNS) 重定向数据包,以获取 IP 地址和端口信息。SQLNET ALG 对 TNS 重定向数据包的有效负载执行网络地址转换 (NAT),为从客户端到服务器的新连接打开针孔,并在客户端和位于瞻博网络设备两侧的服务器之间传输数据。
SQLNET ALG 支持以下类型的数据传输模式:
重定向模式 — 连接重定向类型
交错模式 — 连接-接受类型
负载平衡 — 连接-重定向-连接-重定向类型
SQLNET 允许在应用程序和 Oracle 数据库之间或多个 Oracle 数据库之间进行远程数据访问。SQLNET 主要在客户端应用程序与 Oracle 数据库服务器之间建立和维护连接。SQLNET 具有多个通信层,使客户端和数据库服务器能够共享、修改和操作数据。
Oracle SQL 服务器使用 SQLNET 协议从客户端执行 SQL 命令,包括负载平衡和特定于应用程序的服务。SQLNET 协议使用 TNS 作为其网络体系结构,所有 SQLNET 流量都封装为 TNS 数据包格式。
SQLNET ALG 监控控制数据包,为数据流量打开针孔,并执行 NAT 和端口重写。要为 TCP 端口 1521 配置 SQLNET ALG,需要支持有状态防火墙和 NAT 服务。
示例:配置 SQLNET ALG
SQLNET ALG 处理 TNS 重定向数据包,执行 NAT,并为从客户端到服务器的新连接打开针孔。
此示例说明如何在路由或 NAT 模式下配置 SQLNET ALG,允许 SQLNET 流量通过设备,以及在客户端和位于瞻博网络设备两侧的服务器之间传输数据。
要求
此示例使用以下硬件和软件组件:
SRX 系列防火墙
两台电脑(客户端和服务器)
准备工作:
了解 ALG 背后的概念。请参阅 ALG 概述。
了解 SQLNET ALG 的基础知识。请参阅 了解 SQLNET ALG。
概述
在此示例中,首先在设备上配置网络接口。创建安全区域并将接口分配给区域,并配置策略以允许 SQLNET 流量通过 SRX 系列防火墙。
然后,使用与目标地址 40.0.172.10/32 匹配的规则 r1 创建静态 NAT 规则集 rs1,并创建地址为 40.0.172.45/32 的静态 NAT 前缀。
接下来,使用源规则集 src-rs1 创建源 NAT 池 src-p1,以将数据包从接口 fe-3/0/0.0 转换为接口 fe-3/0/1.0。对于匹配的数据包,源地址将转换为 src-p1 池中的 IP 地址。
然后,使用目标规则集 des-rs1 创建目标 NAT 池 des-p1,以将数据包从区域信任转换为目标地址 40.0.172.10/32。对于匹配的数据包,目标地址将转换为 des-p1 池中的 IP 地址。最后,启用 SQLNET ALG 跟踪选项。
配置
要配置 SQLNET ALG,请执行以下任务:
配置路由模式
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改与您的网络配置匹配所需的任何详细信息,将命令复制并粘贴到层次结构级别的 CLI [edit]
中,然后从配置模式进入 commit
。
set interfaces ge-0/0/0 unit 0 family inet address 10.208.172.58/21 set interfaces fe-3/0/0 unit 0 family inet address 30.3.3.149/8 set interfaces fe-3/0/1 unit 0 family inet address 40.4.4.149/8 set security zones security-zone trust host-inbound-traffic system-services all set security zones security-zone trust host-inbound-traffic protocols all set security zones security-zone trust interfaces fe-3/0/0.0 set security zones security-zone untrust host-inbound-traffic system-services all set security zones security-zone untrust host-inbound-traffic protocols all set security zones security-zone untrust interfaces fe-3/0/1.0 set security policies from-zone trust to-zone untrust policy sql match source-address any set security policies from-zone trust to-zone untrust policy sql match destination-address any set security policies from-zone trust to-zone untrust policy sql match application junos-sqlnet-v2 set security policies from-zone trust to-zone untrust policy sql then permit
分步过程
以下示例要求您在配置层次结构中导航各个级别。有关如何执行此操作的说明,请参阅 CLI 用户指南中的在配置模式下使用 CLI 编辑器。
要配置路由模式:
配置接口。
[edit interfaces] user@host# set ge-0/0/0 unit 0 family inet address 10.208.172.58/21 user@host# set fe-3/0/0 unit 0 family inet address 30.3.3.149/8 user@host# set fe-3/0/1 unit 0 family inet address 40.4.4.149/8
配置区域并将接口分配给区域。
[edit security zones security-zone] user@host# set trust host-inbound-traffic system-services all user@host# set trust host-inbound-traffic protocols all user@host# set trust interfaces fe-3/0/0.0 user@host# set untrust host-inbound-traffic system-services all user@host# set untrust host-inbound-traffic protocols all user@host# set untrust interfaces fe-3/0/1.0
配置允许从信任区域到不信任区域的 SQL 流量的 SQL 策略。
[edit security policies from-zone trust to-zone untrust ] user@host# set policy sql match source-address any user@host# set policy sql match destination-address any user@host# set policy sql match application junos-sqlnet-v2 user@host# set policy sql then permit
结果
在配置模式下,输入 show interfaces
、 show security zones
和 show security policies
命令确认您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明以进行更正。
为简洁起见,此 show
输出仅包含与此示例相关的配置。系统上的任何其他配置都已替换为省略号 (...)。
[edit] user@host# show interfaces ge-0/0/0 { unit 0 { family inet { address 10.208.172.58/21; } } } fe-3/0/0 { unit 0 { family inet { address 30.3.3.149/8; } } } fe-3/0/1 { unit 0 { family inet { address 40.4.4.149/8; } } }
[edit] user@host# show security zones ... security-zone trust { host-inbound-traffic { system-services { all; } protocols { all; } } interfaces { fe-3/0/0.0; } } security-zone untrust { host-inbound-traffic { system-services { all; } protocols { all; } } interfaces { fe-3/0/1.0; } } ...
[edit] user@host# show security policies from-zone trust to-zone untrust { policy sql { match { source-address any; destination-address any; application junos-sqlnet-v2; } then { permit; } } }
如果完成设备配置,请从配置模式输入 commit
。
配置静态 NAT 规则集
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改与您的网络配置匹配所需的任何详细信息,将命令复制并粘贴到层次结构级别的 CLI [edit]
中,然后从配置模式进入 commit
。
set security nat static rule-set rs1 from zone trust set security nat static rule-set rs1 rule r1 match destination-address 40.0.172.10/32 set security nat static rule-set rs1 rule r1 then static-nat prefix 40.0.172.45/32
分步过程
以下示例要求您在配置层次结构中导航各个级别。有关如何执行此操作的说明,请参阅 CLI 用户指南中的在配置模式下使用 CLI 编辑器。
要配置静态 NAT 规则集,请执行以下操作:
创建静态 NAT 规则集。
[edit security nat static rule-set rs1] user@host#set from zone trust
定义与目标地址匹配的规则。
[edit security nat static rule-set rs1] user@host# set rule r1 match destination-address 40.0.172.10/32
为设备定义静态 NAT 前缀。
[edit security nat static rule-set rs1] user@host# set rule r1 then static-nat prefix 40.0.172.45/32
结果
在配置模式下,输入 show security nat
命令确认您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明以进行更正。
[edit] user@host# show security nat static { rule-set rs1 { from zone trust; rule r1 { match { destination-address 40.0.172.10/32; } then { static-nat { prefix { 40.0.172.45/32; } } } } } }
如果完成设备配置,请从配置模式输入 commit
。
配置源 NAT 池和规则集
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改与您的网络配置匹配所需的任何详细信息,将命令复制并粘贴到层次结构级别的 CLI [edit]
中,然后从配置模式进入 commit
。
set security nat source pool src-p1 address 40.0.172.100/32 to 40.0.172.101/32 set security nat source rule-set src-rs1 from interface fe-3/0/0.0 set security nat source rule-set src-rs1 to interface fe-3/0/1.0 set security nat source rule-set src-rs1 rule r1 match source-address 30.0.0.0/8 set security nat source rule-set src-rs1 rule r1 match destination-address 40.0.0.0/8 set security nat source rule-set src-rs1 rule r1 then source-nat pool src-p1
分步过程
以下示例要求您在配置层次结构中导航各个级别。有关如何执行此操作的说明,请参阅 CLI 用户指南中的在配置模式下使用 CLI 编辑器。
要配置源 NAT 池和规则集,请执行以下操作:
创建源 NAT 池。
[edit security nat source] user@host#set pool src-p1 address 40.0.172.100/32 to 40.0.172.101/32
创建源 NAT 规则集。
[edit security nat source] user@host# set rule-set src-rs1 from interface fe-3/0/0.0 user@host# set rule-set src-rs1 to interface fe-3/0/1.0
配置匹配数据包并将源地址转换为源池中的地址的规则。
[edit security nat source] user@host# set rule-set src-rs1 rule r1 match source-address 30.0.0.0/8
配置匹配数据包并将目标地址转换为源池中的地址的规则。
[edit security nat source] user@host# set rule-set src-rs1 rule r1 match destination-address 40.0.0.0/8
在规则中配置源 NAT 池。
[edit security nat source] user@host# set rule-set src-rs1 rule r1 then source-nat pool src-p1
结果
在配置模式下,输入 show security nat
命令确认您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明以进行更正。
[edit] user@host# show security nat source { pool src-p1 { address { 40.0.172.100/32 to 40.0.172.101/32; } } rule-set src-rs1 { from interface fe-3/0/0.0; to interface fe-3/0/1.0; rule r1 { match { source-address 30.0.0.0/8; destination-address 40.0.0.0/8; } then { source-nat { pool { src-p1; } } } } } }
如果完成设备配置,请从配置模式输入 commit
。
配置目标 NAT 池和规则集
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改与您的网络配置匹配所需的任何详细信息,将命令复制并粘贴到层次结构级别的 CLI [edit]
中,然后从配置模式进入 commit
。
set security nat destination pool des-p1 address 40.0.172.45/32 set security nat destination rule-set des-rs1 from zone trust set security nat destination rule-set des-rs1 rule des-r1 match source-address 30.0.172.12/32 set security nat destination rule-set des-rs1 rule des-r1 match destination-address 40.0.172.10/32 set security nat destination rule-set des-rs1 rule des-r1 then destination-nat pool des-p1
分步过程
以下示例要求您在配置层次结构中导航各个级别。有关如何执行此操作的说明,请参阅 CLI 用户指南中的在配置模式下使用 CLI 编辑器。
要配置目标 NAT 池和规则集,请执行以下操作:
创建目标 NAT 池。
[edit security nat destination] user@host#set pool des-p1 address 40.0.172.45/32
创建目标 NAT 规则集。
[edit security nat destination] user@host# set rule-set des-rs1 from zone trust
配置匹配数据包并将源地址转换为池中地址的规则。
[edit security nat destination] user@host# set rule-set des-rs1 rule des-r1 match source-address 30.0.172.12/32
配置匹配数据包并将目标地址转换为池中地址的规则。
[edit security nat destination] user@host# set rule-set des-rs1 rule des-r1 match destination-address 40.0.172.10/32
在规则中配置源 NAT 池。
[edit security nat destination] user@host# set rule-set des-rs1 rule des-r1 then destination-nat pool des-p1
结果
在配置模式下,输入 show security nat
命令确认您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明以进行更正。
[edit] user@host# show security nat destination { pool des-p1 { address { 40.0.172.45/32; } } rule-set des-rs1 { from zone trust; rule des-r1 { match { source-address 30.0.172.12/32; destination-address 40.0.172.10/32; } then { destination-nat { pool { des-p1; } } } } }
如果完成设备配置,请从配置模式输入 commit
。
启用 SQLNET ALG
CLI 快速配置
从 Junos OS 15.1X49-D10 版和 Junos OS 17.3R1 版开始,默认情况下启用 SQLNET 应用层网关。
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改与您的网络配置匹配所需的任何详细信息,将命令复制并粘贴到层次结构级别的 CLI [edit]
中,然后从配置模式进入 commit
。
set security alg sql
分步过程
以下示例要求您在配置层次结构中导航各个级别。有关如何执行此操作的说明,请参阅 CLI 用户指南中的在配置模式下使用 CLI 编辑器。
要启用 SQLNET ALG,请执行以下操作:
启用 SQLNET ALG。
[edit ] user@host#set security alg sql
启用 SQLNET ALG 跟踪选项
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改与您的网络配置匹配所需的任何详细信息,将命令复制并粘贴到层次结构级别的 CLI [edit]
中,然后从配置模式进入 commit
。
set security alg sql traceoptions flag all set security alg traceoptions file trace set security alg traceoptions file size 1g set security alg traceoptions level verbose
分步过程
以下示例要求您在配置层次结构中导航各个级别。有关如何执行此操作的说明,请参阅 CLI 用户指南中的在配置模式下使用 CLI 编辑器。
要启用 SQLNET ALG 跟踪选项,请执行以下操作:
启用 SQLNET ALG 跟踪选项。
[edit security alg] user@host#set sql traceoptions flag all
配置文件名以接收跟踪操作的输出。
[edit security alg] user@host#set traceoptions file trace
指定最大跟踪文件大小。
[edit security alg] user@host#set traceoptions file size 1g
指定跟踪输出的级别。
[edit security alg] user@host#set traceoptions level verbose
结果
在配置模式下,输入 show security alg
命令确认您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明以进行更正。
[edit] user@host# show security alg traceoptions { file trace size 1g; level verbose; } sql traceoptions flag all;
如果完成设备配置,请从配置模式输入 commit
。
验证
确认配置工作正常。
验证 SQLNET ALG 控制会话
目的
验证是否已执行 SQL 命令,以及是否已创建所有 SQL 控件和数据会话。
行动
在操作模式下,输入 show security flow session
命令。
user@host>show security flow session Session ID: 10880, Policy name: sql, Timeout: 2, Valid In: 30.0.172.12/52315 --> 40.0.172.35/1521;tcp, If: fe-3/0/0.0, Pkts: 6, Bytes: 492 Out: 40.0.172.35/1521 --> 30.0.172.12/52315;tcp, If: fe-3/0/1.0, Pkts: 4, Bytes: 227 Session ID: 10881, Policy name: sql, Timeout: 1800, Valid Resource information : SQLV2 ALG, 5, 18 In: 30.0.172.12/45944 --> 40.0.172.35/1114;tcp, If: fe-3/0/0.0, Pkts: 18, Bytes: 4240 Out: 40.0.172.35/1114 --> 30.0.172.12/45944;tcp, If: fe-3/0/1.0, Pkts: 15, Bytes: 3989 Total sessions: 2
意义
Session ID- 标识会话的编号。使用此 ID 可获取有关会话的更多信息,例如策略名称、传入和传出的数据包数。
Policy name- 允许流量的策略名称。
In—传入流(源和目标 IP 地址及其各自的源和目标端口号,会话为 TCP,此会话的源接口为 fe-3/0/0.0)。
Out—反向流(源和目标 IP 地址及其各自的源和目标端口号,会话为 TCP,此会话的目标接口为 fe-3/0/1.0)。
验证 SQLNET ALG
目的
验证是否启用了 SQLNET ALG。
行动
在操作模式下,输入 show security alg status
命令。
user@host>show security alg status ALG Status : DNS : Enabled FTP : Enabled H323 : Disabled MGCP : Disabled MSRPC : Enabled PPTP : Enabled RSH : Disabled RTSP : Disabled SCCP : Disabled SIP : Disabled SQL : Enabled SUNRPC : Enabled TALK : Enabled TFTP : Enabled IKE-ESP : Disabled
意义
输出显示 SQLNET ALG 状态,如下所示:
已启用 — 显示已启用 SQLNET ALG
已禁用 — 显示 SQLNET ALG 已禁用。
验证 SQLNET ALG 资源管理器组
目的
验证 SQLNET ALG 使用的资源管理器组和活动组的总数。
行动
在操作模式下,输入 show security resource-manager group active
命令。
user@host>show security resource-manager group active Group ID 1: Application - SQL ALG Total groups 677, active groups 1
验证 SQLNET ALG 资源信息
目的
验证 SQLNET ALG 使用的资源和活动资源的总数。
行动
在操作模式下,输入 show security resource-manager resource active
命令。
user@host>show security resource-manager resource active Resource ID 2: Group ID - 1, Application - SQL ALG Resource ID 1: Group ID - 1, Application - SQL ALG Total Resources 4044, active resources 2