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

1. מבוא

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

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

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

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

be33dadf836374bb.png

מה תלמדו

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

למה תזדקק?

  • ידע בסיסי ב-Google Compute Engine ( codelab)
  • ידע בסיסי בנושא רישות ו-TCP/IP
  • ידע בסיסי בשורת הפקודה Unix/Linux
  • כדאי להשלים סיור של רשתות ב-GCP עם רשתות ב-Google Cloud

2. דרישות

הגדרת סביבה בקצב אישי

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

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

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

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

הפעלת Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

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

ב-Inside 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 של 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, אפשר לעיין בקטע Start Cloud Shell בקטע 'הגדרה ודרישות')
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 ובקטע 'משאבים' בוחרים את סוג המשאב בתור 'tcp_ssl_proxy_rule'. ולהגדיר את היעד של הקצה העורפי כ-"my-tcp-lb".

בעזרת המשאבים שהוגדרו לסינון, אנחנו יכולים לוודא שכלל הדחייה של כתובת ה-IP פועל מהערך PRIORITY של 1,000 ברשומה ביומן, והפעולה המוגדרת "DENY" תקפה כי הן קיבלו הוראה מכלל הדחייה ובקשת ה-IP נדחתה, כפי שמוצג למטה

db9b835e0360dcaf.png

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

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

בסיום, לוחצים על הצגת היומנים בשירות 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

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

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

מדיניות האבטחה של שריון הענן

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