1. مقدمه
سیاستهای امنیتی Cloud Armor برای پیکربندی قوانین تعریفشده توسط کاربر برای فیلتر کردن ترافیک در لبه شبکه Google، در بالادست زیرساخت شما استفاده میشود. خطمشیهای امنیتی لبه شبکه را میتوان برای کمک به محافظت و اجازه یا مسدود کردن ترافیکی که انواع نقطه پایانی زیر را هدف قرار میدهد استفاده کرد: متعادلکننده بار شبکه، انتقال پروتکل و ماشینهای مجازی با IP عمومی.
در این آزمایشگاه کد، نحوه پیکربندی سیاست های امنیتی Cloud Armor را با قوانین تعریف شده توسط کاربر برای جلوگیری از حملات DDoS به نمایش می گذاریم.
شکل 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 تبدیل می شود.
از 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 فیلتر و بر اساس مسدود شده گروه بندی می شود. خط آبی ترافیک مجاز توسط قوانین خط مشی را نشان می دهد. خط سبز نشان دهنده ترافیک مسدود شده توسط قوانین خط مشی است.
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 با قوانین تعریف شده توسط مشتری