共用方式為


使用 Azure CLI 部署和設定 Azure 防火牆

控制輸出網路存取是整體網路安全性計畫的重要部分。 例如,您可能想要限制網站的存取權。 或者,您可能想要限制可存取的輸出 IP 位址和連接埠。

您可從 Azure 子網路控制輸出網路存取的方式之一是使用 Azure 防火牆。 您可以使用 Azure 防火牆來設定:

  • 會定義可從子網路存取的完整網域名稱 (FQDN) 的應用程式規則。 FQDN 也可以包含 SQL 執行個體
  • 網路規則,用以定義來源位址、通訊協定、目的地連接埠和目的地位址。

當您將網路流量路由傳送至防火牆作為子網路預設閘道時,網路流量會受限於已設定的防火牆規則。

在本文中,您會建立具有三個子網路的簡易單一 VNet,以便進行簡單部署。 針對生產部署,建議使用中樞與輪輻模型。 防火牆位於自己的 VNet 中。 工作負載伺服器位於相同區域中的對等互連 VNet,其中包含一個或多個子網路。

  • AzureFirewallSubnet - 防火牆位於此子網路。
  • Workload-SN - 工作負載伺服器位於此子網路。 此子網路的網路流量會通過防火牆。
  • AzureBastionSubnet - Azure Bastion 位於此子網路中,提供對工作負載伺服器的安全存取。

網路基礎結構的圖表。

在本文中,您將學會如何:

  • 設定測試網路環境
  • 部署防火牆
  • 建立預設路由
  • 設定應用程式規則以允許存取 www.microsoft.com
  • 設定允許存取外部 DNS 伺服器的網路規則
  • 測試防火牆

您可以依偏好使用 Azure 入口網站Azure PowerShell 來完成此程序。

如果您沒有 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 AzureBastionSubnet \
  --resource-group Test-FW-RG \
  --vnet-name Test-FW-VN   \
  --address-prefix 10.0.3.0/26

建立虛擬機

建立具有特定 DNS 伺服器 IP 位址,且沒有公用 IP 位址以測試 Srv-Work 的 NIC。

az network nic create \
    --resource-group Test-FW-RG \
    --name Srv-Work-NIC \
   --vnet-name Test-FW-VN \
   --subnet Workload-SN \
   --dns-servers <replace with External DNS ip #1> <replace with External DNS ip #2>

現在建立工作負載虛擬機器。 以下指令建立一個帶有 SSH 金鑰驗證的 Ubuntu Server 22.04 LTS 虛擬機,並安裝 Nginx。 當提示時,將產生的私鑰儲存到 .pem 檔案中,以便透過 Azure Bastion 連線時使用。

az vm create \
    --resource-group Test-FW-RG \
    --name Srv-Work \
    --location eastus \
    --image Ubuntu2204 \
    --nics Srv-Work-NIC \
    --admin-username azureuser \
    --generate-ssh-keys \
    --custom-data cloud-init.txt

建立 cloud-init.txt 包含以下內容的檔案以安裝 Nginx:

#cloud-config
package_upgrade: true
packages:
  - nginx
runcmd:
  - echo '<h1>'$(hostname)'</h1>' | sudo tee /var/www/html/index.html

注意

無論是未獲指派公用 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 --resource-group Test-FW-RG --firewall-name Test-FW01 --query "[?name=='FW-config'].privateIpAddress" --output tsv)"

請記下私人 IP 位址。 稍後當您建立預設路由時將使用到它。

部署 Azure Bastion

部署 Azure Bastion,安全連接到 Srv-Work 虛擬機,無需公共 IP 位址或跳線伺服器。

az network public-ip create \
    --resource-group Test-FW-RG \
    --name bastion-pip \
    --sku Standard \
    --location eastus
az network bastion create \
    --name Test-Bastion \
    --public-ip-address bastion-pip \
    --resource-group Test-FW-RG \
    --vnet-name Test-FW-VN \
    --location eastus \
    --sku Basic

注意

Azure Bastion 部署大約需要 10 分鐘完成。

建立預設路由

建立已停用 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 \
    --name Workload-SN \
    --resource-group Test-FW-RG \
    --vnet-name Test-FW-VN \
    --address-prefixes 10.0.2.0/24 \
    --route-table Firewall-rt-table

設定應用程式規則

應用程式規則允許輸出存取 www.microsoft.com

az network firewall application-rule create \
   --collection-name App-Coll01 \
   --firewall-name Test-FW01 \
   --name Allow-Microsoft \
   --protocols Http=80 Https=443 \
   --resource-group Test-FW-RG \
   --target-fqdns www.microsoft.com \
   --source-addresses 10.0.2.0/24 \
   --priority 200 \
   --action Allow

Azure 防火牆包含一組內建規則集合,適用於預設為允許的基礎結構 FQDN。 這些 FQDN 為平台所特有,無法用於其他用途。 如需詳細資訊,請參閱基礎結構 FQDN

設定網路規則

網路規則允許輸出存取您在連接埠 53 (DNS) 選擇的兩個公用 DNS IP 位址。

az network firewall network-rule create \
   --collection-name Net-Coll01 \
   --destination-addresses <replace with DNS ip #1> <replace with DNS ip #2> \
   --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 \
    --resource-group Test-FW-RG \
    --name Srv-Work
    
  2. 在 Azure 入口網站中,進入 Srv-Work 虛擬機,選擇 Connect>Connect via Bastion

  3. 請提供用戶名稱 azureuser ,並上傳你建立虛擬機時產生的私鑰 .pem 檔案。 選擇 連接 以開啟 SSH 會話。

  4. 在 SSH 會話中,執行以下指令來測試 DNS 解析:

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

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

  5. 執行以下指令來測試網頁存取:

    curl https://www.microsoft.com
    curl https://www.google.com
    

    www.microsoft.com請求應成功並回傳 HTML 內容,而www.google.com請求則應失敗或逾時。這顯示你的防火牆規則運作正常。

因此,現在您已確認防火牆規則正在運作:

  • 您可以使用設定的外部 DNS 伺服器來解析 DNS 名稱。
  • 您可以瀏覽至允許 FQDN 的防火牆規則,但不可瀏覽至任何其他的防火牆規則。

清除資源

您可以保留防火牆資源供下一個教學課程使用,若不再需要,則可刪除 Test-FW-RG 資源群組以刪除所有防火牆相關資源:

az group delete \
  --name Test-FW-RG

下一步