Codelab TCP Proxy - הגבלת קצב ורשימת דחיית כתובות IP עם מאזן עומסים של TCP Proxy

1. מבוא

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

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

מאזני עומסים (LB) של שרתי proxy ל-TCP/SSL ב-Google Cloud מאפשרים לכם להשתמש בשרת proxy לתעבורת נתונים מסוג TCP/ SSL בין שירותי הקצה העורפיים.

במעבדה הזו תיצרו מאזן עומסים TCP/SSL עם שירות קצה עורפי, ותגבילו את הגישה למאזן העומסים רק לקבוצה ספציפית של לקוחות משתמשים.

be33dadf836374bb.png

מה תלמדו

  • איך יוצרים מאזן עומסים של TCP/SSL proxy
  • איך יוצרים מדיניות אבטחה של Cloud Armor
  • איך יוצרים כלל של רשימת כתובות IP אסורות למאזן עומסים של שרת proxy ל-TCP/SSL ב-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.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.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) כדי לאמת את דחיית הגישה למאזן העומסים

צריך ליצור 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

הפעלת רישום ביומן במאזן עומסים של שרת proxy ל-TCP

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

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

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

Curl LB_IP:110

בקשות מיידיות עשויות להניב תגובה ממאזן העומסים, אבל צריך לחכות עד שהבקשה של 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 של 3000 ברשומה ביומן ולפי הפעולה שהוגדרה, הפעולה "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