Cloud Armor per NLB/VM con regole definite dall'utente

1. Introduzione

I criteri di sicurezza di Cloud Armor vengono utilizzati per configurare regole definite dall'utente per filtrare il traffico sul perimetro della rete Google, a monte della tua infrastruttura. I criteri di sicurezza Edge di rete possono essere utilizzati per proteggere e consentire o bloccare il traffico rivolto ai seguenti tipi di endpoint: bilanciatore del carico di rete, forwarding del protocollo e VM con IP pubblici.

7bc9d3ed0c03b54f.png

In questo codelab, mostreremo come configurare i criteri di sicurezza di Cloud Armor con regole definite dall'utente per prevenire gli attacchi DDoS.

f0a40260147e71b1.png

Figura 1. Cloud Armor per VM con protezione IP pubblico.

Cosa imparerai a fare

  • Criteri di sicurezza di Cloud Armor con configurazione di 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

All'interno di 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. Il criterio di sicurezza perimetrale della rete di Cloud Armor è a livello di 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 sulla porta 10000.

Da Cloud Shell crea una regola firewall per aprire la porta UDP 10000 per i seguenti test.

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

Creare una VM di destinazione per testare i criteri di sicurezza. Questa VM deve avere un indirizzo IP pubblico e la porta UDP 10000 aperta.

Da Cloud Shell crea 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. Configurare 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 il criterio di sicurezza perimetrale della rete con regole predefinite

Crea criterio di sicurezza perimetrale della rete

Da Cloud Shell

gcloud alpha compute security-policies create customnetworkedge --type=CLOUD_ARMOR_NETWORK --region=asia-southeast1

Modifica regola predefinita

Da Cloud Shell

gcloud alpha compute security-policies rules update 2147483647 --security-policy=customnetworkedge --action=deny --region=asia-southeast1

7. Crea il criterio di sicurezza perimetrale della rete con regole configurate utilizzate

Offset UDP predefinito dall'utente e configurato nel criterio Cloud Armor. Pacchetto con "valori di offset" supererà il controllo dei criteri e lo invierà alla VM di backend. Nel seguente esempio, definiamo due "offset" con valori diversi.

Il primo valore è subito dopo l'intestazione UDP, corrisponde esattamente a 2 byte 0x1700

Il secondo valore è l'offset di 8 byte dell'intestazione UDP, corrisponde esattamente a 4 byte 0x12345678

Sopra il valore predefinito verrà convertito in una visualizzazione di bit del pacchetto UDP.

cbfdaeb93292e07b.png

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 criterio di sicurezza alla VM di destinazione

Da Cloud Shell collega il criterio 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 securityPolicy collegato. Registra l'IP pubblico per i seguenti test.

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 il criterio di sicurezza dalla VM protetta.

gcloud alpha compute instances network-interfaces update targetvm \
--network-interface=nic0 \
--zone=asia-southeast1-b \
--security-policy= 

9. Preparare le risorse per i test.

Crea una rete VPC di prova

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 VM di test e installa il generatore di pacchetti packit.

sudo apt install packit

In base alla progettazione dell'offset UDP, utilizza packit per generare pacchetti UDP. Simuliamo un pacchetto (-t udp) dall'indirizzo IP di origine dell'interfaccia (-s ens4) (-s 10.0.1.2) con porte di origine (-S 10000) all'indirizzo IP di destinazione della VM target (-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 nessun pacchetto 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

Metrica Cloud aperta, utilizza il valore inferiore a MQL per eseguire query sui dati di telemetria NetworkSercurityPolicy.

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

Generare traffico a volumi elevati con il comando Match offset.

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

Generare traffico a volume elevato con un comando di rimozione della 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 è filtrata per policy_name e raggruppata per bloccata. La linea blu indicava il traffico consentito dalle regole dei criteri. Una linea verde indica che il traffico è bloccato dalle regole dei criteri.

b11ba15d87f99775.png

12. Passaggi per la pulizia

Elimina i componenti del lab da un'unica Cloud Shell 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!

Complimenti per aver completato il codelab.

Argomenti trattati

  • Criteri di sicurezza di Cloud Armor con regole definite dal cliente