1. Introducción
Las políticas de seguridad de Cloud Armor se usan para configurar reglas definidas por el usuario que filtran el tráfico en el perímetro de la red de Google, antes de que llegue a tu infraestructura. Las políticas de seguridad perimetral de red se pueden usar para proteger y permitir o bloquear el tráfico que se dirige a los siguientes tipos de extremos: balanceador de cargas de red, reenvío de protocolos y VMs con IPs públicas.

En este lab de código, mostraremos cómo configurar políticas de seguridad de Cloud Armor con reglas definidas por el usuario para evitar ataques DDoS.

Figura 1: Cloud Armor para la protección de VMs con IP pública.
Qué aprenderás
- Políticas de seguridad de Cloud Armor con configuración de reglas definidas por el usuario
- Configuración y pruebas de UDP Offset
Requisitos
- Conocimiento de TCP/IP
- Conocimiento de la línea de comandos de Unix/Linux
2. Antes de comenzar
En Cloud Shell, asegúrate de que tu ID del proyecto esté configurado.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. Crea la red de VPC de destino
En la siguiente sección, configuraremos redes de VPC y otras configuraciones de redes relacionadas. La política de seguridad perimetral de red de Cloud Armor se basa en la región, por lo que configuramos todos los recursos relacionados en la región asia-southeast1.
Red de VPC
Desde Cloud Shell
gcloud compute networks create ca4nlb --project=$prodproject --subnet-mode=custom
Crear subred
Desde Cloud Shell
gcloud compute networks subnets create ca4nlb-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=ca4nlb --region=asia-southeast1
Crear reglas de firewall
En esta sección, agregaremos una regla de firewall para permitir el tráfico UDP esperado al puerto 10000.
Desde Cloud Shell, crea una regla de firewall para abrir el puerto UDP 10000 para las siguientes pruebas.
gcloud compute firewall-rules create ca4nlb-udp10000 --allow udp:10000 --network ca4nlb --source-ranges 0.0.0.0/0 --enable-logging
Desde Cloud Shell, crea una regla de firewall para permitir que IAP se conecte a tus instancias de 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 instancias de VM de destino
Crea una VM de destino para probar las políticas de seguridad. Esta VM debe tener una dirección IP pública y el puerto UDP 10000 abierto.
Desde Cloud Shell, crea la instancia 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 protección avanzada contra DSD de red
Desde 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 política de seguridad perimetral de red con reglas predeterminadas
Crea una política de seguridad de Network Edge
Desde Cloud Shell
gcloud alpha compute security-policies create customnetworkedge --type=CLOUD_ARMOR_NETWORK --region=asia-southeast1
Modificar regla predeterminada
Desde Cloud Shell
gcloud alpha compute security-policies rules update 2147483647 --security-policy=customnetworkedge --action=deny --region=asia-southeast1
7. Crea una política de seguridad perimetral de red con reglas configuradas y utilizadas
Es el desplazamiento UDP predefinido por el usuario y configurado en la política de Cloud Armor. El paquete con estos "valores de desplazamiento" pasará la verificación de políticas y se enviará a la VM de backend. En el siguiente ejemplo, definiremos dos "desplazamientos" con valores diferentes.
El primer valor está justo después del encabezado UDP y coincide exactamente con 2 bytes 0x1700.
El segundo valor es el desplazamiento de 8 bytes del encabezado UDP, que coincide exactamente con 4 bytes 0x12345678.
El valor predefinido anterior se traducirá en una vista de bits de paquetes UDP.

Desde 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. Vincula la política de seguridad a la VM de destino
Desde Cloud Shell, adjunta la política de seguridad a la VM protegida.
gcloud alpha compute instances network-interfaces update targetvm \ --security-policy=customnetworkedge \ --security-policy-region=asia-southeast1 \ --network-interface=nic0 \ --zone=asia-southeast1-b
Desde Cloud Shell, describe la VM de destino y verás que se adjuntó securityPolicy. Registra la IP pública para las pruebas posteriores.
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
En Cloud Shell, desconecta la política de seguridad de la VM protegida.
gcloud alpha compute instances network-interfaces update targetvm \ --network-interface=nic0 \ --zone=asia-southeast1-b \ --security-policy=
9. Prepara recursos de prueba.
Create Test VPC Network
Desde Cloud Shell
gcloud compute networks create test --project=$prodproject --subnet-mode=custom
Create Test Subnet
Desde Cloud Shell
gcloud compute networks subnets create test-asia-southeast1 --project=$prodproject --range=10.0.1.0/24 --network=test --region=asia-southeast1
Crear firewall
Desde Cloud Shell, crea una regla de firewall para permitir que IAP se conecte a tus instancias de VM.
gcloud compute firewall-rules create test-iap-prod --network test --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
Create Test VM
Desde 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. Verificación
Accede a la consola de la VM de prueba y, luego, instala el generador de paquetes packit.
sudo apt install packit
Según el diseño de desplazamiento de UDP, usa packit para generar paquetes UDP. Simulamos un paquete (-t udp) desde la dirección IP de origen de la interfaz (-s ens4) (-s 10.0.1.2) con puertos de origen (-S 10000) a la dirección IP de destino de targetVM (-d 35.240.148.100) con puertos de destino (-D 10000). El contenido del paquete coincide con los valores (-p "0x 17 00 00 00 00 00 00 00 12 34 56 78"). Enviaremos paquetes (-c 4).
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
En la VM de destino, ejecuta tcpdump para capturar el paquete 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
Si cambiamos los patrones de tráfico en la VM de prueba, no podremos capturar ningún paquete en la VM de destino.
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. Telemetría
Abre Cloud Metric y usa el siguiente código MQL para consultar los datos de telemetría de 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 un gran volumen de tráfico con el comando de desplazamiento de coincidencias.
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 un gran volumen de tráfico con un comando de desplazamiento no coincidente.
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 telemetría se filtra por policy_name y se agrupa por bloqueado. La línea azul indica el tráfico permitido por las reglas de la política. La línea verde indica el tráfico bloqueado por las reglas de política.

12. Pasos para la limpieza
Desde una sola shell de Cloud en la terminal, borra los componentes del lab.
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. ¡Felicitaciones!
Felicitaciones por completar el codelab.
Temas abordados
- Políticas de seguridad de Cloud Armor con reglas definidas por el cliente