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

1. مقدمه

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

7bc9d3ed0c03b54f.png

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

f0a40260147e71b1.png

شکل 1. Cloud Armor برای VM با حفاظت IP عمومی.

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

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

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

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

2. قبل از شروع

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

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

3. شبکه VPC هدف را ایجاد کنید

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

شبکه VPC

از Cloud Shell

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

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

از Cloud Shell

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

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

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

از 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 اجازه دهد به نمونه های VM شما متصل شود.

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

4. نمونه های VM هدف را ایجاد کنید

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

از 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

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

از Cloud Shell

 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

6. Network Edge Security Policy را با قوانین پیش فرض ایجاد کنید

خط مشی امنیتی لبه شبکه را ایجاد کنید

از Cloud Shell

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

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

از Cloud Shell

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

7. خط مشی امنیتی لبه شبکه را با قوانین پیکربندی استفاده شده ایجاد کنید

UDP از پیش تعریف شده توسط کاربر تعدیل شده و در سیاست زره ابری پیکربندی شده است. بسته ای با این "مقادیر افست" بررسی سیاست را پاس می کند و به پشتیبان ماشین مجازی ارسال می کند. در مثال زیر دو «offset» با مقادیر متفاوت تعریف می کنیم.

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

مقدار دوم 8 بایت هدر UDP جابجا شده است، دقیقاً با 4 بایت مطابقت دارد 0x12345678

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

cbfdaeb93292e07b.png

از Cloud Shell

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

8. سیاست امنیتی را به VM هدف متصل کنید

از Cloud Shell خط مشی امنیتی را به VM محافظت شده متصل کنید.

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 توصیف VM هدف، خواهید دید که 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 سیاست امنیتی را از VM محافظت شده جدا کنید.

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

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

شبکه تست VPC را ایجاد کنید

از Cloud Shell

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

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

از Cloud Shell

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

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

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

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

تست VM را ایجاد کنید

از Cloud Shell

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

10. تأیید

وارد کنسول VM تست شده و packit مولد بسته را نصب کنید.

sudo apt install packit

پس از طراحی افست UDP، از packit برای تولید بسته های UDP استفاده کنید. ما یک بسته (-t udp) را از رابط (-s ens4) آدرس IP منبع (-s 10.0.1.2) با پورت های مبدأ (-S 10000) به آدرس IP مقصد (-d 35.240.148.100) VM شبیه سازی می کنیم. -D 10000). محتوای بسته با مقادیر مطابقت دارد (-p '0x 17 00 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

در Target VM، 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

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

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

11. تله متری

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

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

ترافیک با حجم بالا را با یک فرمان 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

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

b11ba15d87f99775.png

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

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

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

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

برای تکمیل کد لبه تبریک می گویم.

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

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