1. Introdução
As políticas de segurança do Cloud Armor são usadas para configurar regras definidas pelo usuário para filtrar o tráfego na borda da rede do Google, upstream da sua infraestrutura. As políticas de segurança de borda de rede podem ser usadas para ajudar a proteger e permitir ou bloquear o tráfego direcionado aos seguintes tipos de endpoint: balanceador de carga de rede, encaminhamento de protocolo e VMs com IPs públicos.
Neste codelab, vamos demonstrar como configurar políticas de segurança do Cloud Armor com regras definidas pelo usuário para evitar ataques DDoS.
Figura 1. Cloud Armor para VM com proteção de IP público.
O que você vai aprender
- Políticas de segurança do Cloud Armor com configuração de regras definidas pelo usuário
- Configurações e testes de deslocamento UDP.
O que é necessário
- Conhecimento sobre TCP/IP.
- Conhecimento sobre a linha de comando do Unix/Linux.
2. Antes de começar
No Cloud Shell, verifique se o ID do projeto está configurado
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. Criar rede VPC de destino
Na seção a seguir, vamos definir redes VPC e as configurações de rede relacionadas. A política de segurança de borda de rede do Cloud Armor é de base regional. Configuramos todos os recursos relacionados na região asia-southeast1.
Rede VPC
No Cloud Shell
gcloud compute networks create ca4nlb --project=$prodproject --subnet-mode=custom
Criar sub-rede
No Cloud Shell
gcloud compute networks subnets create ca4nlb-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=ca4nlb --region=asia-southeast1
Criar regras de firewall.
Nesta seção, adicionaremos uma regra de firewall para permitir o tráfego UDP esperado para a porta 10000.
No Cloud Shell, crie uma regra de firewall para abrir a porta UDP 10000 e fazer os testes a seguir.
gcloud compute firewall-rules create ca4nlb-udp10000 --allow udp:10000 --network ca4nlb --source-ranges 0.0.0.0/0 --enable-logging
No Cloud Shell, crie uma regra de firewall para permitir que o IAP se conecte às instâncias 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. Criar instâncias da VM de destino
Criar uma VM de destino para testar políticas de segurança. Essa VM precisa ter um endereço IP público e abrir a porta UDP 10000.
No Cloud Shell, crie a instância 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. Configurar a proteção avançada contra DDoS da rede
No 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. Criar política de segurança de borda de rede com regras padrão
Criar política de segurança de borda de rede
No Cloud Shell
gcloud alpha compute security-policies create customnetworkedge --type=CLOUD_ARMOR_NETWORK --region=asia-southeast1
Modificar regra padrão
No Cloud Shell
gcloud alpha compute security-policies rules update 2147483647 --security-policy=customnetworkedge --action=deny --region=asia-southeast1
7. Criar política de segurança de borda de rede com regras configuradas usadas
Deslocamento de UDP predefinido pelo usuário e configurado na política do Cloud Armor. Pacote com esses "valores de deslocamento" vai passar na verificação de política e enviá-la para a VM de back-end. No exemplo a seguir, definiremos dois "offset", com valores diferentes.
O primeiro valor está logo após o cabeçalho UDP, precisa corresponder exatamente a 2 bytes 0x1700
O segundo valor é o deslocamento de 8 bytes do cabeçalho UDP, com correspondência exata de 4 bytes 0x12345678
Acima do valor predefinido, haverá uma visualização de bits do pacote UDP.
No 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. Anexar política de segurança à VM de destino
No Cloud Shell, anexe a política de segurança à 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
No Cloud Shell, descreva a VM de destino. O securityPolicy está anexado. Registre o IP público para os testes seguintes.
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
No Cloud Shell, remova a política de segurança da VM protegida.
gcloud alpha compute instances network-interfaces update targetvm \ --network-interface=nic0 \ --zone=asia-southeast1-b \ --security-policy=
9. Preparar recursos de teste.
Criar rede VPC de teste
No Cloud Shell
gcloud compute networks create test --project=$prodproject --subnet-mode=custom
Criar sub-rede de teste
No Cloud Shell
gcloud compute networks subnets create test-asia-southeast1 --project=$prodproject --range=10.0.1.0/24 --network=test --region=asia-southeast1
Criar firewall
No Cloud Shell, crie uma regra de firewall para permitir que o IAP se conecte às instâncias de VM.
gcloud compute firewall-rules create test-iap-prod --network test --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
Crie uma VM de teste
No 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ção
Faça login no console da VM de teste e instale o gerador de pacotes packit
.
sudo apt install packit
Seguindo o design de deslocamento do UDP, use o packit para gerar pacotes UDP. Simulamos um pacote (-t udp) do endereço IP de origem da interface (-s ens4) (-s 10.0.1.2) com portas de origem (-S 10000) para o endereço IP de destino targetVM (-d 35.240.148.100) com portas de destino (-D 10000). O conteúdo do pacote corresponde aos valores (-p ‘0x 17 00 00 00 00 00 00 00 12 34 56 78"). Vamos enviar (-c 4) pacotes.
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
Na VM de destino, execute tcpdump para capturar o pacote 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 mudarmos os padrões de tráfego na VM de teste, não será possível capturar nenhum pacote na 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. Telemetria
Abrir o Cloud Metric. Use o MQL abaixo para consultar os dados de telemetria do 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
Gerar tráfego de alto volume com o comando de deslocamento de correspondência.
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
Gerar tráfego de alto volume com um comando de deslocamento sem correspondência.
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
A telemetria é filtrada por policy_name e agrupada por "Bloqueado". A linha azul indicava o tráfego permitido pelas regras de política. A linha verde indicava o tráfego bloqueado por regras de política.
12. Etapas de limpeza
Exclua os componentes do laboratório em um único Cloud Shell no 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. Parabéns!
Parabéns por concluir o codelab.
O que vimos
- Políticas de segurança do Cloud Armor com regras definidas pelo cliente