מאזני עומסים בשרת proxy של Cloud Armor ו-TCP/SSL – הגבלת קצב של יצירת כתובות IP ודחיית כתובות IP

1. מבוא

איזון העומסים ב-Google Cloud נפרס בקצה הרשת של Google בנקודות נוכחות (POP) של Google ברחבי העולם. תעבורת משתמשים שמנותבת למאזן עומסים של TCP Proxy נכנסת לנקודת ה-PoP שהכי קרובה למשתמש, ואז מתבצע איזון עומסים ברשת הגלובלית של Google עד להגעה לקצה העורפי הקרוב ביותר עם קיבולת מספקת.

‫Cloud Armor היא מערכת של Google לזיהוי מתקפות מניעת שירות (DDoS) וחומת אש ליישומי אינטרנט (WAF). שירות Cloud Armor משולב באופן הדוק עם מאזן העומסים של שרת ה-proxy של TCP ב-Google Cloud, ומאפשר לבדוק את התעבורה הנכנסת כדי לזהות בקשות לא רצויות. התכונה של הגבלת קצב של יצירת בקשות בשירות הזה מאפשרת לכם לצמצם את תעבורת הנתונים למשאבי ה-Backend על סמך נפח הבקשות, ומונעת מתעבורת נתונים לא רצויה לצרוך משאבים ברשת ה-VPC.

מאזני עומסים מסוג TCP/SSL proxy ב-Google Cloud מאפשרים לכם להשתמש בשרת proxy כדי לנתב תעבורת נתונים מסוג TCP/ SSL בין שירותי ה-Backend שלכם.

ב-Codelab הזה תלמדו איך ליצור מאזן עומסים בשרת proxy של TCP/SSL עם שירות לקצה העורפי, ואיך להשתמש ב-Cloud Armor כדי להגביל את הגישה למאזן העומסים רק לקבוצה ספציפית של לקוחות משתמשים.

be33dadf836374bb.png

מה תלמדו

  • איך יוצרים מאזן עומסים מסוג TCP/SSL proxy
  • איך יוצרים מדיניות אבטחה של Cloud Armor
  • איך יוצרים כלל של רשימת כתובות IP שמהן הגישה נחסמת למאזן עומסים של TCP/SSL Proxy ב-Cloud Armor
  • איך יוצרים כלל להגבלת קצב של יצירת בקשות למאזן עומסים של TCP Proxy ב-Cloud Armor
  • איך מוסיפים את מדיניות האבטחה לשירות קצה עורפי של איזון עומסים ב-TCP/SSL

הדרישות

  • ידע בסיסי ב-Google Compute Engine ( codelab)
  • ידע בסיסי ברישות וב-TCP/IP
  • ידע בסיסי בשורת הפקודה של Unix/Linux
  • מומלץ להשלים סיור מודרך ברשת ב-GCP באמצעות Networking in the Google Cloud

2. דרישות

הגדרת סביבה בקצב עצמי

  1. נכנסים אל Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

הערה: כדי לגשת בקלות ל-Cloud Console, אפשר לזכור את כתובת ה-URL שלו: console.cloud.google.com.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא יתאים לכם, מצטערים!). בהמשך ה-codelab הזה, הוא יופיע כ-PROJECT_ID.

הערה: אם אתם משתמשים בחשבון Gmail, אתם יכולים להשאיר את מיקום ברירת המחדל ללא ארגון. אם אתם משתמשים בחשבון Google Workspace, אתם צריכים לבחור מיקום שמתאים לארגון שלכם.

  1. לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.

העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. חשוב לפעול לפי ההוראות שבקטע 'ניקוי' כדי להשבית את המשאבים, וכך לא תחויבו על שימוש מעבר למה שמוסבר במדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

הפעלת Cloud Shell

אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

ב-GCP Console, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

bce75f34b2c53987.png

יחלפו כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, אמור להופיע משהו כזה:

f6ef2b5f13479f3a.png

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-Lab הזה רק באמצעות דפדפן.

לפני שמתחילים

ב-Cloud Shell, מוודאים שמזהה הפרויקט מוגדר

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

הפעלת ממשקי ה-API

הפעלת כל השירותים הנדרשים

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com        
gcloud services enable monitoring.googleapis.com

3. יצירת שירותים לקצה העורפי

יוצרים 2 מכונות באופן הבא – יוצרים את מכונה1-b1 באזור us-central1-b

gcloud compute instances create vm-1-b1 \
    --image-family debian-9 \
    --image-project debian-cloud \
    --tags tcp-lb \
    --zone us-central1-b \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
      sudo service apache2 restart
      echo '<!doctype html><html><body><h1>This is VM1-b1 in central1-b</h1></body></html>' | tee /var/www/html/index.html
      EOF"

יוצרים את מכונה 1-b2 באזור us-central1-b

gcloud compute instances create vm-1-b2 \
    --image-family debian-9 \
    --image-project debian-cloud \
    --tags tcp-lb \
    --zone us-central1-b \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
      sudo service apache2 restart
      echo '<!doctype html><html><body><h1>This is VM1-b2 in central1-b</h1></body></html>' | tee /var/www/html/index.html
      EOF"

יצירת קבוצת מופעים vm-ig1

gcloud compute instance-groups unmanaged create vm-ig1  --zone us-central1-b

יוצרים יציאה עם שם לקבוצת המופעים. בשיעור ה-Lab הזה נשתמש ביציאה 110

    gcloud compute instance-groups set-named-ports vm-ig1 \
--named-ports tcp 110:110 --zone us-central1-b

הוספת המופעים לקבוצת המופעים

gcloud compute instance-groups unmanaged add-instances vm-ig1 \
   --instances vm-1-b1,vm-1-b2 --zone us-central1-b

4. הגדרת מאזן העומסים

בשלב הבא ניצור בדיקת תקינות.

gcloud compute health-checks create tcp my-tcp-health-check --port 110

יצירת שירות לקצה העורפי

gcloud compute backend-services create my-tcp-lb  --global-health-checks --global \
--protocol TCP --health-checks my-tcp-health-check --timeout 5m --port-name tcp110

הוספת קבוצת המכונות לשירות הקצה העורפי

gcloud compute backend-services add-backend my-tcp-lb --global --instance-group \ vm-ig1 --instance-group-zone us-central1-b --balancing-mode UTILIZATION \ --max-utilization 0.8

הגדרת שרת proxy של TCP ביעד

gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE

שמירת כתובות IPv4 סטטיות גלובליות

כתובת ה-IP הזו תשמש אתכם כדי להגיע לשירות עם איזון עומסים.

gcloud compute addresses create tcp-lb-static-ipv4  --ip-version=IPV4   --global

הגדרת כללי העברה גלובליים לכתובת ה-IP של מאזן העומסים.

gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
    --global --target-tcp-proxy my-tcp-lb-target-proxy --address LB_STATIC_IPV4 \ --ports 110

5. יצירת כלל לחומת האש עבור מאזן העומסים בשרתי TCP Proxy

gcloud compute firewall-rules create allow-tcplb-and-health \
   --source-ranges 130.211.0.0/22,35.191.0.0/16 \
   --target-tags tcp-lb \
   --allow tcp:110

אחרי שיוצרים את מאזן העומסים, בודקים אותו באמצעות הפקודה הבאה

Curl LB_IP:110

בשלב הבא, יוצרים מכונות וירטואליות (VM) כדי לאמת את דחיית הגישה ל-LB

צריך ליצור 2 מופעים, לכל אחד מהם כתובת IP ציבורית, ולתת להם את השמות test-server1 ו-test-server2.

6. יצירת מדיניות אבטחה ב-Cloud Armor

בקטע הזה תיצרו כללי מדיניות לאבטחת ה-Backend ו-2 כללים במדיניות ב-Cloud Armor.

הכלל הראשון ימנע מסט מוגבל של כתובות IP לגשת למאזן העומסים של TCP על ידי הגדרת מדיניות אבטחה לדחיית כתובות IP מסוימות, והכלל השני יבצע הגבלת קצב של יצירת בקשות.

  1. ב-Cloud Shell(הוראות לשימוש ב-Cloud Shell מופיעות בקטע 'הגדרה ודרישות'), יוצרים מדיניות אבטחה של שירות לקצה העורפי בשם rate-limit-and-deny-tcp באופן הבא:
gcloud compute security-policies create rate-limit-and-deny-tcp \
    --description "policy for tcp proxy rate limiting and IP deny"

הוספת כללים למדיניות האבטחה

לאחר מכן מוסיפים כלל לרשימת הדחייה למדיניות Cloud Armor ‏rate-limit-and-deny-tcp.

gcloud compute security-policies rules create 1000 --action deny --security-policy \ rate-limit-and-deny-tcp --description "deny test-server1" --src-ip-ranges \ "enter-test-server-1ip-here"

הוספת כלל להגבלת קצב של יצירת בקשות למדיניות האבטחה של Cloud Armor‏ rate-limit-and-deny-tcp

gcloud compute security-policies rules create 3000   \ --security-policy=rate-limit-and-deny-tcp  \       
--expression="true"  --action=rate-based-ban  --rate-limit-threshold-count=5  \          
--rate-limit-threshold-interval-sec=60  --ban-duration-sec=300      \         
--conform-action=allow  --exceed-action=deny-404  --enforce-on-key=IP

צירוף מדיניות לשירות קצה עורפי של TCP Proxy:

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

gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp

הפעלת רישום ביומן ב-TCP Proxy Load Balancer

gcloud beta compute backend-services update my-tcp-lb \ 
--enable-logging --logging-sample-rate=1

7. אימות של כלל ברשימת הדחייה

כדי לוודא שכלל הרשימה לדחייה תקין, מתחברים לשרת הבדיקה שכתובת ה-IP שלו צוינה בכלל הרשימה לדחייה ומריצים את הפקודה הבאה:

Curl LB_IP:110

בקשות מיידיות עשויות להניב תגובה מ-LB, אבל צריך לחכות עד שהבקשה של curl תידחה או תיפסל, ואז לבדוק את היומנים ב-Cloud Logging כדי לוודא שרשומה ביומן עבור כלל דחיית כתובת ה-IP הופעל.

עוברים אל Cloud Logging ובקטע Resources (משאבים) בוחרים את סוג המשאב tcp_ssl_proxy_rule ומגדירים את יעד ה-backend כ-my-tcp-lb.

אחרי שמגדירים את המשאבים לסינון, אפשר לוודא שכלל דחיית כתובות ה-IP פועל לפי ערך העדיפות 1000 ברשומה ביומן, ושהפעולה המוגדרת DENY פועלת כי שתיהן הוגדרו לפי כלל הדחייה וכתובת ה-IP שנדחית, כמו שמוצג בהמשך

db9b835e0360dcaf.png

8. אימות של כלל להגבלת קצב של יצירת בקשות

כדי לוודא שכלל הגבלת הקצב פועל, שולחים הרבה בקשות בפרק זמן קצר שחורג מהסף שהוגדר (5 בקשות בדקה).

אחרי שמסיימים, לוחצים על 'הצגת יומנים' בשירות Cloud Armor. הפעולה הזו מעבירה אתכם אל Cloud Logging, שם תוכלו לסנן את היומנים לפי מאזן העומסים כדי לראות את היומנים של Cloud Armor כשהם מגיעים.

רשומה של הגבלת קצב של יצירת בקשות צריכה להיראות כמו בצילום המסך שלמטה. אפשר לוודא שכלל הגבלת קצב של יצירת בקשות פועל לפי הערך PRIORITY של 3,000 ברשומה ביומן, ולפי הפעולה שהוגדרה, הפעולה RATE BASED BAN פועלת לפי ההוראות של כלל הגבלת קצב של יצירת בקשות.

37c76e5d7532623.png

9. ניקוי הסביבה

חשוב למחוק את התשתית שנוצרה כדי להימנע מחיובים על תשתית שלא נמצאת בשימוש.

הדרך הכי מהירה היא למחוק את הפרויקט כולו ב-GCP כדי לוודא שלא נשארו משאבים לא פעילים ללא טיפול.עם זאת, אפשר למחוק את המשאבים בנפרד באמצעות הפקודות הבאות

מאזן העומסים TCP Proxy

gcloud compute target-tcp-proxies delete my-tcp-lb

קבוצת המופעים

gcloud compute instance-groups unmanaged delete vm-ig1

שתי מכונות וירטואליות לבדיקה נוצרו

gcloud compute instances delete Instance_name --zone=instance_zone

השירות לקצה העורפי

gcloud compute backend-services delete BACKEND_SERVICE_NAME

הכללים של Cloud Armor במסגרת המדיניות

gcloud compute security-policies rules delete 1000  \ --security-policy=rate-limit-and-deny-tcp && 
gcloud compute security-policies rules delete 3000  \ --security-policy=rate-limit-and-deny-tcp

מדיניות האבטחה של Cloud Armor

gcloud compute security-policies delete rate-limit-and-deny-tcp