1. Introducción
Las políticas de seguridad de Cloud Armor se usan para configurar reglas definidas por el usuario para filtrar el tráfico en el perímetro de la red de Google, ascendentes de tu infraestructura. Las políticas de seguridad de Network Edge se pueden usar para ayudar a proteger y permitir o bloquear el tráfico orientado a los siguientes tipos de extremos: balanceador de cargas de red, reenvío de protocolos y VMs con IP públicas.
En este codelab, demostraremos cómo configurar las políticas de seguridad de Cloud Armor con reglas definidas por el usuario para evitar ataques DDoS.
Figura 1: Cloud Armor para VM con protección de IP pública.
Qué aprenderás
- Políticas de seguridad de Cloud Armor con configuración de reglas definidas por el usuario
- Configuraciones y pruebas de desplazamiento de UDP.
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 el ID del proyecto esté configurado
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. Crear red de VPC de destino
En la siguiente sección, configuraremos redes de VPC y parámetros de configuración de redes relacionados. La política de seguridad perimetral de red de Cloud Armor es regional. 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
Crea reglas de firewall.
En esta sección, agregaremos una regla de firewall para permitir el tráfico UDP esperado al puerto 10000.
En Cloud Shell, crea una regla de firewall para abrir el puerto UDP 10000 y realizar 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 una 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
Crear una política de seguridad perimetral de red
Desde Cloud Shell
gcloud alpha compute security-policies create customnetworkedge --type=CLOUD_ARMOR_NETWORK --region=asia-southeast1
Modifica la regla predeterminada
Desde Cloud Shell
gcloud alpha compute security-policies rules update 2147483647 --security-policy=customnetworkedge --action=deny --region=asia-southeast1
7. Crear una política de seguridad perimetral de red con reglas usadas y configuradas
Desplazamiento de UDP predefinido y configurado en la política de Cloud Armor. Paquete con estos “valores de desplazamiento” pasará la verificación de política y la enviará a la VM de backend. En el siguiente ejemplo, definiremos dos “desplazamiento” con valores diferentes.
El primer valor es justo después del encabezado UDP; coincide exactamente con 2 bytes 0x1700
El segundo valor se desplaza 8 bytes del encabezado UDP; coincide exactamente con 4 bytes 0x12345678
Por encima del valor predefinido, se traducirán en una vista de bits de paquete 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. Adjunta una política de seguridad a la VM de destino
Desde Cloud Shell, adjunta una 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
En Cloud Shell, verás que se adjunta la VM de destino de la descripción. Registra la IP pública para las siguientes pruebas.
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. Preparar recursos de prueba
Crear red de VPC de prueba
Desde Cloud Shell
gcloud compute networks create test --project=$prodproject --subnet-mode=custom
Crear subred de prueba
Desde Cloud Shell
gcloud compute networks subnets create test-asia-southeast1 --project=$prodproject --range=10.0.1.0/24 --network=test --region=asia-southeast1
Crea un 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
Crea una VM de prueba
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 VM de prueba y, luego, instala el generador de paquetes packit
.
sudo apt install packit
Siguiendo 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 (-s ens4) de la interfaz (-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 (-c 4) paquetes.
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 paquetes 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. Usa el siguiente MQL para consultar los datos de telemetría de 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
Genera tráfico de gran volumen con el 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
Generar un gran volumen de tráfico con un comando offset de anulación de coincidencia
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 bloqueada. La línea azul indica el tráfico permitido por las reglas de la política. La línea verde indica que el tráfico está bloqueado por las reglas de la política.
12. Pasos de limpieza
Borra los componentes del lab desde una sola Cloud Shell en la terminal.
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