Cloud Armor برای NLB/VM با قوانین تعریف شده توسط کاربر

۱. مقدمه

سیاست‌های امنیتی Cloud Armor برای پیکربندی قوانین تعریف‌شده توسط کاربر جهت فیلتر کردن ترافیک در لبه شبکه گوگل، بالادست از زیرساخت شما، استفاده می‌شوند. سیاست‌های امنیتی Network Edge می‌توانند برای کمک به محافظت و اجازه یا مسدود کردن ترافیک هدف قرار دهنده انواع نقاط پایانی زیر استفاده شوند: متعادل‌کننده بار شبکه، انتقال پروتکل و ماشین‌های مجازی با IPهای عمومی.

7bc9d3ed0c03b54f.png

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

f0a40260147e71b1.png

شکل 1. زره ابری برای ماشین مجازی با حفاظت از IP عمومی.

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

  • سیاست‌های امنیتی Cloud Armor با پیکربندی قوانین تعریف‌شده توسط کاربر
  • پیکربندی‌ها و آزمایش‌های UDP Offset

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

  • آشنایی با TCP/IP
  • آشنایی با خط فرمان یونیکس/لینوکس

۲. قبل از شروع

داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

۳. ایجاد شبکه VPC هدف

در بخش بعدی، شبکه‌های VPC و پیکربندی‌های شبکه مرتبط را راه‌اندازی خواهیم کرد. سیاست امنیتی لبه شبکه Cloud Armor منطقه‌ای است، ما تمام منابع مرتبط را در منطقه آسیا-جنوب شرقی راه‌اندازی می‌کنیم.

شبکه VPC

از پوسته ابری

gcloud compute networks create ca4nlb --project=$prodproject --subnet-mode=custom

ایجاد زیرشبکه

از پوسته ابری

gcloud compute networks subnets create ca4nlb-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=ca4nlb --region=asia-southeast1

ایجاد قوانین فایروال

در این بخش، یک قانون فایروال اضافه خواهیم کرد تا ترافیک UDP مورد انتظار به پورت ۱۰۰۰۰ منتقل شود.

از Cloud Shell یک قانون فایروال ایجاد کنید تا پورت UDP 10000 را برای آزمایش‌های بعدی باز کند.

gcloud compute firewall-rules create ca4nlb-udp10000 --allow udp:10000 --network ca4nlb --source-ranges 0.0.0.0/0 --enable-logging

از Cloud Shell یک قانون فایروال ایجاد کنید تا به IAP اجازه اتصال به نمونه‌های ماشین مجازی شما را بدهد.

gcloud compute firewall-rules create ca4nlb-iap-prod --network ca4nlb --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

۴. ایجاد نمونه‌های ماشین مجازی هدف

یک ماشین مجازی هدف برای آزمایش سیاست‌های امنیتی ایجاد کنید. این ماشین مجازی باید دارای یک آدرس IP عمومی و پورت UDP باز ۱۰۰۰۰ باشد.

از Cloud Shell نمونه‌ای از targetvm ایجاد کنید

gcloud compute instances create targetvm \
--zone=asia-southeast1-b \
--image-family=debian-11 \
--image-project=debian-cloud \
--network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=ca4nlb-asia-southeast1 \
--shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring

۵. پیکربندی محافظت پیشرفته شبکه در برابر DDoS

از پوسته ابری

 gcloud compute security-policies create ca_advanced_ddos \
     --type CLOUD_ARMOR_NETWORK \
     --region asia-southeast1

 gcloud compute security-policies update ca_advanced_ddos \
     --network-ddos-protection ADVANCED \
     --region asia-southeast1

 gcloud compute network-edge-security-services create caedgepolicy \
     --security-policy ca_advanced_ddos \
     --region asia-southeast1

۶. ایجاد سیاست امنیتی لبه شبکه با قوانین پیش‌فرض

ایجاد سیاست امنیتی لبه شبکه

از پوسته ابری

gcloud alpha compute security-policies create customnetworkedge --type=CLOUD_ARMOR_NETWORK --region=asia-southeast1

اصلاح قانون پیش‌فرض

از پوسته ابری

gcloud alpha compute security-policies rules update 2147483647 --security-policy=customnetworkedge --action=deny --region=asia-southeast1

۷. ایجاد سیاست امنیتی لبه شبکه با استفاده از قوانین پیکربندی شده

آفست UDP از پیش تعریف شده توسط کاربر و پیکربندی شده در سیاست cloud armor. بسته‌ای با این "مقادیر آفست" از بررسی سیاست عبور کرده و به ماشین مجازی backend ارسال می‌شود. در مثال زیر، دو "آفست" با مقادیر مختلف تعریف خواهیم کرد.

مقدار اول درست بعد از هدر UDP است، دقیقاً با ۲ بایت 0x1700 مطابقت دارد.

مقدار دوم ۸ بایت از هدر UDP را جابجا می‌کند، دقیقاً با ۴ بایت 0x12345678 مطابقت دارد.

مقدار از پیش تعریف شده بالاتر به نمای بیت بسته UDP تبدیل می‌شود.

cbfdaeb93292e07b.png

از پوسته ابری

gcloud alpha compute security-policies add-user-defined-field customnetworkedge \
--user-defined-field-name=SIG1_AT_0 \
--base=udp --offset=8 --size=2 --mask=0xFF00 \
--region=asia-southeast1

gcloud alpha compute security-policies add-user-defined-field customnetworkedge \
--user-defined-field-name=SIG2_AT_8 \
--base=udp --offset=16 --size=4 --mask=0xFFFFFFFF \
--region=asia-southeast1

gcloud alpha compute security-policies rules create 1000 \
--security-policy=customnetworkedge \
--network-user-defined-fields="SIG1_AT_0;0x1700,SIG2_AT_8;0x12345678" \
--action=allow --region=asia-southeast1

۸. سیاست امنیتی را به ماشین مجازی هدف متصل کنید

از Cloud Shell، سیاست امنیتی را به ماشین مجازی محافظت‌شده متصل کنید.

gcloud alpha compute instances network-interfaces update targetvm \
--security-policy=customnetworkedge \
--security-policy-region=asia-southeast1 \
--network-interface=nic0 \
--zone=asia-southeast1-b

از Cloud Shell، ماشین مجازی هدف را توصیف کنید، خواهید دید که securityPolicy پیوست شده است. IP عمومی را برای آزمایش‌های بعدی ثبت کنید.

gcloud alpha compute instances describe targetvm --zone=asia-southeast1-b

networkInterfaces:
- accessConfigs:
  - kind: compute#accessConfig
    name: External NAT
    natIP: 35.240.148.100
    networkTier: PREMIUM
    securityPolicy: https://www.googleapis.com/compute/alpha/projects/<project>/regions/asia-southeast1/securityPolicies/customnetworkedge

از Cloud Shell، سیاست امنیتی را از ماشین مجازی محافظت‌شده جدا کنید.

gcloud alpha compute instances network-interfaces update targetvm \
--network-interface=nic0 \
--zone=asia-southeast1-b \
--security-policy= 

۹. منابع آزمون را آماده کنید.

ایجاد شبکه آزمایشی VPC

از پوسته ابری

gcloud compute networks create test --project=$prodproject --subnet-mode=custom

ایجاد زیرشبکه آزمایشی

از پوسته ابری

gcloud compute networks subnets create test-asia-southeast1 --project=$prodproject --range=10.0.1.0/24 --network=test --region=asia-southeast1

ایجاد فایروال

از Cloud Shell یک قانون فایروال ایجاد کنید تا به IAP اجازه اتصال به نمونه‌های ماشین مجازی شما را بدهد.

gcloud compute firewall-rules create test-iap-prod --network test --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

ایجاد ماشین مجازی آزمایشی

از پوسته ابری

gcloud compute instances create test01 \
    --zone=asia-southeast1-b \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=test-asia-southeast1 \
    --shielded-secure-boot \
    --shielded-vtpm \
    --shielded-integrity-monitoring

۱۰. تأیید

وارد کنسول ماشین مجازی شوید و Packet Generator packit نصب کنید.

sudo apt install packit

با پیروی از طراحی آفست UDP، از packit برای تولید بسته‌های UDP استفاده می‌کنیم. ما یک بسته (-t udp) را از رابط (-s ens4) با آدرس IP منبع (-s 10.0.1.2) با پورت‌های منبع (-S 10000) به آدرس IP مقصد targetVM (-d 35.240.148.100) با پورت‌های مقصد (-D 10000) شبیه‌سازی می‌کنیم. محتوای بسته با مقادیر (-p '0x 17 00 00 00 00 00 00 12 34 56 78') مطابقت دارد. ما (-c 4) بسته ارسال خواهیم کرد.

sudo packit -m inject -t UDP -i ens4 -s 10.0.1.2 -d 35.240.148.100 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 4

در ماشین مجازی هدف، دستور tcpdump را برای دریافت بسته UDP اجرا کنید.

sudo tcpdump port 10000 -v -n 

tcpdump: listening on ens4, link-type EN10MB (Ethernet), snapshot length 262144 bytes
06:36:18.434106 IP (tos 0x0, ttl 128, id 17173, offset 0, flags [none], proto UDP (17), length 40)
    35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:19.433656 IP (tos 0x0, ttl 128, id 55641, offset 0, flags [none], proto UDP (17), length 40)
    35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:20.433935 IP (tos 0x0, ttl 128, id 27161, offset 0, flags [none], proto UDP (17), length 40)
    35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12
06:36:21.434150 IP (tos 0x0, ttl 128, id 46782, offset 0, flags [none], proto UDP (17), length 40)
    35.197.157.140.10000 > 10.0.0.2.10000: UDP, length 12

اگر الگوهای ترافیک را در ماشین مجازی آزمایشی تغییر دهیم، نمی‌توانیم هیچ بسته‌ای را در ماشین مجازی هدف ضبط کنیم.

sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 33 33 00 00 00 00 00 00 12 34 56 78' -c 4

۱۱. تله‌متری

Cloud Metric را باز کنید، از MQL زیر برای جستجوی داده‌های تله‌متری NetworkSecurityPolicy استفاده کنید.

fetch networksecurity.googleapis.com/RegionalNetworkSecurityPolicy
| metric 'networksecurity.googleapis.com/l3/external/packet_count'
| filter (resource.policy_name == 'customnetworkedge')
| align rate(1m)
| every 1m
| group_by [metric.blocked], [value_packet_count_mean: mean(value.packet_count)]
| group_by 1m, [value_packet_count_mean_mean: mean(value_packet_count_mean)]
| every 1m

با دستور match offset ترافیک با حجم بالا ایجاد کنید.

sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 17 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001

[result]
Injected: 1000000  Packets/Sec: 10309.27  Bytes/Sec: 412371.13  Errors: 0

با یک دستور unmatch offset ترافیک با حجم بالا ایجاد کنید.

sudo packit -m inject -t UDP -i ens4 -s 10.148.0.6 -d 34.87.79.31 -S 10000 -D 10000 -p '0x 11 00 00 00 00 00 00 00 12 34 56 78' -c 1000000 -w 0.001

[result]
Injected: 1000000  Packets/Sec: 10309.27  Bytes/Sec: 412371.13  Errors: 0

تله‌متری بر اساس نام خط‌مشی فیلتر شده و بر اساس مسدود شده گروه‌بندی می‌شود. خط آبی نشان‌دهنده ترافیک مجاز توسط قوانین خط‌مشی است. خط سبز نشان‌دهنده ترافیک مسدود شده توسط قوانین خط‌مشی است.

b11ba15d87f99775.png

۱۲. مراحل پاکسازی

از یک پوسته ابری واحد در ترمینال، اجزای آزمایشگاه را حذف کنید

gcloud compute instances delete targetvm --zone=asia-southeast1-b

gcloud compute firewall-rules delete ca4nlb-udp10000

gcloud compute firewall-rules delete ca4nlb-iap-prod

gcloud compute networks subnets delete ca4nlb-asia-southeast1 --region=asia-southeast1

gcloud compute networks delete ca4nlb

gcloud alpha compute security-policies delete customnetworkedge --region=asia-southeast1

gcloud alpha compute network-edge-security-services delete caedgepolicy --region=asia-southeast1

gcloud alpha compute security-policies delete ca_advanced_ddos --region=asia-southeast1

gcloud compute instances delete test01 --zone=asia-southeast1-b

gcloud compute firewall-rules delete test-iap-prod

gcloud compute networks subnets delete test-asia-southeast1 --region=asia-southeast1

gcloud compute networks delete test

۱۳. تبریک می‌گویم!

تبریک می‌گویم که آزمایشگاه کد را تمام کردی.

آنچه ما پوشش داده‌ایم

  • سیاست‌های امنیتی Cloud Armor با قوانین تعریف‌شده توسط مشتری