使用 Azure CLI 部署和設定 Azure 防火牆
控制輸出網路存取是整體網路安全性計畫的重要部分。 例如,您可能想要限制網站的存取權。 或者,您可能想要限制可存取的輸出 IP 位址和連接埠。
您可從 Azure 子網路控制輸出網路存取的方式之一是使用 Azure 防火牆。 您可以使用 Azure 防火牆來設定:
- 會定義可從子網路存取的完整網域名稱 (FQDN) 的應用程式規則。 FQDN 也可以包含 SQL 執行個體。
- 網路規則,用以定義來源位址、通訊協定、目的地連接埠和目的地位址。
當您將網路流量路由傳送至防火牆作為子網路預設閘道時,網路流量會受限於已設定的防火牆規則。
在本文中,您會建立具有三個子網路的簡易單一 VNet,以便進行簡單部署。 針對生產部署,建議使用中樞與輪輻模型。 防火牆位於自己的 VNet 中。 工作負載伺服器位於相同區域中的對等互連 VNet,其中包含一個或多個子網路。
- AzureFirewallSubnet - 防火牆位於此子網路。
- Workload-SN - 工作負載伺服器位於此子網路。 此子網路的網路流量會通過防火牆。
- Jump-SN - 跳板機位於此子網路。 跳板機具有公用 IP 位址,您可以使用遠端桌面與其連線。 接著,您可以從此處 (使用其他的遠端桌面) 連線到工作負載伺服器。
在本文中,您將學會如何:
- 設定測試網路環境
- 部署防火牆
- 建立預設路由
- 設定允許存取 www.google.com 的應用程式規則
- 設定允許存取外部 DNS 伺服器的網路規則
- 測試防火牆
您可以依偏好使用 Azure 入口網站或 Azure PowerShell 來完成此程序。
如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶。
必要條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
- 本文必須使用 Azure CLI 2.55.0 版或更新版本。 如果您是使用 Azure Cloud Shell,就已安裝最新版本。
設定網路
首先,請建立資源群組,以包含部署防火牆所需的資源。 接著建立 VNet、子網路,和測試伺服器。
建立資源群組
此資源群組包含了部署需要的所有資源。
az group create --name Test-FW-RG --location eastus
建立 VNet
此虛擬網路有三個子網路。
注意
AzureFirewallSubnet 子網路的大小是 /26。 如需有關子網路大小的詳細資訊,請參閱 Azure 防火牆的常見問題集。
az network vnet create \
--name Test-FW-VN \
--resource-group Test-FW-RG \
--location eastus \
--address-prefix 10.0.0.0/16 \
--subnet-name AzureFirewallSubnet \
--subnet-prefix 10.0.1.0/26
az network vnet subnet create \
--name Workload-SN \
--resource-group Test-FW-RG \
--vnet-name Test-FW-VN \
--address-prefix 10.0.2.0/24
az network vnet subnet create \
--name Jump-SN \
--resource-group Test-FW-RG \
--vnet-name Test-FW-VN \
--address-prefix 10.0.3.0/24
建立虛擬機器
現在建立跳板和工作負載虛擬機器,並將它們放在適當的子網路中。 出現提示時,請輸入虛擬機器的密碼。
建立 Srv-Jump 虛擬機器。
az vm create \
--resource-group Test-FW-RG \
--name Srv-Jump \
--location eastus \
--image win2016datacenter \
--vnet-name Test-FW-VN \
--subnet Jump-SN \
--admin-username azureadmin
az vm open-port --port 3389 --resource-group Test-FW-RG --name Srv-Jump
建立具有特定 DNS 伺服器 IP 位址,且沒有公用 IP 位址以測試 Srv-Work 的 NIC。
az network nic create \
-g Test-FW-RG \
-n Srv-Work-NIC \
--vnet-name Test-FW-VN \
--subnet Workload-SN \
--public-ip-address "" \
--dns-servers 209.244.0.3 209.244.0.4
現在建立工作負載虛擬機器。 出現提示時,請輸入虛擬機器的密碼。
az vm create \
--resource-group Test-FW-RG \
--name Srv-Work \
--location eastus \
--image win2016datacenter \
--nics Srv-Work-NIC \
--admin-username azureadmin
注意
無論是未獲指派公用 IP 位址的 VM,或位於內部基本 Azure 負載平衡器後端集區的 VM,Azure 都會為其提供預設輸出存取 IP。 預設輸出存取 IP 機制能提供無法自行設定的輸出 IP 位址。
發生下列其中一個事件時,會停用預設輸出存取 IP:
- 公用 IP 位址會指派給 VM。
- 無論有沒有輸出規則,都會將 VM 放在標準負載平衡器的後端集區中。
- Azure NAT 閘道資源會指派給 VM 的子網路。
您在彈性協調流程模式中使用虛擬機器擴展集建立的 VM 沒有預設輸出存取。
如需 Azure 中輸出連線的詳細資訊,請參閱 Azure 中的預設對外存取與針對輸出連線,使用來源網路位址轉譯 (SNAT)。
部署防火牆
現在將防火牆部署到虛擬網路中。
az network firewall create \
--name Test-FW01 \
--resource-group Test-FW-RG \
--location eastus
az network public-ip create \
--name fw-pip \
--resource-group Test-FW-RG \
--location eastus \
--allocation-method static \
--sku standard
az network firewall ip-config create \
--firewall-name Test-FW01 \
--name FW-config \
--public-ip-address fw-pip \
--resource-group Test-FW-RG \
--vnet-name Test-FW-VN
az network firewall update \
--name Test-FW01 \
--resource-group Test-FW-RG
az network public-ip show \
--name fw-pip \
--resource-group Test-FW-RG
fwprivaddr="$(az network firewall ip-config list -g Test-FW-RG -f Test-FW01 --query "[?name=='FW-config'].privateIpAddress" --output tsv)"
請記下私人 IP 位址。 稍後當您建立預設路由時將使用到它。
建立預設路由
建立已停用 BGP 路由傳播的路由表
az network route-table create \
--name Firewall-rt-table \
--resource-group Test-FW-RG \
--location eastus \
--disable-bgp-route-propagation true
建立路由。
az network route-table route create \
--resource-group Test-FW-RG \
--name DG-Route \
--route-table-name Firewall-rt-table \
--address-prefix 0.0.0.0/0 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address $fwprivaddr
將路由表與子網路建立關聯
az network vnet subnet update \
-n Workload-SN \
-g Test-FW-RG \
--vnet-name Test-FW-VN \
--address-prefixes 10.0.2.0/24 \
--route-table Firewall-rt-table
設定應用程式規則
此應用程式規則允許對 www.google.com 進行輸出存取。
az network firewall application-rule create \
--collection-name App-Coll01 \
--firewall-name Test-FW01 \
--name Allow-Google \
--protocols Http=80 Https=443 \
--resource-group Test-FW-RG \
--target-fqdns www.google.com \
--source-addresses 10.0.2.0/24 \
--priority 200 \
--action Allow
Azure 防火牆包含一組內建規則集合,適用於預設為允許的基礎結構 FQDN。 這些 FQDN 為平台所特有,無法用於其他用途。 如需詳細資訊,請參閱基礎結構 FQDN。
設定網路規則
此網路規則允許透過連接埠 53 (DNS),對兩個 IP 位址進行輸出存取。
az network firewall network-rule create \
--collection-name Net-Coll01 \
--destination-addresses 209.244.0.3 209.244.0.4 \
--destination-ports 53 \
--firewall-name Test-FW01 \
--name Allow-DNS \
--protocols UDP \
--resource-group Test-FW-RG \
--priority 200 \
--source-addresses 10.0.2.0/24 \
--action Allow
測試防火牆
現在請測試防火牆,以確認其運作符合預期。
請注意 Srv-Work 虛擬機器的私人 IP 位址:
az vm list-ip-addresses \ -g Test-FW-RG \ -n Srv-Work
將遠端桌面連線到 Srv-Jump 虛擬機器,然後登入。 在這裡開啟對 Srv-Work 私人 IP 位址的遠端桌面連線並登入。
在 SRV-Work 上開啟 PowerShell 視窗並執行下列命令:
nslookup www.google.com nslookup www.microsoft.com
這兩個命令都應該傳回答案,顯示您的 DNS 查詢正在通過防火牆。
執行下列命令:
Invoke-WebRequest -Uri https://www.google.com Invoke-WebRequest -Uri https://www.google.com Invoke-WebRequest -Uri https://www.microsoft.com Invoke-WebRequest -Uri https://www.microsoft.com
www.google.com
要求應該會成功,而www.microsoft.com
要求應該會失敗。 這代表您的防火牆規則會如預期執行。
因此,現在您已確認防火牆規則正在運作:
- 您可以使用設定的外部 DNS 伺服器來解析 DNS 名稱。
- 您可以瀏覽至允許 FQDN 的防火牆規則,但不可瀏覽至任何其他的防火牆規則。
清除資源
您可以保留防火牆資源供下一個教學課程使用,若不再需要,則可刪除 Test-FW-RG 資源群組以刪除所有防火牆相關資源:
az group delete \
-n Test-FW-RG