教程:使用 Azure 门户记录出入虚拟机的网络流量

可以通过网络安全组 (NSG) 筛选虚拟机 (VM) 的入站和出站流量。 可以使用网络观察程序的 NSG 流日志功能记录流经 NSG 的网络流量。

在本教程中,你将了解如何执行以下操作:

  • 通过网络安全组创建 VM
  • 启用网络观察程序并注册 Microsoft.Insights 提供程序
  • 使用网络观察程序的 NSG 流日志功能启用 NSG 的流量日志
  • 下载记录的数据
  • 查看记录的数据

如果没有 Azure 订阅,请在开始前创建一个试用版订阅

先决条件

  • 具有活动订阅的 Azure 帐户。

登录 Azure

登录 Azure 门户

创建虚拟机

  1. 登录 Azure 门户

  2. 选择 Azure 门户左上角的“+ 创建资源”。 在新页面的搜索筛选器中输入“Windows Server 2022 Datacenter: Azure Edition”,然后在搜索结果中选择“Windows Server 2022 Datacenter: Azure Edition”项 。

  3. 在“Windows Server 2022 Datacenter: Azure Edition”页面中选择“+ 创建”。

  4. 在“创建虚拟机”中,输入或选择以下信息。

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“新建”。
    在“名称”中输入“myResourceGroup” 。
    选择“确定”。
    实例详细信息
    虚拟机名称 输入“myVM”。
    区域 选择“(亚太)中国东部”。
    可用性选项 选择“无需基础结构冗余”。
    映像 选择“Windows Server 2022 Datacenter: Azure Edition - Gen2”。
    大小 选择一个大小。
    管理员帐户
    用户名 输入用户名。
    Password 输入密码。
    确认密码 确认密码。
    入站端口规则
    公共入站端口 保留默认值“允许所选端口”。
    选择入站端口 保留默认值“RDP (3389)”。
  5. 选择“查看 + 创建”。

  6. 选择“创建”。

创建虚拟机需花费几分钟的时间。 在创建完 VM 之前,请勿继续执行剩余的步骤。 门户在创建虚拟机的同时,还会创建名为 myVM-nsg 的网络安全组并将其关联到 VM 的网络接口。

启用网络观察程序

如果已在“中国东部”区域中启用网络观察程序,请跳到注册 Insights 提供程序

  1. 在门户顶部的搜索框中,输入“网络观察程序”。 在搜索结果中选择“网络观察程序”。

  2. 在“网络观察程序”的“概述”页面中,选择订阅的“区域”列中的 > 图标,将其展开,然后选择“中国东部”右侧的“…”,如下图所示 :

    启用网络观察程序

  3. 在弹出菜单中选择“启用网络观察程序”。

注册 Insights 提供程序

NSG 流日志记录要求使用 Microsoft.Insights 提供程序。 若要注册该提供程序,请完成以下步骤:

  1. 在门户顶部的搜索框中,输入“订阅”。 在搜索结果中选择“订阅”。

  2. 在“订阅”中,选择要为其启用提供程序的订阅。

  3. 在订阅的“设置”中选择“资源提供程序” 。

  4. 在筛选器框中输入“Microsoft.Insights”。

  5. 确认显示的提供程序状态为“已注册”。 如果状态为“未注册”,请选择提供程序,然后选择“注册” 。

    注册 Microsoft Insights 提供程序的屏幕截图。

启用 NSG 流日志

NSG 流日志数据写入 Azure 存储帐户。 若要创建日志数据的存储帐户,请完成以下步骤。

  1. 在门户顶部的搜索框中,输入“存储帐户”。 在搜索结果中选择“存储帐户”。

  2. 在“存储帐户”中,选择“+ 创建” 。

  3. 在“创建存储帐户”中,输入或选择以下信息。

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“myResourceGroup”。
    实例详细信息
    存储帐户名称 为存储帐户输入名称。
    长度必须为 3-24 个字符,只能包含小写字母和数字,且必须在所有 Azure 存储中唯一。
    区域 选择“(亚太)中国东部”。
    性能 保留默认值“标准”。
    冗余 保留“异地冗余存储(GRS)”的默认值。
  4. 选择“查看”。

  5. 选择“创建” 。

创建存储帐户可能需要大约一分钟的时间。 在创建好存储帐户之前,请勿继续执行剩余的步骤。 在所有情况下,存储帐户必须与 NSG 位于同一区域中。

  1. 在门户顶部的搜索框中,输入“网络观察程序”。 在搜索结果中选择“网络观察程序”。

  2. 在“日志”中,选择“NSG 流日志”,如下图所示 :

    显示网络观察程序 NSG 流日志的屏幕截图。

  3. 从 NSG 列表中选择名为 myVm-nsg 的 NSG。

  4. 在“流日志设置”下选择“启用”。

  5. 选择流日志记录版本。 版本 2 包含流会话统计信息(字节和数据包)

    选择流日志版本

  6. 选择在启用 NSG 流日志的步骤 3 中创建的存储帐户。

    注意

    NSG 流日志不适用于已启用分层命名空间的存储帐户。

  7. 将“保留期(天)”设置为 5,然后选择“保存”。

下载流日志

  1. 在门户的网络观察程序的“日志”下选择“NSG 流日志” 。

  2. 选择“可从配置的存储帐户下载流日志”,如下图所示:

    下载流日志

  3. 选择在启用 NSG 流日志的步骤 3 中配置的存储帐户。

  4. 在“Blob 服务”下选择“容器”,然后选择“insights-logs-networksecuritygroupflowevent”容器 。

  5. 在容器中,导航浏览文件夹层次结构,直至找到 PT1H.json 文件,如下图所示。 将日志文件写入遵循以下命名约定的文件夹层次结构中:

    https://{storageAccountName}.blob.core.chinacloudapi.cn/insights-logs-networksecuritygroupflowevent/resourceId=/SUBSCRIPTIONS/{subscriptionID}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/{nsgName}/y={year}/m={month}/d={day}/h={hour}/m=00/macAddress={macAddress}/PT1H.json

    流日志

  6. 选择 PT1H.json 文件右侧的“...”,然后选择“下载”。

查看流日志

以下示例 JSON 显示你将在 PT1H.json 文件中看到的为每个流记录的数据:

版本 1 流日志事件

{
    "time": "2018-05-01T15:00:02.1713710Z",
    "systemId": "<Id>",
    "category": "NetworkSecurityGroupFlowEvent",
    "resourceId": "/SUBSCRIPTIONS/<subscriptionId>/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/MYVM-NSG",
    "operationName": "NetworkSecurityGroupFlowEvents",
    "properties": {
        "Version": 1,
        "flows": [
            {
                "rule": "UserRule_default-allow-rdp",
                "flows": [
                    {
                        "mac": "<macAddress>",
                        "flowTuples": [
                            "1525186745,192.168.1.4,10.0.0.4,55960,3389,T,I,A"
                        ]
                    }
                ]
            }
        ]
    }
}

版本 2 流日志事件

{
    "time": "2018-11-13T12:00:35.3899262Z",
    "systemId": "<Id>",
    "category": "NetworkSecurityGroupFlowEvent",
    "resourceId": "/SUBSCRIPTIONS/<subscriptionId>/RESOURCEGROUPS/MYRESOURCEGROUP/PROVIDERS/MICROSOFT.NETWORK/NETWORKSECURITYGROUPS/MYVM-NSG",
    "operationName": "NetworkSecurityGroupFlowEvents",
    "properties": {
        "Version": 2,
        "flows": [
            {
                "rule": "DefaultRule_DenyAllInBound",
                "flows": [
                    {
                        "mac": "<macAddress>",
                        "flowTuples": [
                            "1542110402,94.102.49.190,10.5.16.4,28746,443,U,I,D,B,,,,",
                            "1542110424,176.119.4.10,10.5.16.4,56509,59336,T,I,D,B,,,,",
                            "1542110432,167.99.86.8,10.5.16.4,48495,8088,T,I,D,B,,,,"
                        ]
                    }
                ]
            },
            {
                "rule": "DefaultRule_AllowInternetOutBound",
                "flows": [
                    {
                        "mac": "<macAddress>",
                        "flowTuples": [
                            "1542110377,10.5.16.4,13.67.143.118,59831,443,T,O,A,B,,,,",
                            "1542110379,10.5.16.4,13.67.143.117,59932,443,T,O,A,E,1,66,1,66",
                            "1542110379,10.5.16.4,13.67.143.115,44931,443,T,O,A,C,30,16978,24,14008",
                            "1542110406,10.5.16.4,40.71.12.225,59929,443,T,O,A,E,15,8489,12,7054"
                        ]
                    }
                ]
            }
        ]
    }
}

在前面的输出中,mac 的值是在创建 VM 时创建的网络接口的 MAC 地址。 flowTuples 的逗号分隔信息如下所示:

示例数据 数据代表的内容 说明
1542110377 时间戳 表示流发生时间的时间戳,采用 UNIX EPOCH 格式。 在前面的示例中,转换后的日期为 2018 年 5 月 1 日下午 2:59:05 (GMT)。
10.0.0.4 源 IP 地址 充当流源的源 IP 地址。 10.0.0.4 是在创建虚拟机一文中创建的 VM 的专用 IP 地址。
13.67.143.118 目标 IP 地址 充当流目标的目标 IP 地址。
44931 Source Port 充当流源的源端口。
443 Destination Port 充当流目标的目标端口。 由于流目标为端口 443,因此由日志文件中名为 UserRule_default-allow-rdp 的规则处理流。
T 协议 流的协议是 TCP (T) 还是 UDP (U)。
O 方向 流是入站 (I) 还是出站 (O)。
A 操作 是允许 (A) 流还是拒绝 (D) 流。
C 流状态仅限版本 2 捕获流的状态。 可能的状态包括 B:创建流时开始。 未提供统计信息。 C:继续执行正在进行的流。 以 5 分钟的时间间隔提供统计信息。 E:终止流时结束。 已提供统计信息。
30 发送的数据包数 - 源到目标仅限版本 2 自上次更新以来,从源发送到目标的 TCP 或 UDP 数据包的总数。
16978 发送的字节数 - 源到目标仅限版本 2 自上次更新以来,从源发送到目标的 TCP 或 UDP 数据包字节的总数。 数据包字节包括数据包标头和有效负载。
24 发送的数据包数 - 目标到源仅限版本 2 自上次更新以来,从源发送到目标的 TCP 或 UDP 数据包的总数。
14008 发送的字节数 - 目标到源仅限版本 2 自上次更新以来,从目标发送到源的 TCP 和 UDP 数据包字节的总数。 数据包字节包括数据包标头和有效负载。

后续步骤

在本教程中,你了解了如何执行以下操作:

  • 为 NSG 启用 NSG 流日志记录
  • 下载并查看文件中记录的数据。

SON 文件中的原始数据可能难以解释。 若要可视化流日志数据,可以使用 Azure 流量分析Microsoft Power BI

有关用于启用 NSG 流日志的替代方法,请参阅 PowerShellAzure CLIREST API资源管理器模板

转到下一篇文章,了解如何监视两个虚拟机之间的网络通信: