通常在我們在 GCP 提到的防火牆,都是指最常用的 Firewall-Rules 防火牆規則 ,只能應用在給定的 Project 和指定的 VPC 上,其可以讓資源管理者保護其 VPC 內服務的資料,不會收到未經授權的訪問或者意外流出資料,從而提高安全性和隱私性。對應其他的雲端服務是 :

  • Amazon Web Services (AWS) : Security Groups
  • Microsoft Azure : Network security groups

GCP 防火牆其實是一個蠻大的類別,產品全稱是 Cloud Next Generation Firewall 簡稱 Cloud NGFW,而 Firewall-Rules 隸屬於其中的 Cloud NGFW Essentials 。如果想要把 Firewall-Rules 應用到 Organization 下的其他 Project 或者其他 VPC,則要使用 Firewall-Policies,本篇重點介紹 Firewall-Rules。


Cloud NGFW,其中分成:

  • Cloud NGFW Essentials
  • Cloud NGFW Enterprise
  • Cloud NGFW Standard

一開始 project 啟用,通常都有預設 VPC 叫 default,同時也有預設的 Firewall-Rules ,實際從 GCP Web UI 看到的畫面如下:

接下來可以點進去看這幾個 Firewall-Rules 設定來學習一下基本觀念 :

建議不要直接使用預設的 Firewall-Rules,應該可以明顯發現有 IP Range 是 0.0.0.0/0 的設定,這會允許任何連線,十分不安全。若是 VM 有使用這個防火牆,可以到 VM 內的 /var/log/auth.log 查詢登入,應該可以發現很多不明的 IP 嘗試連線…

default-allow-icmp:用於 ping

default-allow-rdp:用於 Windows 遠端桌面協議的流量

Firewall Rules

Firewall-Rule 是定義在 VPC 上的,這時 VPC 就有了在網路級別定義的分散式防火牆功能,可對環境中進行流量輸入與輸出的管控。對於每個 Rule 還可以啟用 Log ,監控每一條有符合的封包,以後要做 Troubleshooting 的時候可以協助做故障排除。除此之外,也能查看和分析網路流量,檢測可能的安全風險或攻擊,並及時採取相應的措施。

本身 Firewall Rules 是不計費的,但打開 Firewall Rules Logging 會產生額外花費。

Firewall-Rule 有幾個比較重要的觀念在這裡提出來:

Actions & Directions

Actions 就分成

AllowDeny ,代表允許或拒絕這兩種動作

而 Directions 分成

傳入(Ingress)傳出(Engress),代表流量方向

對於 Ingress 和 Egress 的定義,簡言之:

  • 進到 VM 的流量都叫做 Ingress
  • 而離開 VM 的流量叫做 Egress

Ingress 和 Egress 的主體都是 VM。

  • 不管是從外網 Internet 傳進來 VM 的流量,或者從內網其他資源傳進 VM 的流量,對於該 VM 都叫 Ingress。

  • 若是說從這台 VM 傳送流量出去外網 Internet ,或者是傳送流量到內網的其他主機,對於該 VM 都叫 Egress。

Targets & Filters

Targets 可以想成是代表要把 firewall 用在哪個服務上,每個 Firewall-Rule 都必須要設定 Target,其類型有分成:

如果選擇 All instances in the network,就不用在指定寫 Target-Tag 的名稱了,因為是直接幫我們把 Firewall-Rule 生效在該 vpc 內所有的 VM 上。

接下來是關於 filters 的設定,這裏會設置更細部的 IP-Range、協議、port 或 service-account。前面指定的不同的 Directions 就會對應不同的 filter :

  • Ingress 是對應 Source filters ,它可以是單個 filter 或有多個 filters,但是多個的話只能是:

    • IP-Range + source tags
    • IP-Range + source service-account

    特別注意 Source filters 不能同時使用 tag 和 service-account

  • Egress 是對應 Destination filter,從 Web UI 上只有看到 IP-Range 能使用

Priority

Priority 的值設定範圍是 0–65535 ,數字越小優先度越高,也就是0是最高優先級,然後65535是最小最後的。若 priority 一樣, Deny rules take precedence over Allow Rule,已禁止為優先。每個 VPC 網路都有兩個雖然我們看不到但是為預設的規則的 IPv4 防火牆規則,如果 IPv6 啟用,該 VPC 還會再多有兩個隱含的 IPv6 防火牆規則,隱含規則為:

  • Allow all egress
  • Deny all ingress

默認情況下阻止所有流量進入,允許所有流量出去,隱含的規則無法刪除。

通常 GCP 防火牆有使用的話,主機本身就不要再設定自己的防火牆,萬一網路不通有問題的時候,會比較難 Troubleshooting。

Best Practice

  • 實施 Least-Privilege Principles 原則
  • 考慮先使用 hierarchical firewall policy rules 來禁止流量
  • 考慮使用 service account 來允許進入 VM
  • 根據 IP-Range 創建的 rules,盡量不要太多個
  • 考慮使用只允許來自 LB 的流量進入 VM
  • 從 source IP 範圍中刪除 0.0.0.0/0
  • 新增 130.211.0.0/2235.191.0.0/16,為 health-check 網路。

通常如果發生了 Firewall 阻擋了請求,發生的情況會是根本無法收到任何 response,會導致 timeout 。所以如果有收到例如說 403 Forbidden 的 response ,這可能就和 Firewall 阻擋沒有關係了。


Practice

Compute Engine 上創建了一個 SQL Server 2017 instance 來測試新版本的功能,如何連接到此 instance ?

會需要在 GCP Console 中設置 :

  • Windows 的 username 和 password,這是連接 Windows VM 必要的步驟
  • 然後要檢查 Firewall-Rule 有沒有開啟 3389 port,因為 RDP(遠程桌面協議)使用的是 3389 port,而不是 22 port, SSH 才是使用 22 port。

default VPC 是有預設 Firewall-Rule 開啟 port 3389 的

Practice

Project 內有 5 個 VPC,每個都有自己的 CIDR 範圍和防火牆規則。如果要列出 network-3 的 firewall rules ,以下哪個正確?

  • A. gcloud compute firewall-rules list –filter network=network-3 (O)
  • B. gcloud vpc network=network-3 –list firewall-rules
  • C. gcloud compute network=network-3 –list firewall-rules
  • D. gcloud vpc firewall-rules list –filter network=network-3

此題非常陷阱,也看得出來 Google 在這邊的分類還蠻混亂的。從文件上來看, firewall-rules 屬於 Cloud NGFW(Next Generation Firewall)看起來是個新的類別,但順著看下去是文件名稱是 VPC firewall rules,乍看之下是屬於 VPC 類別,而且從 console UI 上我們也是從 VPC Network 類別下找到 Firewall 的。但是從 gcloud cli 正確寫法是:gcloud compute firewall-rules,這種只能特別記憶一下了…

Practice

已經設置了 firewall rule ,且允許入站 permit inbound 連接到名為 my-vm 的 instance。若希望只有在沒有其他規則拒絕該流量時才應用此規則,即: apply this rule only if there is not another rule that would deny that traffic ,那應該給這個 rule 設置什麼優先級?

  • A. 1000
  • B. 1
  • C. 65535 (O)
  • D. 0

C. 首先要知道 Priority 的值設定範圍是0–65535且數字越小優先度越高。故使用65535代表最低的優先級,即是這個 rule 最後才會應用,只有在沒有其他更高優先級的規則時才會使用這個規則。


參考資料