1. Introduzione
Le policy di sicurezza di Cloud Armor vengono utilizzate per configurare regole definite dall'utente per filtrare il traffico sul perimetro della rete di Google, a monte della tua infrastruttura. Le policy di sicurezza perimetrale della rete possono essere utilizzate per proteggere e consentire o bloccare il traffico che ha come target i seguenti tipi di endpoint: bilanciatore del carico di rete, forwarding del protocollo e VM con IP pubblici.

In questo lab, mostreremo come configurare le policy di sicurezza di Cloud Armor con regole definite dall'utente per prevenire attacchi DDoS.

Figura 1. Cloud Armor per la protezione delle VM con IP pubblico.
Cosa imparerai a fare
- Policy di sicurezza di Cloud Armor con configurazione delle regole definite dall'utente
- Configurazioni e test dell'offset UDP.
Che cosa ti serve
- Conoscenza di TCP/IP
- Conoscenza della riga di comando Unix/Linux
2. Prima di iniziare
In Cloud Shell, assicurati che l'ID progetto sia configurato.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. Crea rete VPC di destinazione
Nella sezione seguente configureremo le reti VPC e le relative configurazioni di networking. La policy di sicurezza perimetrale della rete Cloud Armor è basata sulla regione. Abbiamo configurato tutte le risorse correlate nella regione asia-southeast1.
Rete VPC
Da Cloud Shell
gcloud compute networks create ca4nlb --project=$prodproject --subnet-mode=custom
Crea subnet
Da Cloud Shell
gcloud compute networks subnets create ca4nlb-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=ca4nlb --region=asia-southeast1
Crea regole firewall.
In questa sezione aggiungeremo una regola firewall per consentire il traffico UDP previsto alla porta 10000.
Da Cloud Shell, crea una regola firewall per aprire la porta UDP 10000 per i test successivi.
gcloud compute firewall-rules create ca4nlb-udp10000 --allow udp:10000 --network ca4nlb --source-ranges 0.0.0.0/0 --enable-logging
Da Cloud Shell, crea una regola firewall per consentire a IAP di connettersi alle tue istanze VM.
gcloud compute firewall-rules create ca4nlb-iap-prod --network ca4nlb --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
4. Crea istanze VM di destinazione
Crea una VM di destinazione per testare le policy di sicurezza. Questa VM deve avere un indirizzo IP pubblico e la porta UDP 10000 aperta.
Da Cloud Shell crea l'istanza targetvm
gcloud compute instances create targetvm \ --zone=asia-southeast1-b \ --image-family=debian-11 \ --image-project=debian-cloud \ --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=ca4nlb-asia-southeast1 \ --shielded-secure-boot \ --shielded-vtpm \ --shielded-integrity-monitoring
5. Configura la protezione DDoS di rete avanzata
Da Cloud Shell
gcloud compute security-policies create ca_advanced_ddos \
--type CLOUD_ARMOR_NETWORK \
--region asia-southeast1
gcloud compute security-policies update ca_advanced_ddos \
--network-ddos-protection ADVANCED \
--region asia-southeast1
gcloud compute network-edge-security-services create caedgepolicy \
--security-policy ca_advanced_ddos \
--region asia-southeast1
6. Crea una policy di sicurezza perimetrale della rete con regole predefinite
Crea la policy di sicurezza perimetrale della rete
Da Cloud Shell
gcloud alpha compute security-policies create customnetworkedge --type=CLOUD_ARMOR_NETWORK --region=asia-southeast1
Modificare la regola predefinita
Da Cloud Shell
gcloud alpha compute security-policies rules update 2147483647 --security-policy=customnetworkedge --action=deny --region=asia-southeast1
7. Crea una policy di sicurezza perimetrale della rete con regole configurate dall'utente
Offset UDP predefinito dall'utente e configurato nel criterio Cloud Armor. Il pacchetto con questi "valori di offset" supererà il controllo dei criteri e verrà inviato alla VM di backend. Nell'esempio seguente, definiremo due "offset" con valori diversi.
Il primo valore si trova subito dopo l'intestazione UDP e corrisponde esattamente a 2 byte 0x1700
Il secondo valore è l'offset di 8 byte dell'intestazione UDP, corrispondenza esatta di 4 byte 0x12345678
Il valore predefinito sopra indicato si traduce in una visualizzazione dei bit del pacchetto UDP.

Da Cloud Shell
gcloud alpha compute security-policies add-user-defined-field customnetworkedge \ --user-defined-field-name=SIG1_AT_0 \ --base=udp --offset=8 --size=2 --mask=0xFF00 \ --region=asia-southeast1 gcloud alpha compute security-policies add-user-defined-field customnetworkedge \ --user-defined-field-name=SIG2_AT_8 \ --base=udp --offset=16 --size=4 --mask=0xFFFFFFFF \ --region=asia-southeast1 gcloud alpha compute security-policies rules create 1000 \ --security-policy=customnetworkedge \ --network-user-defined-fields="SIG1_AT_0;0x1700,SIG2_AT_8;0x12345678" \ --action=allow --region=asia-southeast1
8. Collega la policy di sicurezza alla VM di destinazione
Da Cloud Shell, collega la policy di sicurezza alla VM protetta.
gcloud alpha compute instances network-interfaces update targetvm \ --security-policy=customnetworkedge \ --security-policy-region=asia-southeast1 \ --network-interface=nic0 \ --zone=asia-southeast1-b
Da Cloud Shell descrivi la VM di destinazione, vedrai che securityPolicy è collegata. Registra l'IP pubblico per i test successivi.
gcloud alpha compute instances describe targetvm --zone=asia-southeast1-b
networkInterfaces:
- accessConfigs:
- kind: compute#accessConfig
name: External NAT
natIP: 35.240.148.100
networkTier: PREMIUM
securityPolicy: https://www.googleapis.com/compute/alpha/projects/<project>/regions/asia-southeast1/securityPolicies/customnetworkedge
Da Cloud Shell scollega la policy di sicurezza dalla VM protetta.
gcloud alpha compute instances network-interfaces update targetvm \ --network-interface=nic0 \ --zone=asia-southeast1-b \ --security-policy=
9. Prepara le risorse di test.
Crea rete VPC di test
Da Cloud Shell
gcloud compute networks create test --project=$prodproject --subnet-mode=custom
Crea subnet di test
Da Cloud Shell
gcloud compute networks subnets create test-asia-southeast1 --project=$prodproject --range=10.0.1.0/24 --network=test --region=asia-southeast1
Crea firewall
Da Cloud Shell, crea una regola firewall per consentire a IAP di connettersi alle tue istanze VM.
gcloud compute firewall-rules create test-iap-prod --network test --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
Crea VM di test
Da Cloud Shell
gcloud compute instances create test01 \
--zone=asia-southeast1-b \
--image-family=debian-11 \
--image-project=debian-cloud \
--network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=test-asia-southeast1 \
--shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring
10. Verifica
Accedi alla console della VM di test e installa il generatore di pacchetti packit.
sudo apt install packit
Seguendo la progettazione dell'offset UDP, utilizza packit per generare pacchetti UDP. Simuliamo un pacchetto (-t udp) dall'interfaccia (-s ens4) con indirizzo IP di origine (-s 10.0.1.2) con porte di origine (-S 10000) all'indirizzo IP di destinazione targetVM (-d 35.240.148.100) con porte di destinazione (-D 10000). Il contenuto del pacchetto corrisponde ai valori (-p '0x 17 00 00 00 00 00 00 00 12 34 56 78'). Invieremo (-c 4) pacchetti.
sudo packit -m inject -t UDP -i ens4 -s 10.0.1.2 -d 35.240.148.100 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 4
Nella VM di destinazione, esegui tcpdump per acquisire il pacchetto UDP.
sudo tcpdump port 10000 -v -n
tcpdump: listening on ens4, link-type EN10MB (Ethernet), snapshot length 262144 bytes
06:36:18.434106 IP (tos 0x0, ttl 128, id 17173, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:19.433656 IP (tos 0x0, ttl 128, id 55641, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:20.433935 IP (tos 0x0, ttl 128, id 27161, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:21.434150 IP (tos 0x0, ttl 128, id 46782, offset 0, flags [none], proto UDP (17), length 40)
35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
Se modifichiamo i pattern di traffico nella VM di test, non possiamo acquisire pacchetti nella VM di destinazione.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 33 33 00 00 00 00 00 00 12 34 56 78' -c 4
11. Telemetria
Apri Cloud Metric, utilizza la seguente query MQL per interrogare i dati di telemetria NetworkSecurityPolicy.
fetch networksecurity.googleapis.com/RegionalNetworkSecurityPolicy | metric 'networksecurity.googleapis.com/l3/external/packet_count' | filter (resource.policy_name == 'customnetworkedge') | align rate(1m) | every 1m | group_by [metric.blocked], [value_packet_count_mean: mean(value.packet_count)] | group_by 1m, [value_packet_count_mean_mean: mean(value_packet_count_mean)] | every 1m
Genera traffico ad alto volume con il comando di offset di corrispondenza.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001 [result] Injected: 1000000 Packets/Sec: 10309.27 Bytes/Sec: 412371.13 Errors: 0
Genera traffico di volume elevato con un comando di offset di mancata corrispondenza.
sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 11 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001 [result] Injected: 1000000 Packets/Sec: 10309.27 Bytes/Sec: 412371.13 Errors: 0
La telemetria viene filtrata in base a policy_name e raggruppata in base a blocked. La linea blu indica il traffico consentito dalle regole dei criteri. La linea verde indica il traffico bloccato dalle regole dei criteri.

12. Procedura di pulizia
Elimina i componenti del lab da una singola shell cloud nel terminale
gcloud compute instances delete targetvm --zone=asia-southeast1-b gcloud compute firewall-rules delete ca4nlb-udp10000 gcloud compute firewall-rules delete ca4nlb-iap-prod gcloud compute networks subnets delete ca4nlb-asia-southeast1 --region=asia-southeast1 gcloud compute networks delete ca4nlb gcloud alpha compute security-policies delete customnetworkedge --region=asia-southeast1 gcloud alpha compute network-edge-security-services delete caedgepolicy --region=asia-southeast1 gcloud alpha compute security-policies delete ca_advanced_ddos --region=asia-southeast1 gcloud compute instances delete test01 --zone=asia-southeast1-b gcloud compute firewall-rules delete test-iap-prod gcloud compute networks subnets delete test-asia-southeast1 --region=asia-southeast1 gcloud compute networks delete test
13. Complimenti!
Congratulazioni per aver completato il codelab.
Argomenti trattati
- Policy di sicurezza di Cloud Armor con regole definite dal cliente