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

1. מבוא

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

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

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

במעבדה הזו תלמדו ליצור מאזן עומסים מסוג 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 ויוצרים פרויקט חדש או משתמשים מחדש בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

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

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

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

הפעלת Cloud Shell

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

במסוף GCP, לוחצים על סמל 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 מכונות באופן הבא: יוצרים את instance1-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 של ה-LB.

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

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

צריך ליצור 2 מכונות, לכל אחת מהן כתובת IP ציבורית, בשמות test-server1 ו-test-server2.

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

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

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

  1. ב-Cloud Shell(לקבלת הוראות לשימוש ב-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:

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

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

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

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 ומגדירים את היעד לקצה העורפי כ-my-tcp-lb.

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

שתי מכונות ה-VM לבדיקה שנוצרו

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