Application Delivery Management

与 Microsoft Sentinel 集成

您可以将 NetScaler Console 与 Microsoft Sentinel 集成,以将 NetScaler Console 中的以下分析数据导出到 Microsoft Sentinel:

  • WAF 违规
  • Bot 违规
  • SSL 证书洞察
  • Gateway 洞察
  • 指标和事件
  • NetScaler® Console 审计日志

Microsoft Sentinel 提供集中式数据收集,可从应用程序、服务器等各种来源收集数据。作为管理员,您可以在 Microsoft Sentinel 中报告洞察或违规后查看数据并做出决策。

为了成功集成,请确保您拥有有效的 Azure 订阅,然后按照每个部分下的步骤进行操作:

配置 Log Analytics 工作区

需要 Log Analytics 工作区来存储和分析收集到的数据。

  1. 登录 Azure。

  2. 单击“创建资源”。

    资源

  3. 在搜索栏中,键入“log analytics workspace”,然后在“Log Analytics 工作区”下单击“创建”。

    Log Analytics 工作区

  4. 在“Log Analytics 工作区”主页中,单击“创建”。

    工作区创建

  5. 在“创建 Log Analytics 工作区”中:

    1. 选择活动的“订阅”和“资源组”。

      注意:

      如果您有权限,也可以单击“新建”以添加资源组。

    2. 指定您选择的名称。

    3. 从列表中选择您的区域。

    4. 单击“查看 + 创建”。

      工作区创建预最终阶段

    5. 将显示“验证通过”消息。单击“创建”以部署工作区。

      工作区创建

    6. 您可以看到“正在部署”消息。在看到“部署完成”消息后,单击“转到资源”。

      工作区资源

      工作区已成功创建。

创建 Microsoft Entra 应用程序

您必须创建一个与 Azure 订阅关联的 Entra 应用程序,以便代表 Log Analytics 工作区进行通信。创建应用程序后,您还必须授予“Microsoft Sentinel 参与者”角色权限。该应用程序还提供诸如“客户端 ID”、“租户 ID”和“客户端密钥”等详细信息。我们建议您记下这些详细信息。在 NetScaler Console 中创建订阅以完成集成过程时,需要这些详细信息。

  1. 在 Azure 门户中,在搜索栏中键入关键字。

  2. 单击“Microsoft Entra ID”。

    Entra 应用程序

  3. 单击“添加”并选择“应用注册”。

    注册应用程序

  4. 为应用程序指定名称,在“支持的帐户类型”下选择默认选项,然后单击“注册”。

    应用程序注册

  5. 注册应用程序后:

    1. 记下“客户端 ID”和“租户 ID”。

      客户端和租户 ID

    2. 为您的应用程序创建密钥 ID。单击“证书和密钥”,然后在“客户端密钥”下,单击“新建客户端密钥”。提供描述、有效期,然后单击“添加”为您的应用程序创建密钥 ID。

      客户端密钥 ID

    3. 将显示您的应用程序的详细信息。请务必在密钥创建后立即记下“”下显示的 ID。如果您导航到任何其他 GUI 选项,此值将隐藏。

      值 ID

使用 Microsoft Entra ID 数据连接器将数据发送到 Microsoft Sentinel

Microsoft Entra ID 日志提供有关访问您的 Entra 租户的用户、应用程序和网络的全面信息。有关详细信息,请参阅使用 Microsoft Entra ID 数据连接器将数据发送到 Microsoft Sentinel

配置数据收集终结点

您必须创建数据收集终结点以获取终结点 URL。在 NetScaler Console 中创建订阅时需要此项。

  1. 在 Azure 门户中,在“Azure 服务”下,选择“数据收集终结点”或在搜索栏中键入关键字。

    DCR 选择

  2. 在“数据收集终结点”页面中,单击“创建”。

    DCR 创建

  3. 在“创建数据收集终结点”中:

    1. 指定您选择的终结点名称。

    2. 选择“订阅”、“资源组”和“区域”。

    3. 单击“查看 + 创建”。

    4. 在看到“验证通过”消息后,单击“创建”。

您必须记下终结点 URL。在“数据收集终结点”主页中,选择创建的终结点,单击“JSON 视图”,并记下终结点 ID。

DCR ID

创建用于导出数据的表

您必须创建一个表,并为要从 NetScaler Console 导出到 Microsoft Sentinel 的每个洞察提供 JSON 信息。您可以参考以下有关每个洞察的表要求的详细信息:

洞察 所需的表总数
SSL 洞察 3
WAF 1
Bot 1
Gateway 洞察 5
事件 1
指标 1
审计日志 1

每个数据收集规则 (DCR) 最多可以创建 10 个表。超过 10 个表,您必须创建另一个 DCR。

  1. 在 Azure 门户中导航到您的工作区,然后在“设置”下单击“”。

  2. 单击“创建”并选择“新建自定义日志(基于 DCR)”。

    表

  3. 在“创建自定义日志”中:

    1. 指定表名称。表名称必须采用 console_insightname 格式。例如:console_ns_sslvserverconsole_ns_ssl_certkey。您可以参考步骤 4 获取适用于每个洞察的表名称。

    2. 提供描述以添加有关表名称的更多信息。这是可选的。

    3. 创建新的数据收集规则并添加。

    4. 从列表中选择数据收集终结点。

      表参数

    5. 单击“下一步”。

  4. 在“架构和转换”选项卡中,您必须上传要导出的洞察的 JSON 示例日志。您可以为每个洞察使用以下 JSON 示例并创建 JSON 文件以上传:

洞察 JSON 要使用的表名称
SSL (1) {"id": "3eb05733-c326-493c-9aa0-f7db3a6b4277", "ns_ip_address": "10.106.186.141", "name": "zeta_192_168_110_250", "vsvr_ip_address": "", "vsvr_port": -1, "vsvr_type": "", "state": "", "partition_name": "", "display_name": "10.106.186.141", "poll_time": 1716539986, "managed": "f", "ssl2": "f", "ssl3": "t", "tls10": "t", "tls11": "t", "tls12": "t", "dh": "f", "ersa": "t", "sslprofile": "", "tls13": "f", "dhkeyexpsizelimit": "DISABLED", "pushenctriggertimeout": 1, "sessionticket": "", "includesubdomains": "f", "sessionticketkeyrefresh": "", "ssllogprofile": "", "serverauth": "", "ssltriggertimeout": 100, "ersacount": 0, "strictcachecks": "NO", "dhfile": "", "sessreuse": "ENABLED", "redirectportrewrite": "DISABLED", "skipclientcertpolicycheck": "", "tls13sessionticketsperauthcontext": 1, "cipherredirect": "DISABLED", "dropreqwithnohostheader": "NO", "sessionticketlifetime": -1, "maxage": 0, "pushenctrigger": "Always", "strictsigdigestcheck": "f", "sslredirect": "DISABLED", "sessionkeylifetime": -1, "alpnprotocol": "", "clientauthuseboundcachain": "", "sesstimeout": 120, "clientcert": "", "snihttphostmatch": "CERT", "preload": "NO", "prevsessionkeylifetime": -1, "sessionticketkeydata": "", "encrypttriggerpktcount": 45, "cleartextport": "", "ssliocspcheck": "", "hsts": "f", "sslinterception": "", "commonname": "", "sslireneg": "", "ocspstapling": "DISABLED", "quantumsize": 8192, "insertionencoding": "Unicode", "sslimaxsessperserver": -1, "cipherurl": "", "pushflag": 0, "zerorttearlydata": "DISABLED", "allowextendedmastersecret": "", "dhekeyexchangewithpsk": "NO", "clientauth": "DISABLED", "denysslreneg": "NONSECURE", "sendclosenotify": "YES", "dhcount": 0, "snienable": "DISABLED", "table_name": "ns_sslvserver"} console_ns_sslvserver
SSL (2) {"id": "a6673ab2-0b59-47b9-b530-bc30fb2b937c", "ssl_certificate": "/nsconfig/ssl/ca-cert.pem", "ssl_key": "/nsconfig/ssl/ca-key.pem", "certkeypair_name": "athul-ca", "cert_format": "PEM", "days_to_expiry": 281, "ns_ip_address": "10.106.186.141", "status": "Valid", "device_name": "10.106.186.141", "file_location_path": "", "certificate_data": "", "key_data": "", "poll_time": 1717434335, "no_domain_check": "f", "version": 3, "serial_number": "7B34B6A6A1A79E0FF168242D7BCFF78F04C9EE66", "signature_algorithm": "sha256WithRSAEncryption", "issuer": "C=IN,ST=KA,L=BAN,O=CIT,OU=ADM,CN=A", "valid_from": "Mar 12 08:51:11 2024 GMT", "valid_to": "Mar 12 08:51:11 2025 GMT", "subject": "C=IN,ST=KA,L=BAN,O=CIT,OU=ADM,CN=A", "public_key_algorithm": "rsaEncryption", "public_key_size": 4096, "no_of_bound_entities": 0, "partition_name": "", "display_name": "10.106.186.141", "hostname": "athulsadc", "key_name": "", "subjaltname": "", "managed_by": "", "certificate_dn": "", "linkcertkeyname": "", "table_name": "ns_ssl_certkey"} console_ns_ssl_certkey
WAF [{"ip_address": "10.106.185.156", "ctnsappname": "vserver_1", "severity": 2, "violation_type": 19, "violation_type_desc": "Start URL", "block_flags": 1, "transformed_flags": 0, "not_blocked_flags": 0, "country_code": "-NA-", "region_code": "-NA-", "city": "-NA-", "latitude": 200.0, "longitude": 200.0, "signature_category": "", "attack_category": 2, "attack_category_desc": "Broken Authentication and Session Management", "total_attacks": 1, "rpt_sample_time": 1704783773, "source_ip_address": 174766492, "attack_time": 1704783538, "profile_name": "appfw_cs_lb_prof", "session_id": "", "http_req_url": "https://10.106.192.54/csrf_ffc/ffc.html?field10=asfasd", "violation_name": "-NA-", "violation_value": "-NA-", "violation_location": 4, "violation_threat_index": 5, "app_threat_index": 5, "http_method": 0, "violation_action": 3, "violation_action_desc": "Blocked", "severity_type": 2, "severity_type_desc": "Medium", "iprep_score": 0, "iprep_category": 0, "counter_value": 0, "appname": "vserver_1_10.106.185.156_lb", "violation_category": 12, "violation_category_desc": "Start URL", "source_ipv6_address": "", "true_client_ip": "\\N", "backend_vserver": "", "backend_appname": "", "transactionId": "0", "table_name": "af_threat_exporter_data_l2"}] console_af_threat_exporter_data_l2
Bot {"ip_address": "10.106.186.122", "ctnsappname": "secure_gateway", "bot_type": "2", "bot_type_desc": "Bad", "action_type": "6", "action_type_desc": "Log", "country_code": "0.0", "region_code": "0.0", "city": "0.0", "bot_severity": "0", "bot_severity_desc": "Critical", "latitude": "0", "longitude": "0", "bot_detection_mechanism": "6", "bot_detection_mechanism_desc": "BlackList", "bot_category": "0", "bot_category_desc": "Uncategorized", "source_ip_address": "174758625", "bot_signature_category": "Custom Policy Expression", "appname": "secure_gateway_10.106.186.122_lb", "backend_vserver": "", "backend_appname": "", "total_attacks": "2", "rpt_sample_time": "1718783216", "table_name": "af_bot_attack_details_l2"} console_af_bot_attack_details_l2
Gateway Insight (1) {"adc_ip_address": "10.106.186.141", "auth_server": "", "client_ip": 174766732, "epa_method_type": 0, "error_count": 14, "error_details": "Invalid credentials passed", "error_type": 1, "gateway_name": "vpn_vserver_142_6", "req_url": "", "resource": "", "rpt_sample_time": 1713505215, "sso_method_type": 0, "sta_ip": "", "table_name": "af_vpn_error_details", "username": "John"} console_af_vpn_error_details
Gateway Insight (2) {"adc_ip_address": "10.102.71.166", "display_name": "10.102.71.166", "gateway_name": "firsthop", "ip_address": "10.102.71.168", "rpt_sample_time": "1718812158", "state": "Up", "table_name": "ns_vpnvserver"} console_ns_vpnvserver
Gateway Insight (3) {"adc_ip_address": "10.106.186.141", "gateway_name": "vpn_vserver_141_7", "rpt_sample_time": 1702011308, "sessions": 1, "table_name": "af_vpn_session_details", "users": 1} console_af_vpn_session_details
Gateway Insight (4) {"active_sessions": 59, "active_users": 1, "adc_ip_address": "10.106.186.136", "gateway_name": "vpnathul2", "rpt_sample_time": 1698919848, "table_name": "af_vpn_active_session_1"} console_af_vpn_active_session_1
Gateway Insight (5) {"adc_ip_address": "10.106.186.136", "entity_type": 3, "gateway_name": "vpnathul2", "hits": 3, "rpt_sample_time": 1698052438, "table_name": "af_vpn_error_reports"} console_af_vpn_error_reports
事件 {"rpt_sample_time": -1, "category": "HealthMonitoring", "entity": "10.106.186.148:HealthMonitoring:System Disk Usage", "counter_threshold_value": "", "id": "0f2607cf-f97d-4f71-9162-11e580262e93", "timestamp": 1712927472, "message": "Disk Usage High: 63.24%", "severity": "Critical", "user_name": "", "device_entity_type": "", "device_type": "", "counter_actual_value": "", "cmd_auth_status": "", "source": "10.106.186.148", "history": "Update Time= Fri, 12 Apr 2024 06:32:49 UTC ,Previous Severity= Critical ,New Severity= Critical, Source= 10.106.186.148\nUpdate Time= Fri, 12 Apr 2024 06:27:46 UTC ,Previous Severity= Critical ,New Severity= Critical, Source= 10.106.186.148\nUpdate Time= Fri, 12 Apr 2024 06:22:44 UTC ,Previous Severity= Critical ,New Severity= Critical, Source= 10.106.186.148\nUpdate Time= Fri, 12 Apr 2024 06:17:41 UTC ,Previous Severity= Critical ,New Severity= Critical, Source= 10.106.186.148\nUpdate Time= Fri, 12 Apr 2024 06:12:38 UTC ,Previous Severity= Critical ,New Severity= Critical, Source= 10.106.186.148\nUpdate Time= Fri, 12 Apr 2024 06:07:36 U", "config_cmd": "", "failureobj": "System Disk Usage", "operation_type": "undefined", "device_entity_name": "", "cmd_exec_status": "", "device_family": "", "source_event_id": -1, "source_system_ip": "10.106.186.148", "trap_id": 35, "table_name": "event"} console_event
指标 {"memory_free": 28830060544.0, "disk_used": 81248694272.0, "disk_free": 29632114688.0, "node_type": "", "memory_total": 34355544064.0, "cpu_usage": 0.49, "disk_total": 120522616832.0, "disk_usage": 73.28, "node_id": "", "id": "1be15a09-d078-469c-868a-bfbfcffe5ef1", "disk_total_capacity": 0.0, "page_size": 4096.0, "memory_usage": 16.08, "table_name": "mps_health"} console_mps_health
审计日志 {"system_gmt_time":1721868291, "source":"X.X.X.X", "severity":"INFO", "module":"DEVICECONFIG", "event_type":"CMD_EXECUTED", "message":"Sample Mesage", "instance_ip":"X.X.X.X", "app_name":""} console_syslog_messages
上传 JSON 后,您可以查看以下详细信息:

![JSON 详细信息](/en-us/netscaler-application-delivery-management-software/media/sentinel-json-view.png)

单击“**转换编辑器**”,输入适用于相应洞察的以下查询,然后单击“**运行**”以接受从 NetScaler Console 中的轮询时间开始的数据。

-  **SSL** - `source | extend TimeGenerated = todatetime(poll_time) | project-rename sslvserver_id = id`

-  **WAF** 和 **Bot** - `source | extend TimeGenerated = todatetime(rpt_sample_time)`

-  **Gateway 洞察** - `source | extend TimeGenerated = todatetime(rpt_sample_time)`

    ![表运行](/en-us/netscaler-application-delivery-management-software/media/sentinel-table-query.png)
  1. 单击“下一步”,然后单击“创建”以完成。

  2. 导航到“数据收集规则”,单击您已创建的 DCR。

  3. 在“配置”下,单击“数据源”以查看创建的表。

    表源

    DCR(数据收集规则)需要访问“监视指标发布者”角色。

    1. 导航到您的 DCR,您可以从 Azure 门户中的“最近”下访问该 DCR。

    2. 从 DCR 页面单击“访问控制 (IAM)”,然后单击“添加角色分配”。

      角色分配

    3. 在搜索栏中,键入关键字“monitor”以选择“监视指标发布者”,然后单击“下一步”。

    4. 在“成员”选项卡中,单击“选择成员”并选择您创建的 Entra 应用程序。

    5. 单击“查看 + 分配”。

      您必须记下数据收集规则 ID。导航到“数据收集规则”页面,选择您的 DCR,然后单击“JSON 视图”以记下 ID。

      DCR ID

在 NetScaler Console 中创建订阅

现在一切就绪。最后一步是通过创建订阅并添加所需详细信息来配置 NetScaler Console。要在 NetScaler Console 中创建订阅,您需要记下以下详细信息:

  • 终结点 URL
  • 数据收集规则 ID
  • 租户 ID
  • 客户端 ID
  • 客户端密钥
  1. 登录 NetScaler Console。

  2. 导航到“设置 > 可观察性集成”。

  3. 在“集成”页面中,单击“添加”。

  4. 在“创建订阅”页面中,指定以下详细信息:

    1. 在“订阅名称”字段中指定您选择的名称。

    2. 选择 NetScaler Console 作为“”,然后单击“下一步”。

    3. 选择 Microsoft Sentinel,然后单击“配置”。在“配置终结点”页面中,输入所有详细信息,然后单击“提交”。

    4. 单击“下一步”。

  5. 单击“添加洞察”,然后在“选择功能”选项卡中,根据您在 Microsoft Azure 中添加的表,选择要导出的功能,然后单击“添加选定项”,再单击“下一步”。

  6. 在“选择实例”选项卡中,您可以选择“选择所有实例”或“自定义选择”,然后单击“下一步”。

    • 选择所有实例 - 将所有 NetScaler 实例的数据导出到 Microsoft Sentinel。

    • 自定义选择 - 使您能够从列表中选择 NetScaler 实例。如果您从列表中选择特定实例,则数据仅从选定的 NetScaler 实例导出到 Microsoft Sentinel。

  7. 单击“提交”。

在 Microsoft Azure 中查看日志

配置所有内容后,我们建议您等待 30 分钟,然后在 Microsoft Azure 中查看详细信息。

  1. 在 Azure 门户中,导航到您的“Log Analytics 工作区”。

  2. 单击“日志”,提供表名称,然后单击“运行”以查看结果。

    查看日志

您还可以排查故障并使用日志来验证配置。例如,在 NetScaler Console GUI 中对配置的洞察使用“立即轮询”选项,然后:

  1. 使用 SSH 客户端登录到您的 NetScaler Console。
  2. 键入“shell”进入 bash 模式。
  3. 使用以下命令查看日志:

    `tail -f /var/mps/log/nbs/nbs_api.log`

以下示例可帮助您分析可能的故障排除错误:

  1. 无效日志

    此日志指示您为 NetScaler Console 中的 Microsoft Sentinel 订阅(“设置 > 可观察性集成”)提供了无效的客户端 ID。

    解决方法: 确保您已复制正确的客户端 ID,并通过提供正确的客户端 ID 来编辑订阅。有关详细信息,请参阅创建 Microsoft Entra 应用程序

  2. 无效 SSL 密钥

    此日志指示您尚未在 Microsoft Azure 中配置所需的 ssl_certkey 表。

    解决方法: 在 Microsoft Azure 中为 ssl_certkey 配置一个表。有关详细信息,请参阅创建用于导出数据的表

与 Microsoft Sentinel 集成