虛擬私有雲 (VPC) 防火牆規則套用至流量時,會產生記錄項目。雖然封包流程可能會產生多個記錄項目,但虛擬私有雲防火牆規則最多只會針對來自虛擬機器 (VM) 執行個體的每個連線產生一個記錄項目。以下範例說明 VPC 防火牆規則記錄在不同情境下的運作方式。
拒絕輸出的範例
這個範例顯示輸出拒絕虛擬私有雲防火牆規則的記錄,該規則會封鎖相同虛擬私有雲網路中兩個 VM 執行個體之間的流量。
在本範例中,流量會在 example-proj 專案的 example-net 虛擬私有雲網路中,於 VM 執行個體之間流動。
兩個 VM 執行個體的詳情如下:
us-west1-a區域中的 VM1,其 IP 位址10.10.0.99在west-subnet(us-west1地區)。us-east1-b區域中的 VM2,其 IP 位址10.20.0.99在east-subnet(us-east1地區)。
規則 A:拒絕輸出防火牆規則的目標是網路中的所有執行個體,目的地是
10.20.0.99(VM2),適用於 TCP 通訊埠80。 這項規則已啟用記錄功能。規則 B:允許輸入防火牆規則的目標是網路中的所有執行個體,來源是
10.10.0.99(VM1),適用於 TCP 通訊埠80。 這項規則也已啟用記錄功能。
如要建立 VPC 防火牆規則,請使用下列 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 嘗試透過 TCP 通訊埠 80 連線至 VM2,則會發生下列情況:
- 當 VM1 嘗試連線至
10.20.0.99(VM2) 時,系統會以 VM1 的角度產生規則 A 的記錄項目。 - 由於規則 A 會封鎖流量,在連線作業未涉及規則 B 的情況下,系統就不會以 VM2 的角度產生規則 B 的記錄項目。
VM1 會回報下列虛擬私有雲防火牆規則記錄:
| 欄位 | 值 |
|---|---|
connection |
src_ip=10.10.0.99 src_port=[EPHEMERAL_PORT] dest_ip=10.20.0.99 dest_port=80 protocol=6 |
disposition |
禁止所有人使用 |
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 |
instance |
project_id="example-proj" instance_name=VM1 region=us-west1 zone=us-west1-a |
vpc |
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 |
沒有資訊。只有在目的地位於虛擬私有雲網路之外時,才會使用這個欄位。 |
同時允許輸出和輸入的範例
這個範例顯示輸出允許虛擬私有雲防火牆規則和輸入允許虛擬私有雲防火牆規則的記錄,這兩項規則共同允許相同虛擬私有雲網路中兩個 VM 執行個體之間的流量。
在本範例中,流量會在 example-proj 專案的 example-net 虛擬私有雲網路中,於 VM 執行個體之間流動。
兩個 VM 執行個體的詳情如下:
us-west1-a區域中的 VM1,其 IP 位址10.10.0.99在west-subnet(us-west1地區)。us-east1-b區域中的 VM2,其 IP 位址10.20.0.99在east-subnet(us-east1地區)。
規則 A:允許輸出防火牆規則的目標是網路中的所有執行個體,目的地是
10.20.0.99(VM2),適用於 TCP 通訊埠80。 這項規則已啟用記錄功能。規則 B:允許輸入防火牆規則的目標是網路中的所有執行個體,來源是
10.10.0.99(VM1),適用於 TCP 通訊埠80。 這項規則也已啟用記錄功能。
如要建立 VPC 防火牆規則,請使用下列 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 嘗試透過 TCP 通訊埠 80 連線至 VM2,則會發生下列情況:
- VM1 連線至
10.20.0.99(VM2) 時,系統會以 VM1 的角度產生規則 A 的記錄項目。 - VM2 允許來自
10.10.0.99(VM1) 的連入連線時,系統會以 VM2 的角度產生規則 B 的記錄項目。
VM1 會回報下列虛擬私有雲防火牆規則記錄:
| 欄位 | 值 |
|---|---|
connection |
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 |
instance |
project_id="example-proj" instance_name=VM1 region=us-west1 zone=us-west1-a |
vpc |
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 會回報下列虛擬私有雲防火牆規則記錄:
| 欄位 | 值 |
|---|---|
connection |
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 |
instance |
project_id="example-proj" instance_name=VM2 region=us-east1 zone=us-east1-b |
vpc |
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 |
沒有資訊。只有在目的地位於虛擬私有雲網路之外時,才會使用這個欄位。 |
網際網路輸入範例
這個範例顯示允許輸入的防火牆規則記錄,該規則允許網際網路流量傳送至 VM 執行個體。此外,這項功能也會顯示具狀態防火牆行為如何影響輸出拒絕規則。
在本範例中,流量會從外部資源流向 example-net 虛擬私有雲網路內的 VM 執行個體。該網路屬於 example-proj 專案。
- 網際網路系統的 IP 位址為
203.0.113.114。 us-west1-a區域中的 VM1,其 IP 位址10.10.0.99在west-subnet(us-west1地區)。- 規則 C:允許輸入防火牆規則的目標是網路中的所有執行個體,來源可能是任何 IP 位址 (
0.0.0.0/0),並且適用於 TCP 通訊埠80。 這項規則已啟用記錄功能。 - 規則 D:拒絕輸出防火牆規則的目標是網路中的所有執行個體,目的地可能是任何 IP 位址 (
0.0.0.0/0),並且適用於所有通訊協定。這項規則已啟用記錄功能。
如要建立 VPC 防火牆規則,請使用下列 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
假設 IP 位址為 203.0.113.114 的系統嘗試連線至 TCP 通訊埠 80 上的 VM1,則會發生下列情況:
- VM1 接收來自
203.0.113.114的流量時,會產生規則 C 的記錄項目。 - 儘管有規則 D,但Google Cloud 防火牆規則有狀態,因此系統會允許 VM1 回覆傳入要求。只要系統允許傳入要求,任何輸出規則都無法封鎖已建立的回應。
- 由於規則 D 不會套用,系統就不會考慮這項規則,因此不會產生規則 D 的記錄項目。
VM1 會回報下列虛擬私有雲防火牆規則記錄:
| 欄位 | 值 |
|---|---|
connection |
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 |
instance |
project_id="example-proj" instance_name=VM1 region=us-west1 zone=us-west1-a |
vpc |
project_id="example-proj" vpc_name=example-net subnetwork_name=west-subnet |
remote_location |
洲別 國家/地區 區域 城市 |