設定全域網路防火牆政策,以啟用輸入流量


在具有多個子網路的自訂虛擬私有雲 (VPC) 網路中,系統預設允許輸出流量,但會拒絕輸入流量。如要啟用輸入流量,並允許不同子網路中的 VM 執行個體彼此通訊,您可以在虛擬私有雲網路的 Cloud Next Generation Firewall 中建立全域網路防火牆政策,允許來自子網路特定 IP 位址範圍的輸入流量。

本教學課程說明如何設定全域網路防火牆政策,允許自訂虛擬私有雲網路中的 VM 子網路之間傳輸內部流量。

目標

本教學課程將說明如何完成下列工作:

  • 建立包含兩個子網路的自訂虛擬私有雲網路。
  • 在虛擬私有雲網路的不同子網路中,建立兩個沒有外部 IP 位址的 Linux VM 執行個體 (用戶端 VM 和伺服器 VM)。
  • 最佳做法是建立 Cloud Router 和 Cloud NAT 閘道,以便下載軟體套件。
  • 在伺服器 VM 上安裝 Apache 伺服器。
  • 建立全域網路防火牆政策,並加入下列規則:
    • 允許輸出流量傳送至任何目的地。
    • 啟用防火牆記錄。
    • 使用 Identity-Aware Proxy (IAP) 允許 SSH 連線至 VM。
    • 允許用戶端 VM 連線至執行 Apache 伺服器的伺服器 VM。
  • 測試連線。

下圖顯示在全域網路防火牆政策允許內部輸入流量後,自訂 VPC 網路子網路之間的流量流動情形。

全域網路防火牆政策,允許來自自訂虛擬私有雲網路中子網路的輸入流量。
全域網路防火牆政策,允許從自訂虛擬私有雲網路的子網路傳入流量 (按一下可放大)。

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. 為專案啟用 Compute Engine API
  7. 確認您具備 Compute 網路管理員 (roles/compute.networkAdmin) 身分與存取權管理角色。
  8. 如果您希望透過指令列操作,請先安裝 Google Cloud CLI。如需該工具的概念與安裝資訊,請參閱 gcloud CLI 總覽

    注意:如果您先前沒有執行過 Google Cloud CLI,請先執行 gcloud init,以初始化 gcloud CLI 目錄。

建立含子網路的自訂虛擬私有雲網路

在本節中,您會建立包含兩個 IPv4 子網路的自訂模式 VPC 網路。

主控台

  1. 在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 按一下「建立虛擬私有雲網路」

  3. 在「Name」(名稱) 中輸入 vpc-fw-rules

  4. 在「Description」(說明) 中輸入 VPC network for the firewall rules tutorial

  5. 在「子網路建立模式」部分,選取「自訂」

  6. 在「New subnet」(新子網路) 部分,指定子網路的以下設定參數:

    • Name (名稱):subnet-fw-rules-server
    • Region (區域):us-central1 (Iowa)
    • IPv4 範圍10.0.0.0/24
    • Private Google Access開啟
  7. 按一下 [完成]

  8. 按一下「Add subnet」(新增子網路),然後指定下列設定參數:

    • Name (名稱):subnet-fw-rules-client
    • Region (區域):us-central1 (Iowa)
    • IPv4 範圍192.168.10.0/24
    • Private Google Access開啟
  9. 按一下 [完成]

  10. 點選「建立」

gcloud

  1. 如要建立 VPC 網路,請執行下列指令:

    gcloud compute networks create vpc-fw-rules \
      --subnet-mode=custom \
      --description="VPC network for the firewall rules tutorial"
    
  2. 選擇性步驟:在「授權 Cloud Shell」對話方塊中,按一下「授權」

  3. 如要建立子網路,請執行下列指令:

    gcloud compute networks subnets create subnet-fw-rules-server \
      --network=vpc-fw-rules \
      --region=us-central1 \
      --range=10.0.0.0/24 \
      --enable-private-ip-google-access
    
  4. 如要建立另一個子網路,請執行下列指令:

    gcloud compute networks subnets create subnet-fw-rules-client \
      --network=vpc-fw-rules \
      --region=us-central1 \
      --range=192.168.10.0/24 \
      --enable-private-ip-google-access
    

根據預設,虛擬私有雲網路有兩項隱含 IPv4 規則:

  • 優先順序最低 (65535) 的 allow egress 規則,目的地為 0.0.0.0/0,可允許任何執行個體將流量傳送至任何目的地,但 Google Cloud封鎖的流量除外。
  • 優先順序最低 (65535) 的 deny 輸入規則,來源為 0.0.0.0/0,可封鎖傳入所有執行個體的連線,保護這些執行個體。

詳情請參閱隱含規則

建立用戶端和伺服器 VM

在本節中,您會在上一節建立的虛擬私有雲網路子網路中,建立兩個沒有外部 IP 位址的 Linux VM。

建立伺服器 VM

主控台

如要建立伺服器 VM,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。

    前往「建立執行個體」

  2. 在「機器設定」窗格中,執行下列操作:

    1. 在「Name」(名稱) 中輸入 vm-fw-rules-server
    2. 在「Region」(區域) 中選取 us-central1 (Iowa)
  3. 在導覽選單中,按一下「網路」

    1. 在「Network interfaces」(網路介面) 區段中,按一下 default,然後指定下列設定參數:
      • 網路vpc-fw-rules
      • 「Subnetwork」(子網路)subnet-fw-rules-server IPv4 (10.0.0.0/24)
      • 「外部 IPv4 位址」:選取「無」
    2. 按一下 [完成]
  4. 點選「建立」

gcloud

如要建立伺服器 VM,請執行下列指令:

gcloud compute instances create vm-fw-rules-server \
    --network=vpc-fw-rules \
    --zone=us-central1-a \
    --subnet=subnet-fw-rules-server \
    --stack-type=IPV4_ONLY \
    --no-address

建立用戶端 VM

主控台

如要建立用戶端 VM,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。

    前往「建立執行個體」

  2. 在「機器設定」窗格中,執行下列操作:

    1. 在「Name」(名稱) 中輸入 vm-fw-rules-client
    2. 在「Region」(區域) 中選取 us-central1 (Iowa)
  3. 在導覽選單中,按一下「網路」

    1. 在「Network interfaces」(網路介面) 區段中,按一下 default,然後指定下列設定參數:
      • 網路vpc-fw-rules
      • 「Subnetwork」(子網路)subnet-fw-rules-client IPv4 (192.168.10.0/24)
      • 「外部 IPv4 位址」:選取「無」
    2. 按一下 [完成]
  4. 點選「建立」

gcloud

如要建立用戶端 VM,請執行下列指令:

gcloud compute instances create vm-fw-rules-client \
    --network=vpc-fw-rules \
    --zone=us-central1-a \
    --subnet=subnet-fw-rules-client \
    --stack-type=IPV4_ONLY \
    --no-address

建立 Cloud Router 和 Cloud NAT 閘道

在上一節中,您建立了兩個沒有公開 IPv4 位址的 Linux VM。如要允許這些 VM 存取公用網際網路,請建立 Cloud Router 和 Cloud NAT 閘道。

主控台

  1. 前往 Google Cloud 控制台的「Cloud NAT」頁面。

    前往 Cloud NAT

  2. 按一下「開始使用」或「建立 Cloud NAT 閘道」

  3. 在「Gateway name」(閘道名稱) 輸入 gateway-fw-rules

  4. 在「NAT type」(NAT 類型) 中,選取「Public」(公開)

  5. 在「Select Cloud Router」(選取 Cloud Router) 部分,指定下列設定參數:

    • 網路vpc-fw-rules
    • 區域us-central1
    • Cloud Router建立新路由器
      1. 在「Name」(名稱) 中輸入 router-fw-rules
      2. 點選「建立」
  6. 點選「建立」

gcloud

  1. 如要建立 Cloud Router,請執行下列指令:

    gcloud compute routers create router-fw-rules \
      --network=vpc-fw-rules \
      --region=us-central1
    
  2. 如要建立 Cloud NAT 閘道,請執行下列指令:

    gcloud compute routers nats create gateway-fw-rules \
      --router=router-fw-rules \
      --region=us-central1 \
      --auto-allocate-nat-external-ips \
      --nat-all-subnet-ip-ranges
    

建立全域網路防火牆政策

在本節中,您將建立全域網路防火牆政策,並設定下列項目:

  • 目的地為 0.0.0.0./0 的輸出規則。
  • 記錄功能已啟用。您可以根據防火牆規則記錄,進一步稽核、驗證及分析防火牆規則的成效。

主控台

  1. 在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。

    前往「防火牆政策」頁面

  2. 按一下「建立防火牆政策」

  3. 在「設定政策」部分,於「政策名稱」輸入 fw-policy

  4. 在「部署範圍」部分,選取「全域」,然後點選「繼續」

  5. 如要為政策建立規則,請在「新增規則」部分中,按一下「新增規則」

    1. 在「Priority」(優先順序) 中輸入 65534
    2. 在「Direction of traffic」(流量方向) 中選取「Egress」(輸出)
    3. 針對「記錄」,選取「開啟」
    4. 在「目標」部分中,針對「目標類型」選取「網路中的所有執行個體」
    5. 在「Destination」(目的地) 區段中,在「IP ranges」(IP 範圍) 輸入 0.0.0.0/0
    6. 在「通訊協定和通訊埠」專區中選取「全部允許」
    7. 點選「建立」
  6. 按一下「繼續」

  7. 如要將虛擬私有雲網路與政策建立關聯,請在「將政策連結到虛擬私有雲網路」部分中,按一下「連結」

  8. 勾選 vpc-fw-rules 核取方塊,然後按一下「關聯」

  9. 按一下「繼續」

  10. 點選「建立」

gcloud

  1. 如要建立防火牆政策,請執行下列指令:

    gcloud compute network-firewall-policies create fw-policy \
        --global
    
  2. 如要建立允許流量前往所有目的地,並啟用記錄的防火牆規則,請執行下列指令:

    gcloud compute network-firewall-policies rules create 65534 \
        --firewall-policy=fw-policy \
        --direction=EGRESS \
        --action=ALLOW \
        --dest-ip-ranges=0.0.0.0/0 \
        --layer4-configs=all \
        --global-firewall-policy \
        --enable-logging
    
  3. 如要將防火牆政策與虛擬私有雲網路建立關聯,請執行下列指令:

    gcloud compute network-firewall-policies associations create \
        --firewall-policy=fw-policy \
        --network=vpc-fw-rules \
        --name=pol-association-fw-rules \
        --global-firewall-policy
    

新增 IAP 的防火牆規則

在上一節中,您建立了沒有外部 IP 位址的 Linux VM。在本節中,您將啟用 Identity-Aware Proxy (IAP),允許管理員存取沒有外部 IP 位址的 VM 執行個體。

如要允許 IAP 連線至您的 VM 執行個體,請根據以下條件建立防火牆規則:

  • 套用至所有您希望能透過 IAP 存取的 VM 執行個體。
  • 允許來自 IP 範圍「35.235.240.0/20」的輸入流量。這個範圍包含 IAP 用於 TCP 轉送的所有 IP 位址。

    如果是 IPv6 VM,請使用以下 IP 範圍:2600:2d00:1:7::/64

  • 允許連線至您希望透過 IAP TCP 轉送功能存取的所有通訊埠,例如適用於 SSH 的通訊埠「22」,及適用於 RDP 的通訊埠「3389」。

主控台

如要允許透過遠端桌面協定和安全殼層存取 vpc-fw-rules 網路中的所有 VM 執行個體,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。

    前往「防火牆政策」頁面

  2. 在「網路防火牆政策」部分,按一下 fw-policy

  3. 按一下「建立規則」

  4. 在「Priority」(優先順序) 中輸入 500

  5. 在「Direction of traffic」(流量方向) 中選取 [Ingress] (輸入)

  6. 針對「記錄」,選取「開啟」

  7. 在「目標」部分中,針對「目標類型」選取「網路中的所有執行個體」

  8. 在「來源」部分,於「IP 範圍」中輸入 35.235.240.0/20

  9. 在「Protocols and ports」(通訊協定和通訊埠) 部分,選取「Specified protocols and ports」(指定的通訊協定和通訊埠)

  10. 勾選「TCP」核取方塊,然後在「Ports」(通訊埠) 中輸入 223389 (以半形逗號分隔)。

  11. 點選「建立」

gcloud

如要允許透過 RDP 和 SSH 存取 vpc-fw-rules 網路中的所有 VM 執行個體,請執行下列指令:

gcloud compute network-firewall-policies rules create 500 \
    --firewall-policy=fw-policy \
    --direction=INGRESS \
    --action=ALLOW \
    --src-ip-ranges=35.235.240.0/20 \
    --global-firewall-policy \
    --layer4-configs tcp:22,tcp:3389 \
    --enable-logging

安裝 Apache 伺服器

在本節中,您會在伺服器 VM 上安裝 Apache 伺服器。

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. vm-fw-rules-server VM 的「連線」欄中,按一下「SSH」

  3. 在「SSH-in-browser」(直接透過瀏覽器進行 SSH 連線) 對話方塊中,按一下「Authorize」(授權),然後等待連線建立。

  4. 如要安裝 apache2 套件,請在命令提示字元中執行下列指令:

    sudo apt update && sudo apt -y install apache2
    

    安裝 Apache 之後,作業系統會自動啟動 Apache 伺服器。

  5. 如要確認 Apache 是否正在執行,請執行下列指令:

    sudo systemctl status apache2 --no-pager
    
  6. 如要覆寫 Apache 網路伺服器預設網頁,請執行下列指令:

    echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' | sudo tee /var/www/html/index.html
    
  7. 關閉「SSH-in-browser」(透過瀏覽器進行 SSH 連線) 對話方塊。

測試連線

在伺服器 VM 上安裝 Apache 伺服器後,請使用伺服器 VM 的內部 IP 位址,從用戶端 VM 連線至伺服器 VM。

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. vm-fw-rules-server VM 的「Internal IP」(內部 IP) 欄中,複製 VM 的內部 IP 位址。

  3. vm-fw-rules-client VM 的「連線」欄中,按一下「SSH」

  4. 在「SSH-in-browser」(直接透過瀏覽器進行 SSH 連線) 對話方塊中,按一下「Authorize」(授權),然後等待連線建立。

  5. 如要驗證連線,請執行下列指令:

    curl INTERNAL_IP -m 2
    

    INTERNAL_IP 替換為 vm-fw-rules-server VM 的 IP 位址。

    這是預期中的 Connection timed out 訊息,因為每個 VM 都會建立隱含的輸入防火牆規則,拒絕所有流量。如要允許流量,請在防火牆政策中新增輸入規則。

  6. 關閉「SSH-in-browser」(透過瀏覽器進行 SSH 連線) 對話方塊。

更新全域網路防火牆政策,允許內部流量

在本節中,您將更新全域網路防火牆政策,允許來自用戶端 VM 子網路的內部流量。

主控台

  1. 在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。

    前往「防火牆政策」頁面

  2. 在「網路防火牆政策」部分,按一下 fw-policy

  3. 按一下「建立規則」

  4. 在「Priority」(優先順序) 中輸入 501

  5. 在「Direction of traffic」(流量方向) 中選取 [Ingress] (輸入)

  6. 針對「記錄」,選取「開啟」

  7. 在「目標」部分中,針對「目標類型」選取「網路中的所有執行個體」

  8. 在「來源」部分,於「IP 範圍」中輸入 192.168.10.0/24

    請注意,IP 範圍 192.168.10.0/24 已指派給 subnet-fw-rules-client

  9. 在「目的地」部分,選取「IP 類型」為「IPv4」。在「IP ranges」(IP 範圍) 中,指定 10.0.0.0/24

    請注意,IP 範圍 10.0.0.0/24 已指派給 subnet-fw-rules-server

  10. 點選「建立」

gcloud

如要更新防火牆政策,請執行下列指令:

gcloud compute network-firewall-policies rules create 501 \
    --firewall-policy=fw-policy \
    --direction=INGRESS \
    --action=ALLOW \
    --src-ip-ranges=192.168.10.0/24 \
    --dest-ip-ranges=10.0.0.0/24 \
    --layer4-configs=all \
    --global-firewall-policy \
    --enable-logging

測試連線

建立防火牆政策後,請使用伺服器 VM 的內部 IP 位址,從用戶端 VM 連線至伺服器 VM。

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. vm-fw-rules-server VM 的「Internal IP」(內部 IP) 欄中,複製 VM 的內部 IP 位址。

  3. vm-fw-rules-client VM 的「連線」欄中,按一下「SSH」

  4. 在「SSH-in-browser」(直接透過瀏覽器進行 SSH 連線) 對話方塊中,按一下「Authorize」(授權),然後等待連線建立。

  5. 如要驗證連線,請執行下列指令:

    curl INTERNAL_IP -m 2
    

    INTERNAL_IP 替換為 vm-fw-rules-server VM 的 IP 位址。

    預期訊息為 <!doctype html><html><body><h1>Hello World!</h1></body></html>

  6. 關閉「SSH-in-browser」(透過瀏覽器進行 SSH 連線) 對話方塊。

如要查看防火牆記錄,請參閱「查看記錄」。

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。

在本節中,您將刪除在本教學課程中建立的資源。

刪除防火牆政策

主控台

  1. 在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。

    前往「防火牆政策」頁面

  2. 在「網路防火牆政策」部分,按一下 fw-policy 名稱。

  3. 按一下「關聯項目」分頁標籤。

  4. 勾選 vpc-fw-rules 核取方塊,然後按一下「移除關聯」

  5. 在「Remove a firewall policy association」(移除防火牆政策連結關係) 對話方塊中,按一下「Remove」(移除)

  6. 按一下「fw-policy」標題旁邊的「刪除」

  7. 在「刪除防火牆政策」對話方塊中,按一下「刪除」

    刪除政策後, Google Cloud 控制台會顯示「Firewall policies」(防火牆政策) 頁面。

gcloud

  1. 移除防火牆政策與 VPC 網路之間的關聯。

    gcloud compute network-firewall-policies associations delete \
      --name=pol-association-fw-rules \
      --firewall-policy=fw-policy \
      --global-firewall-policy
    

    如果您透過 Google Cloud 控制台設定防火牆政策與虛擬私有雲網路之間的關聯,請勿使用 gcloud CLI 指令移除關聯。如果您不記得建立關聯的方式,或執行指令時收到 The network firewall policy does not have an association with pol-association-fw-rules. 錯誤,請使用 Google Cloud 控制台移除關聯。

  2. 刪除防火牆政策。

    gcloud compute network-firewall-policies delete fw-policy \
        --global
    

刪除 VM

主控台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. 選取 vm-fw-rules-clientvm-fw-rules-server VM 的核取方塊。

  3. 點選「刪除」。

  4. 在「Delete 2 instances?」(要刪除 2 個執行個體嗎?) 對話方塊中,按一下「Delete」(刪除)

gcloud

如要刪除 vm-fw-rules-clientvm-fw-rules-server VM,請執行下列指令:

gcloud compute instances delete vm-fw-rules-client vm-fw-rules-server \
    --zone=us-central1-a

出現提示時,請按下 Y 鍵確認,然後按下 Enter 鍵。

刪除 Cloud NAT 閘道和 Cloud Router

主控台

  1. 前往 Google Cloud 控制台的「Cloud routers」頁面。

    前往 Cloud Router

  2. 勾選「router-fw-rules核取方塊。

  3. 點選「刪除」。

  4. 在「Delete router-fw-rules」(刪除路由器防火牆規則) 對話方塊中,按一下「Delete」(刪除)

刪除 Cloud Router 時,系統也會一併刪除相關聯的 Cloud NAT 閘道。

gcloud

如要刪除 router-fw-rules Cloud Router,請執行下列指令:

gcloud compute routers delete router-fw-rules \
    --region=us-central1

出現提示時,請按下 Y 鍵確認,然後按下 Enter 鍵。

刪除 Cloud Router 時,系統也會一併刪除相關聯的 Cloud NAT 閘道。

刪除虛擬私有雲網路及其子網路

主控台

  1. 在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 在「Name」(名稱) 欄中,按一下 vpc-fw-rules

  3. 按一下「刪除虛擬私有雲網路」

  4. 在「刪除網路」對話方塊中,按一下「刪除」

刪除 VPC 時,系統也會一併刪除子網路。

gcloud

  1. 如要刪除 vpc-fw-rules VPC 網路的子網路,請執行下列指令:

    gcloud compute networks subnets delete subnet-fw-rules-client subnet-fw-rules-server \
        --region=us-central1
    

    系統提示時,請按下 Y 鍵確認,然後按下 Enter 鍵。

  2. 如要刪除 vpc-fw-rules 虛擬私有雲網路,請執行下列指令:

    gcloud compute networks delete vpc-fw-rules
    

    出現提示時,請按下 Y 鍵確認,然後按下 Enter 鍵。