防火牆規則記錄

您可以根據防火牆規則記錄,進一步稽核、驗證及分析防火牆規則的成效。舉例來說,您可以判斷用來拒絕流量的防火牆規則是否正常運作。需要瞭解特定防火牆規則影響的連線數量時,這項功能也能派上用場。

您必須為需要記錄連線的每項防火牆規則,個別啟用防火牆規則記錄。無論規則的動作 (allowdeny) 或方向 (傳入或傳出) 為何,您都可以為任何防火牆規則啟用防火牆規則記錄功能。

防火牆規則記錄功能會記錄 Compute Engine 虛擬機器 (VM) 執行個體的往來流量。包括以 Compute Engine VM 為基礎建構的產品,例如 Google Kubernetes Engine (GKE) 叢集App Engine 彈性環境執行個體。Google Cloud

啟用防火牆規則記錄後,每當規則允許或拒絕流量時, Google Cloud 就會建立稱為「連線記錄」的項目。您可以在 Cloud Logging 中查看這些記錄,並將記錄檔匯出至 Cloud Logging 匯出功能支援的任何目的地。

每項連線記錄都會包含來源和目標 IP 位址、通訊協定和通訊埠、日期和時間,以及流量所套用防火牆規則的參照。

防火牆規則記錄功能適用於虛擬私有雲防火牆規則和階層式防火牆政策。

如要瞭解如何查看記錄,請參閱「使用防火牆規則記錄」一文。

規格

防火牆規則記錄適用的規範如下:

記錄範例

每當啟用記錄功能的防火牆規則套用至流量時,系統就會產生記錄項目。特定封包的傳輸流程可能會產生不只一個記錄項目。不過如果從特定 VM 的角度來看,當套用至該 VM 的防火牆規則已啟用記錄時,系統最多只會產生一個記錄項目。

您可以透過以下範例瞭解防火牆記錄檔的運作方式。

拒絕輸出的範例

在這個例子中:

  • 會考慮 example-proj 專案中 example-net 虛擬私有雲網路中 VM 執行個體之間的流量。
  • 這兩個 VM 執行個體是:
    • us-west1-a 區域中的 VM1,其 IP 位址 10.10.0.99west-subnet (us-west1 地區)。
    • us-east1-b 區域中的 VM2,其 IP 位址 10.20.0.99east-subnet (us-east1 地區)。
  • 規則 A:拒絕輸出防火牆規則的目標是網路中的所有執行個體,目的地是 10.20.0.99 (VM2),適用於 TCP 通訊埠 80。
    • 這項規則已啟用記錄功能。
  • 規則 B:允許輸入防火牆規則的目標是網路中的所有執行個體,來源是 10.10.0.99 (VM1),適用 TCP 通訊埠 80。
    • 這項規則也已啟用記錄功能。

您可以使用以下 gcloud 指令建立防火牆規則:

  • 規則 A:TCP 80 的拒絕輸出規則,適用於所有執行個體,目的地 10.20.0.99

    gcloud compute firewall-rules create rule-a \
        --network example-net \
        --action deny \
        --direction EGRESS \
        --rules tcp:80 \
        --destination-ranges 10.20.0.99/32 \
        --priority 10 \
        --enable-logging
    
  • 規則 B:TCP 80 允許輸入規則,適用於所有執行個體,來源 10.10.0.99

    gcloud compute firewall-rules create rule-b \
        --network example-net \
        --action allow \
        --direction INGRESS \
        --rules tcp:80 \
        --source-ranges 10.10.0.99/32 \
        --priority 10 \
        --enable-logging
    
VM1 到 VM2 的連線。
VM1 到 VM2 的連線 (點選即可放大)。

假設 VM1 嘗試透過 TCP 通訊埠 80 連線至 VM2,系統會記錄以下防火牆規則:

  • 當 VM1 嘗試連線至 10.20.0.99 (VM2) 時,系統會以 VM1 的角度產生規則 A 的記錄項目。
  • 由於規則 A 實際上會封鎖流量,在連線作業未涉及規則 B 的情況下,系統就不會以 VM2 的角度產生規則 B 的記錄項目。

以下範例會產生防火牆記錄檔記錄。

欄位
連結 src_ip=10.10.0.99
src_port=[EPHEMERAL_PORT]
dest_ip=10.20.0.99
dest_port=80
protocol=6
disposition DENIED
rule_details reference = "network:example-net/firewall:rule-a"
priority = 10
action = DENY
destination_range = 10.20.0.99/32
ip_port_info = tcp:80
direction = egress
執行個體 project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
虛擬私人雲端 project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
remote_instance project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-b
remote_vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
remote_location 沒有資訊。只有在目的地位於虛擬私有雲網路之外時,才會使用這個欄位。

同時允許輸出和輸入的範例

在這個例子中:

  • 會考慮 example-proj 專案中 example-net 虛擬私有雲網路中 VM 執行個體之間的流量。
  • 這兩個 VM 執行個體是:
    • us-west1-a 區域中的 VM1,其 IP 位址 10.10.0.99west-subnet (us-west1 地區)。
    • us-east1-b 區域中的 VM2,其 IP 位址 10.20.0.99east-subnet (us-east1 地區)。
  • 規則 A:允許輸出防火牆規則的目標是網路中的所有執行個體,目的地是 10.20.0.99 (VM2),適用於 TCP 通訊埠 80。
    • 這項規則已啟用記錄功能。
  • 規則 B:允許輸入防火牆規則的目標是網路中的所有執行個體,來源是 10.10.0.99 (VM1),適用 TCP 通訊埠 80。
    • 這項規則也已啟用記錄功能。

您可以使用以下 gcloud 指令建立這兩項防火牆規則:

  • 規則 A:TCP 80 允許輸出規則,適用於所有執行個體,目的地 10.20.0.99 (VM2):

    gcloud compute firewall-rules create rule-a \
        --network example-net \
        --action allow \
        --direction EGRESS \
        --rules tcp:80 \
        --destination-ranges 10.20.0.99/32 \
        --priority 10 \
        --enable-logging
    
  • 規則 B:TCP 80 允許輸入規則,適用於所有執行個體,來源 10.10.0.99 (VM1):

    gcloud compute firewall-rules create rule-b \
        --network example-net \
        --action allow \
        --direction INGRESS \
        --rules tcp:80 \
        --source-ranges 10.10.0.99/32 \
        --priority 10 \
        --enable-logging
    
VM1 到 VM2 的連線。
VM1 到 VM2 的連線 (點選即可放大)。

假設 VM1 嘗試透過 TCP 通訊埠 80 連線至 VM2,系統會記錄以下防火牆規則:

  • VM1 連線至 10.20.0.99 (VM2) 時,系統會以 VM1 的角度產生規則 A 的記錄項目。
  • VM2 允許來自 10.10.0.99 (VM1) 的連入連線時,系統會以 VM2 的角度產生規則 B 的記錄項目。

在下列範例中,系統會產生由 VM1 回報的防火牆記錄檔記錄。

欄位
連結 src_ip=10.10.0.99
src_port=[EPHEMERAL_PORT]
dest_ip=10.20.0.99
dest_port=80
protocol=6
disposition ALLOWED
rule_details reference = "network:example-net/firewall:rule-a"
priority = 10
action = ALLOW
destination_range = 10.20.0.99/32
ip_port_info = tcp:80
direction = egress
執行個體 project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
虛擬私人雲端 project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
remote_instance project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-b
remote_vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
remote_location 沒有資訊。只有在目的地位於虛擬私有雲網路之外時,才會使用這個欄位。

在下列範例中,系統會產生由 VM2 回報的防火牆記錄檔記錄。

欄位
連結 src_ip=10.10.0.99
src_port=[EPHEMERAL_PORT]
dest_ip=10.20.0.99
dest_port=80
protocol=6
disposition ALLOWED
rule_details reference = "network:example-net/firewall:rule-b"
priority = 10
action = ALLOW
source_range = 10.10.0.99/32
ip_port_info = tcp:80
direction = ingress
執行個體 project_id="example-proj"
instance_name=VM2
region=us-east1
zone=us-east1-b
虛擬私人雲端 project_id="example-proj"
vpc_name=example-net
subnetwork_name=east-subnet
remote_instance project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
remote_vpc project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
remote_location 沒有資訊。只有在目的地位於虛擬私有雲網路之外時,才會使用這個欄位。

網際網路輸入範例

在這個例子中:

  • 會考慮 example-net 虛擬私有雲網路外的系統傳至該網路內之 VM 執行個體的流量。該網路屬於 example-proj 專案。
  • 網際網路系統的 IP 位址為 203.0.113.114
  • us-west1-a 區域中的 VM1,其 IP 位址 10.10.0.99west-subnet (us-west1 地區)。
  • 規則 C:允許輸入防火牆規則的目標是網路中的所有執行個體,來源可能是任何 IP 位址 (0.0.0.0/0),並且適用於 TCP 通訊埠 80。
    • 這項規則已啟用記錄功能。
  • 規則 D:拒絕輸出防火牆規則的目標是網路中的所有執行個體,目的地可能是任何 IP 位址 (0.0.0.0/0),並且適用於所有通訊協定。
    • 這項規則也已啟用記錄功能。

您可以使用以下 gcloud 指令建立防火牆規則:

  • 規則 C:TCP 80 允許輸入規則,適用於所有執行個體,任何來源:

    gcloud compute firewall-rules create rule-c \
        --network example-net \
        --action allow \
        --direction INGRESS \
        --rules tcp:80 \
        --source-ranges 0.0.0.0/0 \
        --priority 10 \
        --enable-logging
    
  • 規則 D:所有通訊協定拒絕輸出規則,適用於所有執行個體,任何目的地:

    gcloud compute firewall-rules create rule-d \
        --network example-net \
        --action deny \
        --direction EGRESS \
        --rules all \
        --destination-ranges 0.0.0.0/0 \
        --priority 10 \
        --enable-logging
    
網際網路到 VM 的連線。
網際網路到 VM 的連線 (點選即可放大)。

假設 IP 位址為 203.0.113.114 的系統嘗試連線至 VM1 的 TCP 通訊埠 80。會發生以下情況:

  • VM1 接收來自 203.0.113.114 的流量時,系統會以 VM1 的角度產生規則 C 的記錄項目。
  • 儘管有規則 D,但Google Cloud 防火牆規則有狀態,因此系統會允許 VM1 回覆傳入要求。只要系統允許傳入要求,任何種類的輸出規則都無法封鎖已建立的回應。
  • 由於規則 D 不會套用,在連線作業未涉及這項規則的情況下,系統就不會產生規則 D 的記錄項目。

以下範例會產生防火牆記錄檔記錄。

欄位
連結 src_ip=203.0.113.114
src_port=[EPHEMERAL_PORT]
dest_ip=10.10.0.99
dest_port=80
protocol=6
disposition ALLOWED
rule_details reference = "network:my-vpc/firewall:rule-c"
priority = 10
action = ALLOW
source_range = 0.0.0.0/0
ip_port_info = tcp:80
direction = ingress
執行個體 project_id="example-proj"
instance_name=VM1
region=us-west1
zone=us-west1-a
虛擬私人雲端 project_id="example-proj"
vpc_name=example-net
subnetwork_name=west-subnet
remote_location 洲別
國家/地區
區域
城市

防火牆記錄檔格式

如果防火牆規則套用至 VM 執行個體的流量,且已啟用記錄功能,系統就會在 Cloud Logging 中為該規則建立記錄項目 (須符合規格)。記錄記錄會納入 Logging LogEntry 的 JSON 酬載欄位。

記錄包含做為每個記錄核心欄位的幾個基礎欄位,以及用來新增其他資訊的中繼資料欄位。您可以控管是否要加入中繼資料欄位。如果省略這些欄位,即可節省儲存空間費用。

部分記錄檔欄位支援的值也是欄位。這些欄位可能包含多項資料。舉例來說,connection 欄位採用的格式是 IpConnection,也就是一個欄位同時包含來源和目的地 IP 位址及通訊埠,外加通訊協定等資料。下表提供這些欄位的說明。

欄位 說明 欄位類型:基本或選用中繼資料
連結 IpConnection
5 個元組,說明這個連線的來源和目的地 IP 位址、來源和目的地通訊埠,以及 IP 通訊協定。
基本
disposition 字串
表示連線是 ALLOWEDDENIED
基本
rule_details RuleDetails
套用至這個連線的規則詳細資料。
rule_details.reference 欄位 基本
其他規則詳細資料欄位 中繼資料
執行個體 InstanceDetails
VM 執行個體詳細資料。在共用虛擬私有雲設定中,project_id 會對應至服務專案。
中繼資料
虛擬私人雲端 VpcDetails
虛擬私有雲網路詳細資料。在共用虛擬私有雲設定中,project_id 會對應至主專案。
中繼資料
remote_instance InstanceDetails
如果連線的遠端端點是位於 Compute Engine 的 VM,這個欄位會填入 VM 執行個體詳細資料。
中繼資料
remote_vpc VpcDetails
如果連線的遠端端點是位於虛擬私有雲網路中的 VM,這個欄位會填入網路詳細資料。
中繼資料
remote_location GeographicDetails
如果連線的遠端端點位於虛擬私有雲網路外部,這個欄位會填入可用的位置中繼資料。
中繼資料

IpConnection

欄位 類型 說明
src_ip 字串 來源 IP 位址。如果來源是 Compute Engine VM,src_ip 必須是主要內部 IP 位址,或是 VM 網路介面別名 IP 範圍內的位址。不會顯示外部 IP 位址。記錄檔會顯示 VM 的 IP 位址,因為 VM 會在封包標頭中看到該位址,這與您在 VM 上執行 TCP 傾印時相同。
src_port 整數 來源通訊埠
dest_ip 字串 目標 IP 位址。如果目的地是 Google Cloud VM,dest_ip 則可以是主要內部 IP 位址,也可以是 VM 網路介面別名 IP 範圍內的位址。即使連線時使用外部 IP 位址,系統也不會顯示。
dest_port 整數 目的地通訊埠
protocol 整數 連線的 IP 通訊協定

RuleDetails

欄位 類型 說明
reference 字串 防火牆規則的參照;格式:
"network:{network name}/firewall:{firewall_name}"
優先順序 整數 防火牆規則的優先順序。
action 字串 ALLOW (允許) 或 DENY (拒絕)
source_range[ ] 字串 套用防火牆規則的來源範圍清單。
destination_range[ ] 字串 防火牆規則適用的目的地範圍清單。
ip_port_info[ ] IpPortDetails 規則的 IP 通訊協定和適用通訊埠範圍清單。
方向 字串 防火牆規則適用的方向 (傳入或傳出)。
source_tag[ ] 字串 套用防火牆規則的所有來源標記清單。
target_tag[ ] 字串 套用防火牆規則的所有目標標記清單。
source_service_account[ ] 字串 套用防火牆規則的所有來源服務帳戶清單。
target_service_account[ ] 字串 套用防火牆規則的所有目標服務帳戶清單。
source_region_code[ ] 字串 防火牆規則適用的所有來源國家/地區代碼清單。
destination_region_code[ ] 字串 防火牆規則適用的所有目的地國家/地區代碼清單。
source_fqdn[ ] 字串 防火牆規則適用的所有來源網域名稱清單。
destination_fqdn[ ] 字串 防火牆規則適用的所有目的地網域名稱清單。
source_threat_intelligence[ ] 字串 防火牆規則適用的所有來源 Google Threat Intelligence 清單名稱。
destination_threat_intelligence[ ] 字串 防火牆規則適用的所有目的地 Google 威脅情報清單名稱。
source_address_groups[ ] 字串 防火牆規則適用的所有來源位址群組清單。
destination_address_groups[ ] 字串 防火牆規則適用的所有目的地地址群組清單。

IpPortDetails

欄位 類型 說明
ip_protocol 字串 套用防火牆規則的 IP 通訊協定。如果規則是套用至所有通訊協定,則會顯示「ALL」(全部)。
port_range[ ] 字串 規則適用的通訊埠範圍清單,例如 8080-9090

InstanceDetails

欄位 類型 說明
project_id 字串 針對 VM 所在的專案列出 ID
vm_name 字串 VM 的執行個體名稱
region 字串 VM 地區
zone 字串 VM 區域

VpcDetails

欄位 類型 說明
project_id 字串 針對網路所在的專案列出 ID
vpc_name 字串 VM 運作時所在的網路
subnetwork_name 字串 VM 運作時所在的子網路

GeographicDetails

欄位 類型 說明
continent 字串 外部端點所在的洲別
country 字串 外部端點所在的國家/地區
region 字串 外部端點所在的地區
city 字串 外部端點所在的城市

後續步驟