将本地网络连接到 Azure 虚拟网络以创建混合网络时,必须能够控制对 Azure 网络资源的访问,这是整体安全计划的重要部分。
可以使用 Azure 防火墙通过规则来定义允许的和拒绝的网络流量,以便控制混合网络中的网络访问。
在本文中,将创建三个虚拟网络:
- VNet-Hub:防火墙在此虚拟网络中。
- VNet-Spoke:分支虚拟网络代表 Azure 中的工作负载。
- VNet-Onprem:本地虚拟网络代表本地网络。 在实际部署中,可以使用虚拟专用网络 (VPN) 连接或 Azure ExpressRoute 连接来连接到它。 为简单起见,本文使用 VPN 网关连接,并使用 Azure 中的某个虚拟网络来代表本地网络。
如果要使用 Azure 门户来完成本文中的过程,请参阅使用 Azure 门户在混合网络中部署和配置 Azure 防火墙。
注意
本文使用经典 Azure 防火墙规则来管理防火墙。 首选方法是使用 Azure 防火墙管理器策略。 若要使用 Azure 防火墙管理器策略完成此过程,请查看教程:使用 Azure 门户在混合网络中部署和配置 Azure 防火墙和策略。
先决条件
混合网络使用中心和分支型网络体系结构模型在 Azure 虚拟网络与本地网络之间路由流量。 中心辐射型网络体系结构具有以下要求:
将 VNet-Hub 与 VNet-Spoke 建立对等互连时,请设置“使用此虚拟网络的网关或路由服务器”。 在中心辐射型网络体系结构中,网关传递允许辐射虚拟网络共享中心虚拟网络中的 VPN 网关,而不是在每个辐射虚拟网络中部署 VPN 网关。
此外,通往网关连接的虚拟网络或本地网络的路由会通过网关传输自动传播到对等互连的虚拟网络的路由表。 有关详细信息,请参阅针对虚拟网络对等互连配置 VPN 网关传输。
将 VNet-Spoke 与 VNet-Hub 对等互连时,请设置“使用远程虚拟网络的网关或路由服务器”。 如果设置了“使用远程虚拟网络的网关或路由服务器”,并且在远程对等互连上也设置了“使用此虚拟网络的网关或路由服务器”,则辐射型虚拟网络会使用远程虚拟网络的网关来传递流量。
若要通过中心防火墙路由分支子网流量,则可使用一个用户定义的路由 (UDR) 指向禁用了“虚拟网关路由传播”选项的防火墙。 禁用此选项可防止路由分发到分支子网,因此学习的路由不能与 UDR 冲突。 如果要保持 虚拟网络网关路由传播 处于启用状态,请确保定义指向防火墙的特定路由,以覆盖通过边界网关协议 (BGP) 从本地环境发布的路由。
请在中心网关子网上配置一个指向防火墙 IP 地址的 UDR,将其作为通向辐射网络的下一跃点。 无需在 Azure 防火墙子网中创建 UDR,因为它会从 BGP 探测路由。
本文后面的创建路由部分将介绍如何创建这些路由。
Azure 防火墙必须具有直接的 Internet 连接。 如果你的 AzureFirewallSubnet 子网通过 BGP 学习到一条通往本地网络的默认路由,则必须使用 0.0.0.0/0 UDR 覆盖该路由,并将 NextHopType 的值设置为 Internet,以保持与 Internet 的直接连接。
注意
可以将 Azure 防火墙配置为支持强制隧道。 有关详细信息,请参阅 Azure 防火墙强制隧道。
即使 UDR 将 Azure 防火墙指定为默认网关,在直接对等互连的虚拟网络之间传输的流量仍会直接路由。 若要在此方案中将子网到子网流量发送到防火墙,UDR 必须在这两个子网上显式地包含目标子网网络前缀。
如果没有 Azure 订阅,请在开始前创建一个试用版订阅。
创建防火墙中心虚拟网络
首先,创建用于包含资源的资源组:
- 登录 Azure 门户。
- 在 Azure 门户主页上,选择“资源组”>,然后选择“创建”。
- 对于订阅,请选择你的订阅。
- 对于 资源组,请输入 RG-fw-hybrid-test。
- 在区域中,选择一个区域。 以后创建的所有资源必须位于同一区域。
- 选择“查看 + 创建” 。
- 选择“创建”。
现在创建虚拟网络。
注意
AzureFirewallSubnet 子网的大小为 /26。 有关子网大小的详细信息,请参阅 Azure 防火墙常见问题解答。
- 在 Azure 门户主页上,选择“创建资源”。
- 在搜索框中输入“虚拟网络”。
- 选择“虚拟网络”,然后选择“创建”。
- 对于资源组,请选择RG-fw-hybrid-test。
- 对于“虚拟网络名称”,输入 VNet-hub。
- 对于“区域”,选择之前使用的区域。
- 选择下一步。
- 在“安全性”选项卡上,选择“下一步”。
- 对于“IPv4 地址空间”,删除默认地址,然后输入 10.5.0.0/16。
- 删除“子网”下的默认子网。
- 选择“添加子网”。
- 在“添加子网”页上,为“子网模板”选择“Azure 防火墙”。
- 选择添加。
为网关创建第二个子网:
- 选择“添加子网”。
- 对于“子网模板”,请选择“虚拟网络网关”。
- 对于“起始地址”,接受默认值 10.5.1.0。
- 对于“子网大小”,接受默认值 /27。
- 选择添加。
- 选择审阅 + 创建。
- 选择“创建”。
创建分支虚拟网络
- 在 Azure 门户主页上,选择“创建资源”。
- 在搜索框中输入“虚拟网络”。
- 选择“虚拟网络”,然后选择“创建”。
- 对于资源组,请选择RG-fw-hybrid-test。
- 在名称中,输入VNet-Spoke。
- 对于“区域”,选择之前使用的区域。
- 选择下一步。
- 在“安全性”选项卡上,选择“下一步”。
- 对于“IPv4 地址空间”,删除默认地址,然后输入 10.6.0.0/16。
- 删除“子网”下的默认子网。
- 选择“添加子网”。
- 在“名称”中,输入 SN-Workload。
- 对于“起始地址”,接受默认值 10.6.0.0。
- 对于“子网大小”,接受默认值 /24。
- 选择添加。
- 选择审阅 + 创建。
- 选择“创建”。
创建本地虚拟网络
- 在 Azure 门户主页上,选择“创建资源”。
- 在搜索框中输入“虚拟网络”。
- 选择“虚拟网络”,然后选择“创建”。
- 对于资源组,请选择RG-fw-hybrid-test。
- 对于“名称”,输入 VNet-Onprem。
- 对于“区域”,选择之前使用的区域。
- 选择下一步。
- 在“安全性”选项卡上,选择“下一步”。
- 对于“IPv4 地址空间”,删除默认地址,然后输入 192.168.0.0/16。
- 删除“子网”下的默认子网。
- 选择“添加子网”。
- 对于“名称”,输入 SN-Corp。
- 对于“起始地址”,接受默认值 192.168.0.0。
- 对于“子网大小”,接受默认值 /24。
- 选择添加。
现在,为网关创建第二个子网:
- 选择“添加子网”。
- 对于“子网模板”,请选择“虚拟网络网关”。
- 对于“起始地址”,接受默认值 192.168.1.0。
- 对于“子网大小”,接受默认值 /27。
- 选择添加。
- 选择审阅 + 创建。
- 选择“创建”。
配置和部署防火墙
将防火墙部署到防火墙中心虚拟网络中:
在 Azure 门户主页上,选择“创建资源”。
在搜索框中输入防火墙。
选择防火墙,然后选择创建。
在“创建防火墙”页上,使用下表配置防火墙:
设置 值 订阅 选择订阅。 资源组 输入 RG-fw-hybrid-test。 Name 输入 AzFW01。 区域 选择之前使用的区域。 防火墙 SKU 选择“标准”。 防火墙管理 选择“使用防火墙规则(经典)来管理此防火墙”。 选择虚拟网络 选择“使用现有>VNet-Hub”。 公共 IP 地址 选择新建>fw-pip。 选择审阅 + 创建。
查看摘要,然后选择“创建”以创建防火墙。
部署防火墙需要几分钟时间。
部署完成后,转到 RG-fw-hybrid-test 资源组,然后选择 AzFW01 防火墙。
记下专用 IP 地址。 稍后在创建默认路由时需要用到它。
配置网络规则
首先,添加一个网络规则以允许 Web 流量:
- 在“AzFW01”页上,选择“规则(经典)”。
- 选择“网络规则集合”选项卡。
- 选择“添加网络规则集合”。
- 对于“名称”,输入 RCNet01。
- 在Priority中,输入100。
- 对于规则集合操作,请选择允许。
- 在“规则 IP 地址”下,为“名称”输入 AllowWeb。
- 对于Protocol,请选择TCP。
- 对于源类型,请选择“IP 地址”。
- 对于“源”,输入 192.168.0.0/24。
- 对于“目标类型”,请选择“IP 地址” 。
- 对于“目标地址”,输入 10.6.0.0/16。
- 对于“目标端口”,输入 80。
创建并连接 VPN 网关
通过 VPN 网关连接中心和本地虚拟网络。
为中心虚拟网络创建 VPN 网关
为中心虚拟网络创建 VPN 网关。 网络到网络配置需要基于路由的 VPN 类型。 创建 VPN 网关通常需要 45 分钟或更长的时间,具体取决于所选的 SKU。
- 在 Azure 门户主页上,选择“创建资源”。
- 在搜索框中,输入虚拟网络网关。
- 选择“虚拟网络网关”,然后选择“创建”。
- 对于“名称”,输入 GW-hub。
- 对于“区域”,请选择前面使用的同一区域。
- 对于“网关类型”,请选择“VPN”。
- 对于“VPN 类型”,请选择“基于路由”。
- 对于 SKU,请选择 Basic。
- 对于“虚拟网络”,选择“VNet-Hub”。
- 对于“公共 IP 地址”,选择“新建”,然后输入 VNet-Hub-GW-pip 作为名称。
- 对于启用主动-主动模式选项,选择禁用。
- 接受剩余的默认值,然后选择“查看 + 创建”。
- 查看配置,然后选择“创建”。
为本地虚拟网络创建 VPN 网关
为本地虚拟网络创建 VPN 网关。 网络到网络配置需要基于路由的 VPN 类型。 创建 VPN 网关通常需要 45 分钟或更长的时间,具体取决于所选的 SKU。
- 在 Azure 门户主页上,选择“创建资源”。
- 在搜索框中,输入虚拟网络网关。
- 选择“虚拟网络网关”,然后选择“创建”。
- 对于“名称”,输入 GW-Onprem。
- 对于“区域”,请选择前面使用的同一区域。
- 对于“网关类型”,请选择“VPN”。
- 对于“VPN 类型”,请选择“基于路由”。
- 对于 SKU,请选择 Basic。
- 对于“虚拟网络”,请选择“VNet-Onprem”。
- 对于“公共 IP 地址”,请选择“新建”,然后输入 VNet-Onprem-GW-pip 作为名称。
- 对于启用主动-主动模式选项,选择禁用。
- 接受剩余的默认值,然后选择“查看 + 创建”。
- 查看配置,然后选择“创建”。
创建 VPN 连接
现在,可在中心与本地网关之间创建 VPN 连接。
以下步骤将创建从中心虚拟网络到本地虚拟网络的连接。 这些示例显示了共享密钥,但可以对共享密钥使用自己的值。 共享密钥必须与两个连接匹配,这一点非常重要。 创建连接可能需要简短的一段时间才能完成。
- 打开“RG-fw-hybrid-test”资源组并选择“GW-hub”网关。
- 在左侧栏中选择“连接”。
- 选择添加。
- 输入 Hub-to-Onprem 作为连接名称。
- 对于“连接类型”,选择“VNet 到 VNet”。
- 选择下一步。
- 对于“第一个虚拟网络网关”,选择“GW-hub”。
- 对于“第二个虚拟网络网关”,选择“GW-Onprem”。
- 对于“共享密钥(PSK)”,输入 AzureA1b2C3。
- 选择“查看 + 创建” 。
- 选择“创建”。
创建本地到中心之间的虚拟网络连接。 下面的步骤类似于之前的步骤,但这次是创建从 VNet-Onprem 到 VNet-Hub 的连接。 确保共享密钥匹配。 几分钟后即可建立连接。
- 打开“RG-fw-hybrid-test”资源组并选择“GW-Onprem”网关。
- 在左侧栏中选择连接。
- 选择添加。
- 输入 Onprem-to-Hub 作为连接名称。
- 对于连接类型,请选择VNet 到 VNet。
- 选择“下一步: 设置”。
- 对于“第一个虚拟网络网关”,选择“GW-Onprem”。
- 对于“第二个虚拟网络网关”,选择“GW-hub”。
- 对于“共享密钥(PSK)”,输入 AzureA1b2C3。
- 选择“查看 + 创建” 。
- 选择“创建”。
验证连接
大约五分钟后,这两个连接的状态应显示为“已连接”。
将中心和分支虚拟网络对等互连
现在,将中心和分支虚拟网络对等互连:
打开“RG-fw-hybrid-test”资源组并选择“VNet-Hub”虚拟网络。
在左栏中,选择对等互连。
选择添加。
在此虚拟网络下:
设置名称 设置 对等互连链接名称 输入 HubtoSpoke。 到远程虚拟网络的流量 选择允许。 从远程虚拟网络转发的流量 选择允许。 虚拟网络网关 选择使用此虚拟网络的网关。 在“远程虚拟网络”下:
设置名称 值 对等互连链接名称 输入 SpoketoHub。 虚拟网络部署模型 选择“资源管理器”。 订阅 选择订阅。 虚拟网络 选择“VNet-Spoke”。 到远程虚拟网络的流量 选择允许。 从远程虚拟网络转发的流量 选择允许。 虚拟网络网关 选择“使用远程虚拟网络的网关”。 选择添加。
以下屏幕截图显示了将中心和分支型虚拟网络对等互连时要使用的设置:
创建路由
在下面的步骤中,将创建这些路由:
- 通过防火墙 IP 地址从中心网关子网连接到分支子网的路由
- 通过防火墙 IP 地址从分支子网连接的默认路由
要创建路由,请执行以下操作:
- 在 Azure 门户主页上,选择“创建资源”。
- 在搜索框中输入路由表。
- 选择“路由表”,然后选择“创建”。
- 选择“RG-fw-hybrid-test”作为资源组。
- 对于“区域”,请选择以前使用的同一位置。
- 输入 UDR-Hub-Spoke 作为名称。
- 选择“查看 + 创建” 。
- 选择“创建”。
- 创建路由表后,请选择它以打开路由表页。
- 在左栏中选择“路由”。
- 选择添加。
- 输入 ToSpoke 作为路由名称。
- 对于“目标类型”,请选择“IP 地址”。
- 输入 10.6.0.0/16 作为目标 IP 地址/CIDR 范围。
- 选择“虚拟设备”作为下一跃点类型。
- 对于下一跳地址,请输入之前记下的防火墙私有 IP 地址。
- 选择添加。
现在,将路由关联到子网:
- 在“UDR-Hub-Spoke - 路由”页上,选择“子网”。
- 选择关联。
- 在“虚拟网络”下,选择“VNet-Hub”。
- 在子网下,选择GatewaySubnet。
- 选择“确定”。
从分支子网创建默认路由:
- 在 Azure 门户主页上,选择“创建资源”。
- 在搜索框中输入路由表。
- 选择“路由表”,然后选择“创建”。
- 选择“RG-fw-hybrid-test”作为资源组。
- 对于“区域”,请选择以前使用的同一位置。
- 输入 UDR-DG 作为名称。
- 对于传播网关路由,请选择否。
- 选择“查看 + 创建” 。
- 选择“创建”。
- 创建路由表后,请选择它以打开路由表页。
- 在左栏中选择“路由”。
- 选择添加。
- 输入 ToHub 作为路由名称。
- 对于“目标类型”,请选择“IP 地址”。
- 输入 0.0.0.0/0 作为目标 IP 地址/CIDR 范围。
- 选择“虚拟设备”作为下一跃点类型。
- 对于下一跳地址,请输入之前记下的防火墙私有 IP 地址。
- 选择添加。
将路由关联到子网:
- 在“UDR-DG - 路由”页上,选择“子网”。
- 选择关联。
- 在“虚拟网络”下,选择“VNet-Spoke”。
- 在子网下,选择SN-Workload。
- 选择“确定”。
创建虚拟机
创建分支工作负载与本地虚拟机,并将其放入相应的子网。
创建工作负荷虚拟机
在分支虚拟网络中创建运行 Nginx Web 服务器的虚拟机,并且没有公共 IP 地址:
- 在 Azure 门户主页上,选择“创建资源”。
- 在 “热门市场产品”下,选择 Ubuntu Server 22.04 LTS。
- 输入虚拟机的以下值:
- 资源组:选择“RG-fw-hybrid-test”。
- 虚拟机名称:输入 VM-Spoke-01。
- 区域:选择之前使用的同一区域。
- 映像:Ubuntu Server 22.04 LTS - x64 Gen2
- 大小:Standard_B2s
- 身份验证类型:SSH 公钥
- 用户名:azureuser
- SSH 公钥源:生成新密钥对
- 密钥对名称: VM-Spoke-01_key
- 对于“公共入站端口”,请选择“无”。
- 选择“下一步: 磁盘”。
- 接受默认设置,然后选择“下一步:网络”。
- 对于“虚拟网络”,选择“VNet-Spoke”。 子网为 SN-Workload。
- 对于“公共 IP”,请选择“无”。
- 选择“下一步: 管理”。
- 选择下一步:监视。
- 对于 启动诊断,请选择 禁用。
- 选择“查看 + 创建”,检查摘要页上的设置,然后选择“创建”。
- 在“ 生成新密钥对 ”对话框中,选择“ 下载私钥”并创建资源。 将密钥文件另存为 VM-Spoke-01_key.pem。
安装 Nginx
在 Azure 门户中,导航到 VM-Spoke-01 虚拟机。
在 “操作” 下,选择 “运行命令”>RunShellScript。
在 “运行命令脚本 ”窗格中,输入以下脚本:
sudo apt-get update && sudo apt-get install -y nginx && echo '<h1>'$(hostname)'</h1>' | sudo tee /var/www/html/index.html选择 运行。
等待命令完成。 输出显示虚拟机的主机名。
创建本地虚拟机
创建用于通过 Azure Bastion 连接的虚拟机。 在此处,可以通过防火墙连接到分支服务器。
- 在 Azure 门户主页上,选择“创建资源”。
- 在 “常用”下,选择 Ubuntu Server 22.04 LTS。
- 输入虚拟机的以下值:
- 资源组:选择“现有”,然后选择“RG-fw-hybrid-test”。
- 虚拟机名称:输入 VM-Onprem。
- 区域:选择之前使用的同一区域。
- 映像:Ubuntu Server 22.04 LTS - x64 Gen2
- 大小:Standard_B2s
- 身份验证类型:SSH 公钥
- 用户名:azureuser
- SSH 公钥源:生成新密钥对
- 密钥对名称: VM-Onprem_key
- 对于“公共入站端口”,请选择“无”。
- 选择下一步: 磁盘。
- 接受默认设置,然后选择“下一步:网络”。
- 对于虚拟网络,选择“VNet-Onprem”。 子网为 SN-Corp。
- 选择“下一步: 管理”。
- 选择下一步:监控。
- 对于 启动诊断,请选择 禁用。
- 选择“查看 + 创建”,检查摘要页上的设置,然后选择“创建”。
- 在“ 生成新密钥对 ”对话框中,选择“ 下载私钥”并创建资源。 将密钥文件另存为 VM-Onprem_key.pem。
注意
Azure 会为未分配公共 IP 地址的 VM 或位于内部基本 Azure 负载均衡器的后端池中的 VM 提供默认出站访问 IP。 默认出站访问 IP 机制会提供不可配置的出站 IP 地址。
发生以下事件之一时,将禁用默认出站访问 IP:
- 将公共 IP 地址分配给 VM。
- 虚拟机位于标准负载均衡器的后端池中,无论是否有出站规则。
- 向 VM 的子网分配了 Azure NAT 网关资源。
在灵活业务流程模式下通过使用虚拟机规模集创建的 VM 没有默认的出站访问权限。
有关 Azure 中的出站连接的详细信息,请参阅 Azure 中的默认出站访问权限和使用用于出站连接的源网络地址转换 (SNAT)。
部署 Azure Bastion
现在部署 Azure Bastion 以提供对虚拟机的安全访问。
在 Azure 门户菜单中,选择“创建资源”。
在搜索框中,键入 Bastion 并从结果中选择它。
选择“创建”。
在 “创建 Bastion ”页上,配置以下设置:
设置 值 Subscription 选择订阅 资源组 RG-fw-hybrid-test Name Hub-Bastion 区域 中国北部 3 层 开发人员 虚拟网络 VNet-Hub 子网 选择“管理子网配置” 在“ 子网 ”页中,选择“ + 子网”。
配置新子网:
- 名称: AzureBastionSubnet (此名称是必需的)
- 子网地址范围: 10.5.3.0/26
选择“ 保存 ”并关闭“子网”页。
选择审阅 + 创建。
验证通过后,选择“ 创建”。
测试防火墙
记下 VM-spoke-01 虚拟机的专用 IP 地址。
在 Azure 门户中,使用 Azure Bastion 连接到 VM-Onprem 虚拟机:
- 导航到 VM-Onprem 虚拟机
- 选择连接>通过 Bastion 连接
- 从本地文件选择“使用 SSH 私钥”
- 对于 用户名,请键入 azureuser
- 浏览到 并选择 VM-Onprem_key.pem 文件
- 选择“连接”
在 VM-Onprem 上的 SSH 会话中,浏览到分支 Web 服务器:
curl http://<VM-Spoke-01 private IP>VM-Spoke-01 Web 服务器应以状态码响应。
接下来,将防火墙网络规则集合的操作更改为“拒绝”,以验证防火墙规则是否按预期工作:
- 选择“AzFW01”防火墙。
- 选择“规则(经典)”。
- 选择“网络规则集合”选项卡,然后选择“RCNet01”规则集合。
- 对于 操作,请选择 拒绝。
- 选择“保存”。
关闭任何现有的远程访问连接。 再次运行测试以测试更改的规则。 这次它们都应该失败。
清理资源
可以保留防火墙资源以便进行进一步测试。 如果不再需要这些资源,请删除 RG-fw-hybrid-test 资源组以删除所有与防火墙相关的资源。