Cloud Armor สำหรับ NLB/VM ที่มีกฎที่กำหนดโดยผู้ใช้

1. บทนำ

นโยบายความปลอดภัยของ Cloud Armor ใช้เพื่อกำหนดค่ากฎที่ผู้ใช้กำหนดเพื่อกรองการรับส่งข้อมูลที่ขอบของเครือข่ายของ Google ซึ่งเป็นอัปสตรีมจากโครงสร้างพื้นฐานของคุณ คุณสามารถใช้นโยบายความปลอดภัยของ Network Edge เพื่อช่วยปกป้องและอนุญาตหรือบล็อกการรับส่งข้อมูลที่กำหนดเป้าหมายไปยังประเภทปลายทางต่อไปนี้ ตัวจัดสรรภาระงานของเครือข่าย การส่งต่อโปรโตคอล และ VM ที่มี IP สาธารณะ

7bc9d3ed0c03b54f.png

ใน Code Lab นี้ เราจะสาธิตวิธีกำหนดค่านโยบายความปลอดภัยของ Cloud Armor ด้วยกฎที่ผู้ใช้กำหนดเพื่อป้องกันการโจมตีแบบ DDoS

f0a40260147e71b1.png

รูปที่ 1 Cloud Armor สำหรับ VM ที่มีการปกป้อง IP สาธารณะ

สิ่งที่คุณจะได้เรียนรู้

  • นโยบายความปลอดภัยของ Cloud Armor ที่มีการกำหนดค่ากฎที่ผู้ใช้กำหนด
  • การกำหนดค่าและการทดสอบออฟเซ็ต UDP

สิ่งที่คุณต้องมี

  • ความรู้เกี่ยวกับ TCP/IP
  • ความรู้เกี่ยวกับบรรทัดคำสั่ง Unix/Linux

2. ก่อนเริ่มต้น

ตรวจสอบว่าตั้งค่ารหัสโปรเจ็กต์ใน Cloud Shell แล้ว

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

3. สร้างเครือข่าย VPC เป้าหมาย

ในส่วนต่อไปนี้ เราจะตั้งค่าเครือข่าย VPC และการกำหนดค่าเครือข่ายที่เกี่ยวข้อง นโยบายความปลอดภัย Edge ของเครือข่าย Cloud Armor เป็นระดับภูมิภาค และเราได้ตั้งค่าทรัพยากรที่เกี่ยวข้องทั้งหมดในภูมิภาค asia-southeast1

เครือข่าย VPC

จาก Cloud Shell

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

สร้างซับเน็ต

จาก Cloud Shell

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

สร้างกฎไฟร์วอลล์

ในส่วนนี้ เราจะเพิ่มกฎไฟร์วอลล์เพื่ออนุญาตการรับส่งข้อมูล UDP ที่คาดไว้ไปยังพอร์ต 10000

จาก Cloud Shell ให้สร้างกฎไฟร์วอลล์เพื่อเปิดพอร์ต UDP 10000 สำหรับการทดสอบต่อไปนี้

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

สร้างกฎไฟร์วอลล์จาก Cloud Shell เพื่อให้ IAP เชื่อมต่อกับอินสแตนซ์ VM ของคุณ

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

4. สร้างอินสแตนซ์ VM เป้าหมาย

สร้าง VM เป้าหมายสำหรับการทดสอบนโยบายความปลอดภัย VM นี้ควรมีที่อยู่ IP สาธารณะและเปิดพอร์ต UDP 10000 ไว้

จาก Cloud Shell สร้างอินสแตนซ์ 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. กำหนดค่าการป้องกันเครือข่าย DDoS ขั้นสูง

จาก 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. สร้างนโยบายความปลอดภัยของ Network Edge โดยใช้กฎเริ่มต้น

สร้างนโยบายความปลอดภัยของ Network Edge

จาก Cloud Shell

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

แก้ไขกฎเริ่มต้น

จาก Cloud Shell

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

7. สร้างนโยบายความปลอดภัยของ Network Edge ด้วยกฎที่กำหนดค่าใช้

ออฟเซ็ต UDP ที่กำหนดไว้ล่วงหน้าและกำหนดค่าในนโยบาย Cloud Armor ของผู้ใช้ แพ็กเกตที่มี "ค่าออฟเซ็ต" นี้ จะผ่านการตรวจสอบนโยบาย และส่งไปยัง VM แบ็กเอนด์ ในตัวอย่างต่อไปนี้ เราจะกำหนด "ออฟเซ็ต" สองค่า ด้วยค่าที่ต่างกัน

ค่าแรกอยู่หลังส่วนหัว UDP ตรงกันทั้งหมด 2 ไบต์ 0x1700

ค่าที่ 2 คือออฟเซ็ตส่วนหัว UDP 8 ไบต์ ซึ่งตรงกันทุกประการกับ 4 ไบต์ 0x12345678

ระบบจะแปลงค่าด้านบนที่กำหนดไว้ล่วงหน้าเป็นมุมมองบิตแพ็กเก็ต UDP

cbfdaeb93292e07b.png

จาก 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. แนบนโยบายความปลอดภัยกับ VM เป้าหมาย

จาก Cloud Shell โปรดแนบนโยบายความปลอดภัยไปยัง VM ที่มีการป้องกัน

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

จาก Cloud Shell อธิบาย VM เป้าหมาย คุณจะเห็น safetyPolicy แนบอยู่ บันทึก IP สาธารณะสำหรับการทดสอบต่อไปนี้

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 ให้ปลดนโยบายความปลอดภัยออกจาก VM ที่มีการป้องกัน

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

9. เตรียมแหล่งข้อมูลการทดสอบ

สร้างเครือข่าย VPC ทดสอบ

จาก Cloud Shell

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

สร้างซับเน็ตทดสอบ

จาก Cloud Shell

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

สร้างไฟร์วอลล์

สร้างกฎไฟร์วอลล์จาก Cloud Shell เพื่อให้ IAP เชื่อมต่อกับอินสแตนซ์ VM ของคุณ

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

สร้าง VM ทดสอบ

จาก 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. การยืนยัน

เข้าสู่ระบบ Test VM Console และติดตั้งโปรแกรมสร้างแพ็กเก็ต packit

sudo apt install packit

ทำตามการออกแบบออฟเซ็ต UDP โดยใช้ Packit เพื่อสร้างแพ็กเก็ต UDP เราจำลองแพ็กเก็ต (-t udp) จากที่อยู่ IP ต้นทางของอินเทอร์เฟซ (-s ens4) กับพอร์ตต้นทาง (-S 10000) ไปยังที่อยู่ IP ปลายทางปลายทางของ VM (-d 35.240.148.100) พร้อมพอร์ตปลายทาง (-D 10000) เนื้อหาแพ็กเก็ตตรงกับค่า (-p ‘0x 17 00 00 00 00 00 00 00 12 34 56 78") เราจะส่งแพ็กเก็ต (-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

ใน VM เป้าหมาย ให้เรียกใช้ tcpdump เพื่อจับแพ็กเก็ต 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

หากเราเปลี่ยนรูปแบบการรับส่งข้อมูลใน VM ทดสอบ เราจะไม่สามารถบันทึกแพ็กเก็ตใน VM เป้าหมายได้

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. การส่งข้อมูลทางไกล

เปิด Cloud Metric (เมตริกระบบคลาวด์) ใช้ MQL ด้านล่างเพื่อค้นหาข้อมูลการวัดและส่งข้อมูลทางไกล 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

สร้างการรับส่งข้อมูลปริมาณมากด้วยคำสั่งออฟเซ็ตที่ตรงกัน

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

สร้างการรับส่งข้อมูลปริมาณมากด้วยคำสั่งออฟเซ็ตที่ไม่ตรงกัน

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

การตรวจวัดระยะไกลถูกกรองออกโดย policy_name และจัดกลุ่มตาม "ถูกบล็อก" เส้นสีน้ำเงินระบุว่าการเข้าชมได้รับอนุญาตโดยกฎนโยบาย เส้นสีเขียวระบุว่าการเข้าชมถูกบล็อกโดยกฎนโยบาย

b11ba15d87f99775.png

12. ขั้นตอนการทำความสะอาด

ลบคอมโพเนนต์ห้องทดลองจาก Cloud Shell เดียวในเทอร์มินัล

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. ยินดีด้วย

ขอแสดงความยินดีที่เรียน Codelab จนจบ

หัวข้อที่ครอบคลุม

  • นโยบายความปลอดภัยของ Cloud Armor ที่มีกฎที่ลูกค้ากำหนด