Share via


使用 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 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

注意

Azure 會針對未獲指派公用 IP 位址或位於內部基本 Azure 負載平衡器後端集區中的 VM,提供預設輸出存取 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

測試防火牆

現在請測試防火牆,以確認其運作符合預期。

  1. 請注意 Srv-Work 虛擬機器的私人 IP 位址:

    az vm list-ip-addresses \
    -g Test-FW-RG \
    -n Srv-Work
    
  2. 將遠端桌面連線到 Srv-Jump 虛擬機器,然後登入。 在這裡開啟對 Srv-Work 私人 IP 位址的遠端桌面連線並登入。

  3. SRV-Work 上開啟 PowerShell 視窗並執行下列命令:

    nslookup www.google.com
    nslookup www.microsoft.com
    

    這兩個命令都應該傳回答案,顯示您的 DNS 查詢正在通過防火牆。

  4. 執行下列命令:

    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

下一步