Cloud Armor لـ NLB/VM مع قواعد من تحديد المستخدم

1. مقدمة

تُستخدَم سياسات الأمان في Cloud Armor لإعداد قواعد يحدّدها المستخدم لفلترة الزيارات على حافة شبكة Google، أي في اتجاه المصدر من البنية الأساسية. يمكن استخدام سياسات أمان Network Edge للمساعدة في حماية حركة البيانات والسماح بها أو حظرها، مع استهداف أنواع نقاط النهاية التالية: موازنة التحميل على الشبكة، وإعادة توجيه البروتوكول، والأجهزة الافتراضية التي تتضمّن عناوين IP عامة.

7bc9d3ed0c03b54f.png

في هذا الدرس العملي، سنعرض كيفية ضبط سياسات أمان Cloud Armor باستخدام قواعد يحدّدها المستخدم لمنع هجمات DDoS.

f0a40260147e71b1.png

الشكل 1. ‫Cloud Armor للجهاز الافتراضي مع حماية عنوان 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 وإعدادات الشبكات ذات الصلة. تستند سياسة أمان شبكة 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 بالاتصال بمثيلات الأجهزة الافتراضية.

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

4. إنشاء مثيلات أجهزة افتراضية مستهدَفة

أنشئ جهازًا افتراضيًا مستهدفًا لاختبار سياسات الأمان. يجب أن تحتوي هذه الآلة الافتراضية على عنوان 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- ضبط إعدادات الحماية المتقدّمة ضد هجمات تعطُّل خدمات الشبكة

من 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" باستخدام القواعد التلقائية

إنشاء سياسة أمان حدود الشبكة

من 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 ستجتاز الحزمة التي تتضمّن "قيم الإزاحة" هذه عملية التحقّق من السياسة وسيتم إرسالها إلى الجهاز الافتراضي الخلفي. في المثال التالي، سنحدّد قيمتَين مختلفتَين لـ "offset".

القيمة الأولى تأتي مباشرةً بعد عنوان UDP، ويجب أن تتطابق تمامًا مع البايتات 0x1700

القيمة الثانية هي إزاحة 8 بايت من عنوان UDP، وتتطابق تمامًا مع 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. ربط سياسة الأمان بالجهاز الظاهري المستهدف

من Cloud Shell، اربط سياسة الأمان بالجهاز الظاهري المحمي.

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، صفّ الجهاز الظاهري المستهدف، وستظهر securityPolicy مرفقة. سجِّل عنوان 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، افصل سياسة الأمان عن الجهاز الظاهري المحمي.

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 بالاتصال بمثيلات الأجهزة الافتراضية.

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

إنشاء جهاز افتراضي للاختبار

من 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. التحقّق

سجِّل الدخول إلى وحدة تحكّم الجهاز الظاهري لاختبار تسجيل الدخول وثبِّت أداة إنشاء الحِزم packit.

sudo apt install packit

باتّباع تصميم إزاحة UDP، استخدِم packit لإنشاء حِزم UDP. نحاكي حزمة (-t udp) من عنوان IP المصدر للواجهة (-s ens4) (-s 10.0.1.2) مع منافذ المصدر (-S 10000) إلى عنوان IP الوجهة الخاص بـ targetVM (-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

في الجهاز الظاهري المستهدف، شغِّل 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

إذا غيّرنا أنماط حركة المرور في الجهاز الظاهري التجريبي، لن نتمكّن من التقاط أي حِزم في الجهاز الظاهري المستهدف.

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

افتح 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 وتجميعها حسب blocked. يشير الخط الأزرق إلى الزيارات المسموح بها بموجب قواعد السياسة. يشير الخط الأخضر إلى حركة البيانات المحظورة بموجب قواعد السياسة.

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. تهانينا!

تهانينا على إكمال هذا الدرس العملي.

المواضيع التي تناولناها

  • سياسات الأمان في Cloud Armor التي تتضمّن قواعد يحدّدها العميل