mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-03-12 21:22:57 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-services/vms/az-
This commit is contained in:
@@ -1,28 +1,28 @@
|
||||
# Az - Azure Network
|
||||
# Az - Azure 网络
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## 基本信息
|
||||
|
||||
Azure 提供 **虚拟网络 (VNet)**,允许用户在 Azure 云中创建 **隔离的** **网络**。在这些 VNet 中,可以安全地托管和管理虚拟机、应用程序、数据库等资源。Azure 中的网络支持云内通信(在 Azure 服务之间)以及与外部网络和互联网的连接。\
|
||||
此外,可以 **连接** VNet 与其他 VNet 以及本地网络。
|
||||
Azure 提供 **虚拟网络 (VNet)**,允许用户在 Azure 云中创建 **隔离的** **网络**。在这些 VNet 中,像虚拟机、应用程序、数据库等资源可以被安全地托管和管理。Azure 的网络既支持云内(Azure 服务之间)的通信,也支持与外部网络和互联网的连接。\
|
||||
此外,可以将 VNets 与其他 VNets 以及本地 (on-premise) 网络互联。
|
||||
|
||||
## 虚拟网络 (VNET) 和子网
|
||||
## 虚拟网络 (VNET) 与 子网
|
||||
|
||||
Azure 虚拟网络 (VNet) 是您在云中自己网络的表示,提供对您订阅的 Azure 环境的 **逻辑隔离**。VNet 允许您在 Azure 中配置和管理虚拟专用网络 (VPN),托管虚拟机 (VM)、数据库和应用服务等资源。它们提供 **对网络设置的完全控制**,包括 IP 地址范围、子网创建、路由表和网络网关。
|
||||
Azure 虚拟网络 (VNet) 是你在云端网络的表示形式,为你的订阅专属的 Azure 环境提供 **逻辑隔离**。VNet 允许你在 Azure 中配置和管理虚拟私有网络 (VPN),承载诸如 虚拟机 (VMs)、数据库和应用服务 等资源。它们提供对网络设置的 **完全控制**,包括 IP 地址范围、子网创建、路由表和网络网关。
|
||||
|
||||
**子网** 是 VNet 内的细分,由特定的 **IP 地址范围** 定义。通过将 VNet 划分为多个子网,您可以根据网络架构组织和保护资源。\
|
||||
**子网** 是 VNet 内的划分单元,由特定的 **IP 地址范围** 定义。通过将 VNet 划分为多个子网,可以根据你的网络架构来组织和保护资源。\
|
||||
默认情况下,同一 Azure 虚拟网络 (VNet) 内的所有子网 **可以相互通信**,没有任何限制。
|
||||
|
||||
**示例:**
|
||||
**Example:**
|
||||
|
||||
- `MyVNet` 的 IP 地址范围为 10.0.0.0/16。
|
||||
- **子网-1:** 10.0.0.0/24 用于 Web 服务器。
|
||||
- **子网-2:** 10.0.1.0/24 用于数据库服务器。
|
||||
- **Subnet-1:** 10.0.0.0/24 用于 web 服务器。
|
||||
- **Subnet-2:** 10.0.1.0/24 用于 数据库 服务器。
|
||||
|
||||
### 枚举
|
||||
|
||||
要列出 Azure 账户中的所有 VNet 和子网,可以使用 Azure 命令行界面 (CLI)。以下是步骤:
|
||||
要列出 Azure 帐户中的所有 VNet 和子网,你可以使用 Azure Command-Line Interface (CLI)。以下是步骤:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
@@ -49,14 +49,14 @@ Select-Object Name, AddressPrefix
|
||||
|
||||
## 网络安全组 (NSG)
|
||||
|
||||
一个 **网络安全组 (NSG)** 过滤 Azure 虚拟网络 (VNet) 内 Azure 资源的网络流量。它包含一组 **安全规则**,可以指示 **哪些端口可以用于入站和出站流量**,通过源端口、源 IP、目标端口,并且可以分配优先级(优先级数字越低,优先级越高)。
|
||||
一个 **网络安全组 (NSG)** 用于过滤位于 Azure Virtual Network (VNet) 内的 Azure 资源的进出网络流量。它包含一组 **安全规则**,可以基于源端口、源 IP、目标端口 指定 **应为入站和出站流量打开哪些端口**,并且可以为规则分配优先级(优先级数字越小,优先级越高)。
|
||||
|
||||
NSG 可以与 **子网和 NIC 关联。**
|
||||
NSGs 可以关联到 **子网和 NICs。**
|
||||
|
||||
**规则示例:**
|
||||
|
||||
- 一个允许来自任何源的 HTTP 流量(端口 80)到您的 Web 服务器的入站规则。
|
||||
- 一个仅允许 SQL 流量(端口 1433)到特定目标 IP 地址范围的出站规则。
|
||||
- 一条入站规则,允许来自任意来源的 HTTP 流量(端口 80)到你的 Web 服务器。
|
||||
- 一条出站规则,仅允许到特定目标 IP 地址范围的 SQL 流量(端口 1433)。
|
||||
|
||||
### 枚举
|
||||
|
||||
@@ -71,7 +71,7 @@ az network nsg show --name <nsg-name>
|
||||
az network nsg rule list --nsg-name <NSGName> --resource-group <ResourceGroupName> --query "[].{name:name, priority:priority, direction:direction, access:access, protocol:protocol, sourceAddressPrefix:sourceAddressPrefix, destinationAddressPrefix:destinationAddressPrefix, sourcePortRange:sourcePortRange, destinationPortRange:destinationPortRange}" -o table
|
||||
|
||||
# Get NICs and subnets using this NSG
|
||||
az network nsg show --name MyLowCostVM-nsg --resource-group Resource_Group_1 --query "{subnets: subnets, networkInterfaces: networkInterfaces}"
|
||||
az network nsg show --name <NSGName> --resource-group <ResourceGroupName> --query "{subnets: subnets, networkInterfaces: networkInterfaces}"
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
@@ -81,32 +81,35 @@ Get-AzNetworkSecurityGroup | Select-Object Name, Location
|
||||
Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName>
|
||||
|
||||
# Get NSG rules
|
||||
(Get-AzNetworkSecurityGroup -ResourceGroupName <NSGName> -Name <ResourceGroupName>).SecurityRules
|
||||
Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName> |
|
||||
Select-Object -ExpandProperty SecurityRules |
|
||||
Select-Object Name, Priority, Direction, Access, Protocol, SourceAddressPrefix, DestinationAddressPrefix, SourcePortRange, DestinationPortRange
|
||||
|
||||
# Get NICs and subnets using this NSG
|
||||
(Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName>).Subnets
|
||||
(Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName>).NetworkInterfaces
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
## Azure Firewall
|
||||
|
||||
Azure Firewall 是 Azure 中的 **托管网络安全服务**,通过检查和控制流量来保护云资源。它是一个 **有状态防火墙**,根据第 3 层到第 7 层的规则过滤流量,支持 **在 Azure 内部**(东西向流量)和 **与外部网络之间**(南北向流量)的通信。部署在 **虚拟网络 (VNet) 级别**,为 VNet 中的所有子网提供集中保护。Azure Firewall 自动扩展以应对流量需求,并确保高可用性,无需手动设置。
|
||||
Azure Firewall 是一个 **托管的、有状态的 firewall**,用于过滤流量 (L3–L7) 的 east-west 和 north-south 流向。部署在 **VNet level**,它集中对所有子网进行检查并 auto-scales 以提高可用性。
|
||||
|
||||
它提供三种 SKU——**基本版**、**标准版**和 **高级版**,每种版本都针对特定客户需求进行了定制:
|
||||
Available SKUs: **Basic**, **Standard**, and **Premium**:
|
||||
|
||||
| Criteria/Feature | Option 1 | Option 2 | Option 3 |
|
||||
| 指标/功能 | 选项 1 | 选项 2 | 选项 3 |
|
||||
| ------------------------------ | ------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------- |
|
||||
| **推荐使用案例** | 需求有限的小型/中型企业 (SMBs) | 一般企业使用,第 3 层到第 7 层过滤 | 高度敏感的环境(例如,支付处理) |
|
||||
| **性能** | 高达 250 Mbps 吞吐量 | 高达 30 Gbps 吞吐量 | 高达 100 Gbps 吞吐量 |
|
||||
| **威胁情报** | 仅警报 | 警报和阻止(恶意 IP/域名) | 警报和阻止(高级威胁情报) |
|
||||
| **L3–L7 过滤** | 基本过滤 | 跨协议的有状态过滤 | 具有高级检查的有状态过滤 |
|
||||
| **高级威胁保护** | 不可用 | 基于威胁情报的过滤 | 包括入侵检测和防御系统 (IDPS) |
|
||||
| **TLS 检查** | 不可用 | 不可用 | 支持入站/出站 TLS 终止 |
|
||||
| **可用性** | 固定后端 (2 个虚拟机) | 自动扩展 | 自动扩展 |
|
||||
| **管理简易性** | 基本控制 | 通过防火墙管理器进行管理 | 通过防火墙管理器进行管理 |
|
||||
| **推荐使用场景** | 需求有限的小/中型企业 (SMBs) | 通用企业使用,Layer 3–7 过滤 | 高度敏感环境(例如支付处理) |
|
||||
| **性能** | 最高 250 Mbps 吞吐量 | 最高 30 Gbps 吞吐量 | 最高 100 Gbps 吞吐量 |
|
||||
| **威胁情报** | 仅告警 | 告警并阻断(恶意 IP/域名) | 告警并阻断(高级威胁情报) |
|
||||
| **L3–L7 过滤** | 基本过滤 | 跨协议的有状态过滤 | 具备高级检测的有状态过滤 |
|
||||
| **高级威胁防护** | 不可用 | 基于威胁情报的过滤 | 包括 Intrusion Detection and Prevention System (IDPS) |
|
||||
| **TLS 检查** | 不可用 | 不可用 | 支持入站/出站 TLS 终止 |
|
||||
| **可用性** | 固定后端(2 VMs) | 自动扩展 | 自动扩展 |
|
||||
| **易管理性** | 基础控制 | 通过 Firewall Manager 管理 | 通过 Firewall Manager 管理 |
|
||||
|
||||
### Enumeration
|
||||
### 枚举
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
@@ -143,9 +146,14 @@ Get-AzFirewall
|
||||
|
||||
## Azure 路由表
|
||||
|
||||
Azure **路由表** 用于控制子网内网络流量的路由。它们定义了规则,指定数据包应如何转发,转发目标可以是 Azure 资源、互联网或特定的下一跳,如虚拟设备或 Azure 防火墙。您可以将路由表与 **子网** 关联,所有在该子网内的资源将遵循表中的路由。
|
||||
Azure **Route Tables (UDR)** 允许通过定义目标前缀(例如 `10.0.0.0/16` 或 `0.0.0.0/0`)和下一跳(Virtual Network, Internet, Virtual Network Gateway, or Virtual Appliance)来覆盖默认路由。
|
||||
|
||||
**示例:** 如果一个子网托管需要通过网络虚拟设备 (NVA) 进行检查的出站流量的资源,您可以在路由表中创建一个 **路由**,将所有流量(例如,`0.0.0.0/0`)重定向到 NVA 的私有 IP 地址作为下一跳。
|
||||
> 路由在子网级别应用;该子网中的所有 VMs 都遵循该表。
|
||||
|
||||
**示例:**
|
||||
|
||||
- 对于面向互联网的流量,使用默认 `0.0.0.0/0` 并将下一跳设置为 **Internet**。
|
||||
- 要检查出站流量,可将 `0.0.0.0/0` 路由到 Network Virtual Appliance (NVA) 的 IP。
|
||||
|
||||
### **枚举**
|
||||
|
||||
@@ -155,8 +163,11 @@ Azure **路由表** 用于控制子网内网络流量的路由。它们定义了
|
||||
# List Route Tables
|
||||
az network route-table list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table
|
||||
|
||||
# List routes for a table
|
||||
az network route-table route list --route-table-name <RouteTableName> --resource-group <ResourceGroupName> --query "[].{name:name, addressPrefix:addressPrefix, nextHopType:nextHopType, nextHopIpAddress:nextHopIpAddress}" -o table
|
||||
# List routes for a table (summary)
|
||||
az network route-table route list --resource-group <ResourceGroupName> --route-table-name <RouteTableName> --query "[].{name:name, addressPrefix:addressPrefix, nextHopType:nextHopType, nextHopIpAddress:nextHopIpAddress}" -o table
|
||||
|
||||
# List routes for a table (full)
|
||||
az network route-table route list --resource-group <ResourceGroupName> --route-table-name <RouteTableName>
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
@@ -172,18 +183,18 @@ Get-AzRouteTable
|
||||
|
||||
## Azure Private Link
|
||||
|
||||
Azure Private Link 是 Azure 中的一项服务,**通过确保您的 Azure 虚拟网络 (VNet) 与服务之间的流量完全在 Microsoft 的 Azure 主干网络内传输,从而实现对 Azure 服务的私有访问**。它有效地将服务引入您的 VNet。此设置通过不将数据暴露于公共互联网来增强安全性。
|
||||
Azure Private Link 是 Azure 的一项服务,**为 Azure 服务启用私有访问**,通过确保**你的 Azure virtual network (VNet) 与该服务之间的流量完全在 Microsoft's Azure backbone network 内部传输**。它实际上将服务引入到你的 VNet 中。该设置通过不将数据暴露到公共互联网来增强安全性。
|
||||
|
||||
Private Link 可以与各种 Azure 服务一起使用,如 Azure Storage、Azure SQL Database 和通过 Private Link 共享的自定义服务。它提供了一种安全的方式,从您自己的 VNet 或甚至不同的 Azure 订阅中使用服务。
|
||||
Private Link 可与多种 Azure 服务配合使用,例如 Azure Storage、Azure SQL Database,以及通过 Private Link 共享的自定义服务。它为在你自己的 VNet 内或甚至来自不同 Azure 订阅中使用这些服务提供了一种安全的方式。
|
||||
|
||||
> [!CAUTION]
|
||||
> NSG 不适用于私有端点,这清楚地意味着将 NSG 与包含 Private Link 的子网关联将没有效果。
|
||||
> NSGs 不适用于 private endpoints,这意味着将 NSG 关联到包含 Private Link 的子网不会产生任何效果。
|
||||
|
||||
**示例:**
|
||||
|
||||
考虑一个场景,您有一个 **希望从您的 VNet 安全访问的 Azure SQL Database**。通常,这可能涉及穿越公共互联网。使用 Private Link,您可以在您的 VNet 中创建一个 **私有端点**,直接连接到 Azure SQL Database 服务。此端点使数据库看起来像是您自己 VNet 的一部分,可以通过私有 IP 地址访问,从而确保安全和私密的访问。
|
||||
设想一种场景:你有一个 **Azure SQL Database,想从你的 VNet 安全访问**。通常这可能需要经过公共互联网。使用 Private Link,你可以在你的 VNet 中创建一个 **private endpoint**,直接连接到 Azure SQL Database 服务。该 endpoint 会使数据库看起来像是你自己的 VNet 的一部分,可通过 private IP address 访问,从而确保安全和私密的访问。
|
||||
|
||||
### **Enumeration**
|
||||
### **枚举**
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
@@ -206,15 +217,62 @@ Get-AzPrivateEndpoint | Select-Object Name, Location, ResourceGroupName, Private
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
## Azure 服务端点
|
||||
### DNS OverDoS via service Private DNS zone links
|
||||
|
||||
Azure 服务端点扩展了您的虚拟网络私有地址空间和 VNet 的身份,通过直接连接到 Azure 服务。通过启用服务端点,**您 VNet 中的资源可以安全地连接到 Azure 服务**,如 Azure Storage 和 Azure SQL Database,使用 Azure 的骨干网络。这确保了**从 VNet 到 Azure 服务的流量保持在 Azure 网络内**,提供了更安全和可靠的路径。
|
||||
当一个 VNet 对某个 **service Private DNS zone**(例如 `privatelink.blob.core.windows.net`)有 **Virtual Network Link** 时,Azure **forces hostname resolution** 将该服务类型的 Private Link 注册资源的主机名解析通过该 zone。如果该 zone 对于仍然通过其公共端点访问的资源**缺少必要的 `A` record**,DNS 解析会返回 **NXDOMAIN**,客户端永远到达不到公共 IP,从而在不接触资源本身的情况下造成**availability DoS**。
|
||||
|
||||
**Abuse flow (control-plane DoS):**
|
||||
|
||||
1. 获得允许创建 **Private Endpoints** 或修改 **Private DNS zone links** 的 RBAC 权限。
|
||||
2. 在另一个 VNet 中为相同服务类型创建一个 Private Endpoint(Azure 会自动创建该 service Private DNS zone 并将其链接到该 VNet)。
|
||||
3. 将该 **service Private DNS zone** 链接到受害者 VNet。
|
||||
4. 因为受害者 VNet 现在**被强制通过 Private DNS zone 解析**,而该 zone 中对目标资源不存在 `A` record,名称解析失败,工作负载无法到达(仍为公共的)端点。该情况适用于任何支持 Private Link 的服务(storage, Key Vault, ACR, Cosmos DB, Function Apps, OpenAI 等)。
|
||||
|
||||
**Discovery at scale (Azure Resource Graph):**
|
||||
|
||||
- VNETs linked to the blob Private DNS zone (forced resolution for PL-registered blob endpoints):
|
||||
```kusto
|
||||
resources
|
||||
| where type == "microsoft.network/privatednszones/virtualnetworklinks"
|
||||
| extend
|
||||
zone = tostring(split(id, "/virtualNetworkLinks")[0]),
|
||||
vnetId = tostring(properties.virtualNetwork.id)
|
||||
| join kind=inner (
|
||||
resources
|
||||
| where type == "microsoft.network/privatednszones"
|
||||
| where name == "privatelink.blob.core.windows.net"
|
||||
| project zoneId = id
|
||||
) on $left.zone == $right.zoneId
|
||||
| project vnetId
|
||||
```
|
||||
- Storage accounts 可通过 public endpoint 访问,但 **没有** Private Endpoint connections (如果添加上面的链接可能会中断):
|
||||
```kusto
|
||||
Resources
|
||||
| where type == "microsoft.storage/storageaccounts"
|
||||
| extend publicNetworkAccess = properties.publicNetworkAccess
|
||||
| extend defaultAction = properties.networkAcls.defaultAction
|
||||
| extend vnetRules = properties.networkAcls.virtualNetworkRules
|
||||
| extend ipRules = properties.networkAcls.ipRules
|
||||
| extend privateEndpoints = properties.privateEndpointConnections
|
||||
| where publicNetworkAccess == "Enabled"
|
||||
| where defaultAction == "Deny"
|
||||
| where (isnull(privateEndpoints) or array_length(privateEndpoints) == 0)
|
||||
| extend allowedVnets = iif(isnull(vnetRules), 0, array_length(vnetRules))
|
||||
| extend allowedIps = iif(isnull(ipRules), 0, array_length(ipRules))
|
||||
| where allowedVnets > 0 or allowedIps > 0
|
||||
| project id, name, vnetRules, ipRules
|
||||
```
|
||||
## Azure Service Endpoints
|
||||
|
||||
Azure Service Endpoints 将你的虚拟网络的私有地址空间和 VNet 的标识通过直接连接扩展到 Azure 服务。通过启用 service endpoints,**你 VNet 中的资源可以安全地连接到 Azure services**,比如 Azure Storage 和 Azure SQL Database,通过 Azure 骨干网络。当与 Network Security Groups (NSGs) 结合以进行细粒度流量控制时,这一点尤其有用。
|
||||
|
||||
**示例:**
|
||||
|
||||
例如,**Azure Storage** 账户默认可以通过公共互联网访问。通过在您的 VNet 中启用 **Azure Storage 的服务端点**,您可以确保只有来自您 VNet 的流量可以访问存储账户。然后可以配置存储账户防火墙,仅接受来自您 VNet 的流量。
|
||||
- 如果在 VNET 中为 **Storage** Account 和 Service Endpoint **启用**,就可以在 storage account firewall 中**仅允许来自 VNET 的入站流量**,从而强制通过 **安全连接**,而无需为 storage service 开放公共 IP。
|
||||
|
||||
### **枚举**
|
||||
Service Endpoints **不需要私有 IP 地址**来为服务提供连接,而是依赖 Azure 骨干实现安全连通性。与 Private Links 相比,它们**更易于配置**,但**无法提供与 Private Links 相同级别的隔离和细粒度控制**。
|
||||
|
||||
### **Enumeration**
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
@@ -223,7 +281,10 @@ Azure 服务端点扩展了您的虚拟网络私有地址空间和 VNet 的身
|
||||
az network vnet list --query "[].{name:name, location:location, serviceEndpoints:serviceEndpoints}" -o table
|
||||
|
||||
# List Subnets with Service Endpoints
|
||||
az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, serviceEndpoints:serviceEndpoints}" -o table
|
||||
az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, serviceEndpoints:serviceEndpoints}"
|
||||
|
||||
# List Service Endpoints for a Subnet
|
||||
az network vnet subnet show --resource-group <ResourceGroupName> --vnet-name <VNetName> --name <SubnetName> --query "serviceEndpoints"
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
@@ -237,71 +298,85 @@ Get-AzVirtualNetwork
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### 服务端点与私有链接之间的区别
|
||||
### Differences Between Service Endpoints and Private Links
|
||||
|
||||
Microsoft 推荐在 [**docs**](https://learn.microsoft.com/en-us/azure/virtual-network/vnet-integration-for-azure-services#compare-private-endpoints-and-service-endpoints) 中使用私有链接:
|
||||
Microsoft recommends using Private Links in the [**docs**](https://learn.microsoft.com/en-us/azure/virtual-network/vnet-integration-for-azure-services#compare-private-endpoints-and-service-endpoints):
|
||||
|
||||
<figure><img src="../../../../images/image (25).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**服务端点:**
|
||||
**Service Endpoints:**
|
||||
|
||||
- 从您的 VNet 到 Azure 服务的流量通过 Microsoft Azure 骨干网络传输,绕过公共互联网。
|
||||
- 端点是与 Azure 服务的直接连接,并未为 VNet 内的服务提供私有 IP。
|
||||
- 除非您配置服务防火墙以阻止此类流量,否则服务本身仍可通过其公共端点从 VNet 外部访问。
|
||||
- 从你的 VNet 到 Azure 服务的流量通过 Microsoft Azure 骨干网络传输,绕过公共互联网。
|
||||
- 该 endpoint 是与 Azure 服务的直接连接,但不会为服务在 VNet 内提供私有 IP。
|
||||
- 除非你配置服务的防火墙阻止此类流量,否则该服务仍可通过其公共端点从 VNet 外部访问。
|
||||
- 子网与 Azure 服务之间是一对一的关系。
|
||||
- 比私有链接便宜。
|
||||
- 成本低于 Private Links。
|
||||
|
||||
**私有链接:**
|
||||
**Private Links:**
|
||||
|
||||
- 私有链接通过私有端点将 Azure 服务映射到您的 VNet,该私有端点是 VNet 内具有私有 IP 地址的网络接口。
|
||||
- 使用此私有 IP 地址访问 Azure 服务,使其看起来像是您网络的一部分。
|
||||
- 通过私有链接连接的服务只能从您的 VNet 或连接的网络访问;没有公共互联网访问服务。
|
||||
- 它为 Azure 服务或您在 Azure 中托管的自有服务提供安全连接,以及与他人共享的服务的连接。
|
||||
- 它通过 VNet 中的私有端点提供更细粒度的访问控制,而不是通过服务端点在子网级别提供更广泛的访问控制。
|
||||
- Private Link 通过 private endpoint 将 Azure 服务映射到你的 VNet,private endpoint 是在 VNet 内具有私有 IP 地址的网络接口。
|
||||
- 通过该私有 IP 访问 Azure 服务,使其看起来像是你网络的一部分。
|
||||
- 通过 Private Link 连接的服务只能从你的 VNet 或已连接的网络访问;该服务无法通过公共互联网访问。
|
||||
- 它实现了与 Azure 服务或你在 Azure 上托管的自有服务的安全连接,以及与他人共享的服务的连接。
|
||||
- 它通过在 VNet 中的 private endpoint 提供更细粒度的访问控制,而不是像 Service Endpoints 那样在子网级别提供更宽泛的访问控制。
|
||||
|
||||
总之,虽然服务端点和私有链接都提供安全的 Azure 服务连接,**私有链接通过确保服务私密访问而不暴露于公共互联网,提供更高水平的隔离和安全性**。另一方面,服务端点在一般情况下更易于设置,适用于需要简单、安全访问 Azure 服务而不需要 VNet 中私有 IP 的情况。
|
||||
In summary, while both Service Endpoints and Private Links provide secure connectivity to Azure services, **Private Links offer a higher level of isolation and security by ensuring that services are accessed privately without exposing them to the public internet**. Service Endpoints, on the other hand, are easier to set up for general cases where simple, secure access to Azure services is required without the need for a private IP in the VNet.
|
||||
|
||||
## Azure Front Door (AFD) 和 AFD WAF
|
||||
## Azure Front Door (AFD) & AFD WAF
|
||||
|
||||
**Azure Front Door** 是一个可扩展且安全的入口点,用于 **快速交付** 您的全球 web 应用程序。它 **结合** 了全球 **负载均衡、站点加速、SSL 卸载和 Web 应用防火墙 (WAF)** 功能于一体。Azure Front Door 提供基于 **离用户最近的边缘位置** 的智能路由,确保最佳性能和可靠性。此外,它还提供基于 URL 的路由、多站点托管、会话亲和性和应用层安全性。
|
||||
**Azure Front Door** 是一个可扩展且安全的入口,用于全局 web 应用的快速交付。它**结合**了诸如 **application acceleration、SSL offloading、和 application layer security(通过 Web Application Firewall - WAF)** 等多种服务。它基于全球的 edge POP (Point of Presence) 节点,将你的应用更接近用户。
|
||||
|
||||
**Azure Front Door WAF** 旨在 **保护 web 应用程序免受基于 web 的攻击**,而无需修改后端代码。它包括自定义规则和管理规则集,以防范 SQL 注入、跨站脚本和其他常见攻击等威胁。
|
||||
> Azure Front Door provides a globally distributed network of edge locations to **route and accelerate** incoming traffic to your web applications (in Azure or elsewhere), improve performance, and enhance security.
|
||||
|
||||
**示例:**
|
||||
**Example:**
|
||||
|
||||
想象一下,您有一个全球分布的应用程序,用户遍布世界各地。您可以使用 Azure Front Door **将用户请求路由到最近的区域数据中心** 托管您的应用程序,从而减少延迟,改善用户体验,并 **利用 WAF 功能保护其免受 web 攻击**。如果某个特定区域发生停机,Azure Front Door 可以自动将流量重新路由到下一个最佳位置,确保高可用性。
|
||||
- 对于面向全球用户的电商平台,**Azure Front Door 可以在边缘节点缓存静态内容** 并提供 **SSL offloading**,从而减少延迟并提升响应速度。此外,它提供 **WAF** 来保护你的应用免受常见的网页漏洞(如 SQL injection 或 XSS)的攻击。
|
||||
|
||||
### 枚举
|
||||
Azure Front Door 还通过基于健康探测和延迟将流量路由到最近的可用后端来提供 **smart load balancing**,以确保一致的性能和可用性。通过集成 **WAF**,它有助于防护常见的 web 威胁。
|
||||
|
||||
### **Enumeration**
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
```bash
|
||||
# List Azure Front Door Instances
|
||||
# List Azure Front Door profiles
|
||||
az afd profile list --query "[].{name:name, location:location, resourceGroup:resourceGroup}" -o table
|
||||
|
||||
# List AFD endpoints
|
||||
az afd endpoint list --profile-name <ProfileName> --resource-group <ResourceGroupName> --query "[].{name:name, hostName:hostName, state:resourceState}" -o table
|
||||
|
||||
# Classic Azure Front Door (v1) profiles
|
||||
az network front-door list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table
|
||||
|
||||
# List Front Door WAF Policies
|
||||
# Classic Azure Front Door WAF policies
|
||||
az network front-door waf-policy list --query "[].{name:name, resourceGroup:resourceGroup, location:location}" -o table
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="PowerShell" }}
|
||||
```bash
|
||||
# List Azure Front Door Instances
|
||||
# List Azure Front Door profiles
|
||||
Get-AzFrontDoorCdnProfile | Select-Object Name, Location, ResourceGroupName
|
||||
|
||||
# List AFD endpoints
|
||||
Get-AzFrontDoorCdnEndpoint -ProfileName <ProfileName> -ResourceGroupName <ResourceGroupName> | Select-Object Name, HostName, ResourceState
|
||||
|
||||
# Classic Azure Front Door (v1) profiles
|
||||
Get-AzFrontDoor
|
||||
|
||||
# List Front Door WAF Policies
|
||||
# Classic Azure Front Door WAF policies
|
||||
Get-AzFrontDoorWafPolicy -Name <policyName> -ResourceGroupName <resourceGroupName>
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
## Azure Application Gateway 和 Azure Application Gateway WAF
|
||||
## Azure Application Gateway and Azure Application Gateway WAF
|
||||
|
||||
Azure Application Gateway 是一个 **网络流量负载均衡器**,使您能够管理对 **网络** 应用程序的流量。它在应用交付控制器 (ADC) 中提供 **第 7 层负载均衡、SSL 终止和网络应用防火墙 (WAF) 功能**。主要功能包括基于 URL 的路由、基于 cookie 的会话亲和性和安全套接字层 (SSL) 卸载,这些对于需要复杂负载均衡能力的应用程序至关重要,例如全球路由和基于路径的路由。
|
||||
Azure Application Gateway 是一种 **Web 流量负载均衡器**,使你能够管理流向你的 **Web** 应用程序的流量。它在 Application Delivery Controller (ADC) 作为服务中提供 **Layer 7 负载均衡、SSL 终止和 Web 应用防火墙 (WAF) 功能**。主要功能包括基于 URL 的路由、基于 cookie 的会话亲和性,以及 secure sockets layer (SSL) 卸载,这些对于需要复杂负载均衡能力(例如全局路由和基于路径的路由)的应用非常关键。
|
||||
|
||||
**示例:**
|
||||
|
||||
考虑一个场景,您有一个电子商务网站,其中包含多个子域以支持不同功能,例如用户账户和支付处理。Azure Application Gateway 可以 **根据 URL 路径路由流量到适当的网络服务器**。例如,流量到 `example.com/accounts` 可以被定向到用户账户服务,而流量到 `example.com/pay` 可以被定向到支付处理服务。\
|
||||
并且 **使用 WAF 功能保护您的网站免受攻击。**
|
||||
设想一个场景:你有一个电子商务网站,包含多个子域以承担不同功能,例如用户账户和支付处理。Azure Application Gateway 可以 **根据 URL 路径将流量路由到相应的 Web 服务器**。例如,指向 `example.com/accounts` 的流量可以被导向用户账户服务,而指向 `example.com/pay` 的流量可以被导向支付处理服务。\
|
||||
并**利用 WAF 功能保护你的网站免受攻击。**
|
||||
|
||||
### **枚举**
|
||||
|
||||
@@ -320,20 +395,20 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
## Azure Hub, Spoke & VNet Peering
|
||||
## VNet Peering & HUB and Spoke 拓扑
|
||||
|
||||
**VNet Peering** 是 Azure 中的一项网络功能,**允许不同的虚拟网络 (VNets) 直接无缝连接**。通过 VNet 对等连接,一个 VNet 中的资源可以使用私有 IP 地址与另一个 VNet 中的资源进行通信,**就像它们在同一网络中一样**。\
|
||||
**VNet 对等连接还可以与本地网络一起使用**,通过设置站点到站点的 VPN 或 Azure ExpressRoute。
|
||||
### VNet Peering
|
||||
|
||||
**Azure Hub 和 Spoke** 是在 Azure 中用于管理和组织网络流量的网络拓扑。**“中心”是一个控制和路由不同“辐射”的流量的中心点**。中心通常包含共享服务,如网络虚拟设备 (NVA)、Azure VPN 网关、Azure 防火墙或 Azure Bastion。**“辐射”是承载工作负载并通过 VNet 对等连接到中心的 VNets**,使它们能够利用中心内的共享服务。该模型促进了清晰的网络布局,通过集中多个 VNet 中的公共服务来减少复杂性。
|
||||
**VNet Peering** 是 Azure 的一项功能,允许不同的 Virtual Networks (VNets) 直接且无缝地相互连接。通过 VNet peering,某个 VNet 中的资源可以使用私有 IP 地址与另一个 VNet 中的资源通信,仿佛它们处于同一网络。\
|
||||
**VNet Peering** 也可以与本地网络配合使用,通过建立 site-to-site VPN 或 Azure ExpressRoute。
|
||||
|
||||
> [!CAUTION] > **在 Azure 中,VNET 对等连接是非传递的**,这意味着如果辐射 1 连接到辐射 2,辐射 2 连接到辐射 3,则辐射 1 不能直接与辐射 3 通信。
|
||||
**Azure Hub and Spoke** 是一种网络架构,利用 VNet peering 创建一个中心的 **Hub VNet**,并连接到多个 **Spoke VNets**。Hub 通常包含共享服务(例如 防火墙、DNS 或 Active Directory),而 Spoke 承载应用工作负载。该设计简化了管理,通过集中控制增强安全性,并减少冗余。
|
||||
|
||||
**示例:**
|
||||
|
||||
想象一个公司有独立的部门,如销售、HR 和开发,**每个部门都有自己的 VNet(辐射)**。这些 VNets **需要访问共享资源**,如中央数据库、防火墙和互联网网关,这些资源都位于**另一个 VNet(中心)**中。通过使用 Hub 和 Spoke 模型,每个部门可以**通过中心 VNet 安全地连接到共享资源,而不将这些资源暴露于公共互联网**或创建具有众多连接的复杂网络结构。
|
||||
一个拥有多个部门(Finance、HR、IT)的大型企业可以创建一个带有共享服务(如防火墙和 DNS 服务器)的 **Hub VNet**。每个部门可以拥有自己的 **Spoke VNet**,并通过 peering 连接到 Hub。这样各部门就可以安全地通信并使用共享服务,而无需将其资源暴露到公共互联网。
|
||||
|
||||
### Enumeration
|
||||
### **Enumeration**
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
@@ -341,8 +416,8 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
|
||||
# List all VNets in your subscription
|
||||
az network vnet list --query "[].{name:name, location:location, addressSpace:addressSpace}" -o table
|
||||
|
||||
# List VNet peering connections for a given VNet
|
||||
az network vnet peering list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, peeringState:peeringState, remoteVnetId:remoteVnetId}" -o table
|
||||
# List VNet Peerings
|
||||
az network vnet peering list --resource-group <ResourceGroupName> --vnet-name <VNetName> --query "[].{name:name, remoteVnetId:remoteVirtualNetwork.id, allowForwardedTraffic:allowForwardedTraffic, allowGatewayTransit:allowGatewayTransit}"
|
||||
|
||||
# List Shared Resources (e.g., Azure Firewall) in the Hub
|
||||
az network firewall list --query "[].{name:name, location:location, resourceGroup:resourceGroup}" -o table
|
||||
@@ -353,8 +428,8 @@ az network firewall list --query "[].{name:name, location:location, resourceGrou
|
||||
# List all VNets in your subscription
|
||||
Get-AzVirtualNetwork
|
||||
|
||||
# List VNet peering connections for a given VNet
|
||||
(Get-AzVirtualNetwork -ResourceGroupName <ResourceGroupName> -Name <VNetName>).VirtualNetworkPeerings
|
||||
# List VNet Peerings
|
||||
Get-AzVirtualNetworkPeering -ResourceGroupName <ResourceGroupName> -VirtualNetworkName <VNetName>
|
||||
|
||||
# List Shared Resources (e.g., Azure Firewall) in the Hub
|
||||
Get-AzFirewall
|
||||
@@ -362,15 +437,15 @@ Get-AzFirewall
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
## Site-to-Site VPN
|
||||
## 站点到站点 VPN
|
||||
|
||||
在 Azure 中,Site-to-Site VPN 允许您 **将本地网络连接到 Azure 虚拟网络 (VNet)**,使 Azure 中的资源(如虚拟机)看起来就像在您的本地网络上。此连接通过 **VPN 网关加密两个网络之间的流量** 来建立。
|
||||
在 Azure 中,**站点到站点 VPN** 建立了一条安全且**持久的连接,从你的本地网络到你的 Azure Virtual Network (VNet)**,使得 Azure 内的资源(例如 VMs)看起来仿佛在你的本地网络上。该连接通过一个**对两网络间流量进行加密的 VPN gateway**来建立。
|
||||
|
||||
**示例:**
|
||||
|
||||
一家总部位于纽约的企业拥有一个本地数据中心,需要安全地连接到其在 Azure 中托管虚拟化工作负载的 VNet。通过设置 **Site-to-Site VPN,公司可以确保本地服务器与 Azure 虚拟机之间的加密连接**,使得资源可以在两个环境中安全访问,就像它们在同一本地网络中一样。
|
||||
一家总部位于纽约的企业,其本地数据中心需要与托管虚拟化工作负载的 Azure VNet 建立安全连接。通过设置一个 **站点到站点 VPN,公司可以确保本地服务器与 Azure VMs 之间的连接被加密**,从而让两端的资源像在同一局域网内一样被安全访问。
|
||||
|
||||
### **Enumeration**
|
||||
### **枚举**
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
@@ -395,13 +470,13 @@ Get-AzVirtualNetworkGatewayConnection -ResourceGroupName <ResourceGroupName>
|
||||
|
||||
## Azure ExpressRoute
|
||||
|
||||
Azure ExpressRoute 是一项服务,提供 **私有、专用、高速连接,连接您的本地基础设施和 Azure 数据中心**。此连接通过连接提供商建立,绕过公共互联网,提供比典型互联网连接更高的可靠性、更快的速度、更低的延迟和更高的安全性。
|
||||
Azure ExpressRoute 是一项服务,提供**在本地基础设施与 Azure 数据中心之间的私有、专用、高速连接**。该连接通过连接提供商建立,绕过公共互联网,较典型的互联网连接提供更高的可靠性、更快的速度、更低的延迟和更高的安全性。
|
||||
|
||||
**示例:**
|
||||
|
||||
一家跨国公司由于数据量大和高吞吐量的需求,需要 **与其 Azure 服务保持一致和可靠的连接**。该公司选择 Azure ExpressRoute 直接将其本地数据中心连接到 Azure,促进大规模数据传输,例如每日备份和实时数据分析,同时增强隐私和速度。
|
||||
一家跨国公司因数据量大且需要高吞吐量,要求与其**Azure 服务之间保持一致且可靠的连接**。该公司选择 Azure ExpressRoute 将其本地数据中心直接连接到 Azure,以便进行大规模数据传输,例如每日备份和实时数据分析,同时提高隐私性和传输速度。
|
||||
|
||||
### **Enumeration**
|
||||
### **枚举**
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
@@ -418,4 +493,10 @@ Get-AzExpressRouteCircuit
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
## 参考资料
|
||||
|
||||
- [DNS OverDoS: Are Private Endpoints Too Private?](https://unit42.paloaltonetworks.com/dos-attacks-and-azure-private-endpoint/)
|
||||
- [Azure Private Endpoint DNS configuration](https://learn.microsoft.com/en-us/azure/private-link/private-endpoint-dns)
|
||||
- [Private DNS fallback to internet](https://learn.microsoft.com/en-us/azure/dns/private-dns-fallback)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user