网络安全组
可以使用 Azure 网络安全组来筛选 Azure 虚拟网络中 Azure 资源之间的网络流量。 网络安全组包含安全规则,这些规则可允许或拒绝多种 Azure 资源的入站和出站网络流量。 可以为每项规则指定源和目标、端口以及协议。
本文介绍网络安全组规则的属性、应用的默认安全规则,以及可以修改以创建扩充安全规则的规则属性。
安全规则
一个网络安全组包含不超过 Azure 订阅限制的任意数量的规则。 每个规则指定以下属性:
属性 | 解释 |
---|---|
名称 | 网络安全组中的唯一名称。 该名称最长可为 80 个字符。 它必须以单词字符开头,并以单词字符或“_”结尾。 名称可能包含单词字符或“.”、“-”、“_”。 |
优先级 | 介于 100 和 4096 之间的数字。 规则按优先顺序进行处理。先处理编号较小的规则,因为编号越小,优先级越高。 一旦流量与某个规则匹配,处理即会停止。 因此,不会处理优先级较低(编号较大)的、其属性与高优先级规则相同的所有规则。 Azure 默认安全规则被授予最高编号,但优先级最低,以确保始终优先处理自定义规则。 |
源或目标 | 可以是任何值,也可以是单个 IP 地址、无类别域际路由 (CIDR) 块(例如 10.0.0.0/24)、服务标记或应用程序安全组。 如果为 Azure 资源指定一个地址,请指定分配给该资源的专用 IP 地址。 在 Azure 针对入站流量将公共 IP 地址转换为专用 IP 地址后,系统会处理网络安全组,然后由 Azure 针对出站流量将专用 IP 地址转换为公共 IP 地址。 指定范围、服务标记或应用程序安全组时,需要的安全规则较少。 在一个规则中指定多个单独的 IP 地址和范围(不能指定多个服务标记或应用程序组)的功能称为扩充式安全规则。 只能在通过资源管理器部署模型创建的网络安全组中创建扩充式安全规则。 在通过经典部署模型创建的网络安全组中,不能指定多个 IP 地址和 IP 地址范围。 如果源指向子网 10.0.1.0/24(VM1 所在的位置),而目标指向子网 10.0.2.0/24(VM2 所在的位置),则表明 NSG 的目的是过滤 VM2 的网络流量,并且 NSG 与 VM2 的网络接口相关联。 |
协议 | TCP、UDP、ICMP、ESP、AH 或 任何协议。 ESP 和 AH 协议目前无法通过 Azure 门户使用,但可通过 ARM 模板使用。 |
方向 | 该规则是应用到入站还是出站流量。 |
端口范围 | 可以指定单个端口或端口范围。 例如,可以指定 80 或 10000-10005。 指定范围可以减少创建的安全规则数。 只能在通过资源管理器部署模型创建的网络安全组中创建扩充式安全规则。 在通过经典部署模型创建的网络安全组中,不能在同一个安全规则中指定多个端口或端口范围。 |
操作 | 允许或拒绝 |
根据五元组(源、源端口、目标、目标端口、协议)信息评估并应用安全规则。 不能创建两个具有相同优先级和方向的安全规则。 将为现有连接创建流记录。 是允许还是拒绝通信取决于流记录的连接状态。 流记录允许网络安全组有状态。 例如,如果针对通过端口 80 访问的任何地址指定了出站安全规则,则不需要指定入站安全规则来响应出站流量。 如果通信是从外部发起的,则只需指定入站安全规则。 反之亦然。 如果允许通过某个端口发送入站流量,则不需要指定出站安全规则来响应通过该端口发送的流量。
删除允许连接的安全规则时,现有连接不一定会中断。 修改网络安全组规则只会影响新连接。 创建新规则或在网络安全组中更新现有规则时,该规则将仅适用于新连接。 现有连接不会使用新规则重新评估。
在网络安全组中创建的安全规则存在数量限制。 有关详细信息,请参阅 Azure 限制。
默认安全规则
Azure 在你所创建的每个网络安全组中创建以下默认规则:
入站
AllowVNetInBound
优先级 | 源 | 源端口 | 目标 | 目标端口 | 协议 | 访问 |
---|---|---|---|---|---|---|
65000 | VirtualNetwork | 0-65535 | VirtualNetwork | 0-65535 | 任意 | 允许 |
AllowAzureLoadBalancerInBound
优先级 | 源 | 源端口 | 目标 | 目标端口 | 协议 | 访问 |
---|---|---|---|---|---|---|
65001 | AzureLoadBalancer | 0-65535 | 0.0.0.0/0 | 0-65535 | 任意 | 允许 |
DenyAllInbound
优先级 | 源 | 源端口 | 目标 | 目标端口 | 协议 | 访问 |
---|---|---|---|---|---|---|
65500 | 0.0.0.0/0 | 0-65535 | 0.0.0.0/0 | 0-65535 | 任意 | 拒绝 |
出站
AllowVnetOutBound
优先级 | 源 | 源端口 | 目标 | 目标端口 | 协议 | 访问 |
---|---|---|---|---|---|---|
65000 | VirtualNetwork | 0-65535 | VirtualNetwork | 0-65535 | 任意 | 允许 |
AllowInternetOutBound
优先级 | 源 | 源端口 | 目标 | 目标端口 | 协议 | 访问 |
---|---|---|---|---|---|---|
65001 | 0.0.0.0/0 | 0-65535 | Internet | 0-65535 | 任意 | 允许 |
DenyAllOutBound
优先级 | 源 | 源端口 | 目标 | 目标端口 | 协议 | 访问 |
---|---|---|---|---|---|---|
65500 | 0.0.0.0/0 | 0-65535 | 0.0.0.0/0 | 0-65535 | 任意 | 拒绝 |
在“源”和“目标”列表中,“VirtualNetwork”、“AzureLoadBalancer”和“Internet”是服务标记,而不是 IP 地址。 在“协议”列中,Any 包含 TCP、UDP 和 ICMP。 创建规则时,可以指定 TCP、UDP、ICMP 或 Any。 “源”和“目标”列中的“0.0.0.0/0”表示所有地址。 Azure 门户、Azure CLI 或 PowerShell 等客户端可以使用“*”或任何字符来表示此表达式。
不能删除默认规则,但可以通过创建更高优先级的规则来替代默认规则。
扩充式安全规则
扩充式安全规则简化了虚拟网络的安全定义,可让我们以更少的规则定义更大、更复杂的网络安全策略。 可将多个端口和多个显式 IP 地址和范围合并成一个易于理解的安全规则。 可在规则的源、目标和端口字段中使用扩充式规则。 若要简化安全规则定义的维护,可将扩充式安全规则与服务标记或应用程序安全组合并。 可在规则中指定的地址、范围和端口的数量存在限制。 有关详细信息,请参阅 Azure 限制。
服务标记
服务标记代表给定 Azure 服务中的一组 IP 地址前缀。 它有助于将频繁更新网络安全规则的复杂性降至最低。
有关详细信息,请参阅 Azure 服务标记。 有关如何使用存储服务标记限制网络访问的示例,请参阅限制对 PaaS 资源的网络访问。
应用程序安全组
使用应用程序安全组可将网络安全性配置为应用程序结构的固有扩展,从而可以基于这些组将虚拟机分组以及定义网络安全策略。 可以大量重复使用安全策略,而无需手动维护显式 IP 地址。 若要了解详细信息,请参阅应用程序安全组。
Azure 平台注意事项
主机节点的虚拟 IP:基本的基础结构服务(如 DHCP、DNS、IMDS 和运行状况监视)通过虚拟化主机 IP 地址 168.63.129.16 和 169.254.169.254 提供。 这些 IP 地址属于 Azure,是仅有的用于所有区域的虚拟化 IP 地址,没有其他用途。 默认情况下,除非是特定于每个服务的服务标记的目标,否则这些服务不受配置的网络安全组的约束。 若要替代此基本基础结构通信,可以在网络安全组规则上使用以下服务标记创建一个安全规则来拒绝流量:AzurePlatformDNS、AzurePlatformIMDS、AzurePlatformLKM。 了解如何诊断网络流量筛选和诊断网络路由。
许可(密钥管理服务) :在虚拟机中运行的 Windows 映像必须获得许可。 为了确保许可,会向处理此类查询的密钥管理服务主机服务器发送请求。 该请求是通过端口 1688 以出站方式提出的。 对于使用默认路由 0.0.0.0/0 配置的部署,此平台规则会被禁用。
负载均衡池中的虚拟机:应用的源端口和地址范围来自源计算机,而不是来自负载均衡器。 目标端口和地址范围是目标计算机的,而不是负载均衡器的。
Azure 服务实例:在虚拟网络子网中部署了多个 Azure 服务的实例,例如 HDInsight、应用程序服务环境和虚拟机规模集。 有关可部署到虚拟网络的服务的完整列表,请参阅 Azure 服务的虚拟网络。 在将网络安全组应用到子网之前,请熟悉每个服务的端口要求。 如果拒绝服务所需的端口,服务将无法正常工作。
发送出站电子邮件:Azure 建议利用经过身份验证的 SMTP 中继服务(通常通过 TCP 端口 587 进行连接,但也经常使用其他端口)从 Azure 虚拟机发送电子邮件。 SMTP 中继服务特别重视发件人信誉,尽量降低第三方电子邮件提供商拒绝邮件的可能性。 此类 SMTP 中继服务包括但不限于:Exchange Online Protection 和 SendGrid。 在 Azure 中使用 SMTP 中继服务绝不会受限制,不管订阅类型如何。
如果是在 2017 年 11 月 15 日之前创建的 Azure 订阅,则除了能够使用 SMTP 中继服务,还可以直接通过 TCP 端口 25 发送电子邮件。 如果是在 2017 年 11 月 15 日之后创建的订阅,则可能无法直接通过端口 25 发送电子邮件。 经端口 25 的出站通信行为取决于订阅类型,如下所示:
企业协议:对于在标准企业协议订阅中部署的 VM,不会阻止 TCP 端口 25 上的出站 SMTP 连接。 但是,不保证外部域将接受来自 VM 的传入电子邮件。 如果电子邮件被外部域拒绝或筛选,你应联系外部域的电子邮件服务提供商解决问题。 Azure 支持不包含这些问题。
对于 Enterprise 开发/测试订阅,默认情况下会阻止端口 25。 可以删除这项阻止。 若要请求删除这项阻止,请转到 Azure 门户中 Azure 虚拟网络资源的“诊断和解决”设置页面的“无法发送电子邮件(SMTP-端口 25)”部分,并运行诊断程序。 这样将会自动豁免符合条件的企业开发/测试订阅。
使订阅不受此阻止并停止再重启 VM 后,该订阅中的所有 VM 在此后都会被豁免。 该豁免仅适用于请求的订阅,并且仅适用于直接路由到 Internet 的 VM 流量。
标准预付费套餐: 阻止所有资源通过端口 25 进行出站通信。 不能请求去除该限制,因为不会针对请求授予相关权限。 若需从虚拟机发送电子邮件,则需使用 SMTP 中继服务。
MSDN、Azure Pass、Azure 开放式许可、教育、免费试用版:阻止所有资源经端口 25 进行出站通信。 不能请求去除该限制,因为不会针对请求授予相关权限。 若需从虚拟机发送电子邮件,则需使用 SMTP 中继服务。
云服务提供商:阻止所有资源通过端口 25 进行出站通信。 不能请求去除该限制,因为不会针对请求授予相关权限。 若需从虚拟机发送电子邮件,则需使用 SMTP 中继服务。
后续步骤
- 若要了解哪些 Azure 资源可以部署到虚拟网络中并与网络安全组关联,请参阅 Azure 服务的虚拟网络集成
- 若要了解如何通过网络安全组评估流量,请参阅网络安全组工作原理。
- 如果从未创建过网络安全组,可以先完成一个快速教程,获取一些创建经验。
- 如果已熟悉网络安全组,需要对其进行管理,请参阅管理网络安全组。
- 如果有通信问题,需要对网络安全组进行故障排除,请参阅诊断虚拟机网络流量筛选器问题。
- 了解如何通过网络安全组流日志来分析出入具有关联网络安全组的资源的网络流量。