Cloud Armor para NLB/VM con reglas definidas por el usuario

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.

7bc9d3ed0c03b54f.png

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.

f0a40260147e71b1.png

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.

cbfdaeb93292e07b.png

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.

b11ba15d87f99775.png

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