Cloud Armor ל-NLB/VM עם כללים בהגדרת המשתמש

1. מבוא

מדיניות האבטחה של Cloud Armor משמשת להגדרת כללים מוגדרים על ידי המשתמש לסינון תעבורה בקצה הרשת של Google, במעלה הזרם מהתשתית שלכם. אפשר להשתמש במדיניות אבטחה של Network Edge כדי להגן על תעבורת נתונים שמכוונת לסוגי נקודות הקצה הבאים, ולאפשר או לחסום אותה: מאזן עומסים ברשת, העברת פרוטוקולים ומכונות וירטואליות עם כתובות IP ציבוריות.

7bc9d3ed0c03b54f.png

בשיעור ה-Lab הזה נדגים איך להגדיר כללי מדיניות אבטחה של Cloud Armor עם כללים שמוגדרים על ידי המשתמש, כדי למנוע התקפות DDoS.

f0a40260147e71b1.png

איור 1. ‫Cloud Armor למכונה וירטואלית עם הגנה על כתובת IP ציבורית.

מה תלמדו

  • כללי מדיניות האבטחה של Cloud Armor עם הגדרת כללים מוגדרים על ידי המשתמש
  • הגדרות בדיקה של UDP Offset.

מה תצטרכו

  • ידע ב-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. יצירת מכונות וירטואליות ליעד

יוצרים מכונה וירטואלית (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. מנות עם הערכים האלה של 'היסט' יעברו את בדיקת המדיניות ויישלחו למכונה הווירטואלית של העורף. בדוגמה הבאה נגדיר שני ערכים שונים לפרמטר offset.

הערך הראשון מופיע מיד אחרי כותרת ה-UDP, וצריך להיות זהה בדיוק ל-2 הבייטים 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. אימות

מתחברים למסוף של מכונת ה-VM לבדיקה ומתקינים את מחולל החבילות packit.

sudo apt install packit

בהתאם לעיצוב של היסט UDP, משתמשים ב-packit כדי ליצור מנות UDP. אנחנו מדמים חבילת נתונים (‎-t udp) מממשק (‎-s ens4) כתובת ה-IP של המקור (‎-s 10.0.1.2) עם יציאות מקור (‎-S 10000) לכתובת ה-IP של היעד של מכונת היעד (‎-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

אם נשנה את דפוסי התנועה במכונה הווירטואלית של הבדיקה, לא נוכל ללכוד חבילות במכונה הווירטואלית של היעד.

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. מעולה!

כל הכבוד, סיימתם את ה-Codelab.

מה נכלל

  • כללי מדיניות אבטחה של Cloud Armor עם כללים שהוגדרו על ידי הלקוח