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

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

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

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

在本節中,您會建立包含兩個 IPv4 子網路的自訂模式虛擬私有雲網路。

主控台

  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. 點選導覽選單中的「Networking」(網路)

    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. 點選導覽選單中的「Networking」(網路)

    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」部分,指定下列設定參數:

    • 網路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 連線) 對話方塊。

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