Kullanıcı Tanımlı Kurallar ile NLB/Sanal Makine için Cloud Armor

1. Giriş

Cloud Armor güvenlik politikaları, Google ağının ucundaki, altyapınızdan yukarı yönde gelen trafiği filtrelemek için kullanıcı tanımlı kurallar yapılandırmak amacıyla kullanılır. Network Edge güvenlik politikaları, şu uç nokta türlerini hedefleyen trafiği korumaya, izin vermeye veya engellemeye yardımcı olmak için kullanılabilir: Ağ Yük Dengeleyici, Protokol Yönlendirme ve Genel IP'leri olan sanal makineler.

7bc9d3ed0c03b54f.png

Bu kod laboratuvarında, DDoS saldırılarını önlemek için Cloud Armor güvenlik politikalarının kullanıcı tanımlı kurallarla nasıl yapılandırılacağını göstereceğiz.

f0a40260147e71b1.png

Şekil 1. Genel IP korumalı sanal makineler için Cloud Armor.

Neler öğreneceksiniz?

  • Kullanıcı tanımlı kural yapılandırması içeren Cloud Armor güvenlik politikaları
  • UDP ofset yapılandırmaları ve testi.

Gerekenler

  • TCP/IP bilgisi
  • Unix/Linux komut satırı bilgisi

2. Başlamadan önce

Cloud Shell'de proje kimliğinizin ayarlandığından emin olun

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

3. Hedef VPC Ağı Oluşturma

Aşağıdaki bölümde VPC ağlarını ve ilgili ağ yapılandırma yapılandırmalarını ayarlayacağız. Cloud Armor'ın ağ ucu güvenlik politikası bölgeseldir. İlgili tüm kaynakları asia-southeast1 bölgesinde oluştururuz.

VPC Ağı

Cloud Shell'den

gcloud compute networks create ca4nlb --project=$prodproject --subnet-mode=custom

Alt Ağ Oluştur

Cloud Shell'den

gcloud compute networks subnets create ca4nlb-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=ca4nlb --region=asia-southeast1

Güvenlik duvarı kuralları oluşturun.

Bu bölümde, beklenen UDP trafiğinin 10000 numaralı bağlantı noktasına ulaşmasına izin veren bir güvenlik duvarı kuralı ekleyeceğiz.

Cloud Shell'den aşağıdaki test için 10000 numaralı UDP bağlantı noktasını açmak üzere bir güvenlik duvarı kuralı oluşturun.

gcloud compute firewall-rules create ca4nlb-udp10000 --allow udp:10000 --network ca4nlb --source-ranges 0.0.0.0/0 --enable-logging

Cloud Shell'den, IAP'nin sanal makine örneklerinize bağlanmasına izin vermek için bir güvenlik duvarı kuralı oluşturun.

gcloud compute firewall-rules create ca4nlb-iap-prod --network ca4nlb --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

4. Hedef Sanal Makine Örnekleri Oluşturma

Güvenlik politikalarını test etmek için bir hedef sanal makine oluşturun. Bu sanal makine, herkese açık bir IP adresine sahip olmalı ve 10000 numaralı UDP bağlantı noktasını açmalıdır.

Cloud Shell'den örnek targetvm oluşturma

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. Gelişmiş ağ DDoS korumasını yapılandırın

Cloud Shell'den

 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. Varsayılan kurallarla Network Edge Güvenlik Politikası oluşturun

Network Edge Güvenlik Politikası oluştur

Cloud Shell'den

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

Varsayılan kuralı değiştir

Cloud Shell'den

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

7. Kullanılan yapılandırılmış kurallarla Network Edge Güvenlik Politikası oluşturma

Kullanıcı tarafından önceden tanımlanmış UDP ofseti ve Cloud güvenlik politikasında yapılandırıldı. Bu "ofset değerleri"ne sahip paket politika kontrolünü geçer ve arka uç sanal makinesine gönderir. Aşağıdaki örnekte iki "offset" değeri tanımlayacağız değerleridir.

İlk değer UDP başlığından hemen sonradır. 2 bayt ile tam olarak eşleşir 0x1700

İkinci değer, 8 baytlık UDP başlığının ofsetidir (4 bayt ile tam olarak eşleşir) 0x12345678

Önceden tanımlanmış değer, UDP paketi bit görünümüne dönüştürülür.

cbfdaeb93292e07b.png

Cloud Shell'den

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. Hedef Sanal Makineye Güvenlik Politikası Ekleme

Cloud Shell'den korumalı sanal makineye güvenlik politikası ekleyin.

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

Hedef sanal makineyi Cloud Shell'de açıklarsanız safetyPolicy'nin ekli olduğunu görürsünüz. Aşağıdaki test için herkese açık IP'yi kaydedin.

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

Cloud Shell'den güvenlik politikasını korunan sanal makineden ayırın.

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

9. Test Kaynaklarını Hazırlama.

Test VPC Ağı Oluşturma

Cloud Shell'den

gcloud compute networks create test --project=$prodproject --subnet-mode=custom

Test Alt Ağı Oluştur

Cloud Shell'den

gcloud compute networks subnets create test-asia-southeast1 --project=$prodproject --range=10.0.1.0/24 --network=test --region=asia-southeast1

Güvenlik Duvarı oluştur

Cloud Shell'den, IAP'nin sanal makine örneklerinize bağlanmasına izin vermek için bir güvenlik duvarı kuralı oluşturun.

gcloud compute firewall-rules create test-iap-prod --network test --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

Test Sanal Makinesi Oluşturma

Cloud Shell'den

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. Doğrulama

Sanal Makine Testi Konsolu'na giriş yapın ve paket oluşturucuyu (packit) yükleyin.

sudo apt install packit

UDP ofset tasarımının ardından, UDP paketleri oluşturmak için packit'i kullanın. Kaynak bağlantı noktaları (-S 10000) ile hedef bağlantı noktaları (-D 10000) olan targetVM hedef IP adresine (-d 35.240.148.100) sahip arayüzden (-s ens4) kaynak IP adresinden (-s 10.0.1.2) bir (-t udp) paketi simüle ederiz. Paket içeriği değerlerle eşleşiyor (-p "0x 17 00 00 00 00 00 00 00 12 34 56 78"). (-c 4) paketlerini göndereceğiz.

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

UDP paketini yakalamak için hedef sanal makinede tcpdump komutunu çalıştırın.

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

Test sanal makinesinde trafik kalıplarını değiştirirsek hedef sanal makinedeki paketleri yakalayamayız.

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. Telemetri

Open Cloud Metric (Cloud Metriği), NetworkSercurityPolicy telemetri verilerini sorgulamak için MQL'nin altını kullanın.

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

Eşleme ofseti komutuyla yüksek hacimli trafik oluşturun.

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

Eşleşmeyi kaldırma ofseti komutuyla yüksek hacimli trafik oluşturun.

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

Telemetri, policy_name değerine göre filtrelenir ve engellenenlere göre gruplandırılır. Mavi çizgi, politika kurallarının izin verdiği trafiği gösterir. Yeşil çizgi, politika kuralları tarafından engellenen trafiği gösterir.

b11ba15d87f99775.png

12. Temizleme adımları

Terminaldeki tek bir Cloud Shell'den laboratuvar bileşenlerini silme

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. Tebrikler!

Codelab'i tamamladığınız için tebrikler.

İşlediklerimiz

  • Müşteri tarafından tanımlanan kurallar içeren Cloud Armor güvenlik politikaları