۱. مقدمه
تعادل بار گوگل کلود در لبه شبکه گوگل در نقاط حضور (POP) گوگل در سراسر جهان مستقر شده است. ترافیک کاربر که به یک متعادلکننده بار TCP Proxy هدایت میشود، وارد POP نزدیک به کاربر میشود و سپس از طریق شبکه جهانی گوگل به نزدیکترین backend که ظرفیت کافی در دسترس دارد، متعادل میشود.
کلود آرمور سیستم تشخیص حملات انکار سرویس توزیعشده و فایروال برنامههای وب (WAF) گوگل است. کلود آرمور به طور تنگاتنگی با متعادلکننده بار پروکسی TCP گوگل کلود مرتبط است و به شما امکان میدهد ترافیک ورودی را برای درخواستهای ناخواسته بررسی کنید. ویژگی محدودکننده نرخ این سرویس به شما امکان میدهد ترافیک منابع پشتیبان را بر اساس حجم درخواست محدود کنید و از مصرف منابع توسط ترافیک ناخواسته در شبکه ابر خصوصی مجازی (VPC) خود جلوگیری کنید.
متعادلکنندههای بار پروکسی TCP/SSL گوگل کلود به شما این امکان را میدهند که ترافیک نوع TCP/SSL را در میان سرویسهای بکاند خود پروکسی کنید.
در این آزمایشگاه کد، شما یک متعادلکننده بار پروکسی TCP/SSL با یک سرویس backend ایجاد خواهید کرد و از Cloud Armor برای محدود کردن دسترسی به متعادلکننده بار فقط به مجموعهای خاص از کلاینتهای کاربر استفاده خواهید کرد.

آنچه یاد خواهید گرفت
- نحوه ایجاد یک متعادل کننده بار پروکسی TCP/SSL
- نحوه ایجاد سیاست امنیتی Cloud Armor
- نحوه ایجاد قانون لیست رد IP برای متعادل کننده بار پروکسی TCP/SSL در Cloud Armor
- نحوه ایجاد یک قانون محدودکننده نرخ برای متعادلکننده بار پروکسی TCP در Cloud Armor
- نحوه اضافه کردن سیاست امنیتی به سرویس متعادل کننده بار TCP/SSL در backend
آنچه نیاز دارید
- آشنایی اولیه با موتور محاسباتی گوگل ( codelab )
- آشنایی اولیه با شبکه و TCP/IP
- دانش پایه خط فرمان یونیکس/لینوکس
- مفید است که یک دوره آموزشی شبکهسازی در GCP را با دوره Networking in the Google Cloud گذرانده باشید.
۲. الزامات
تنظیم محیط خودتنظیم
- وارد Cloud Console شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب Gmail یا Google Workspace ندارید، باید یکی ایجاد کنید .
توجه: شما میتوانید به راحتی با به خاطر سپردن آدرس اینترنتی (URL) کنسول ابری (Cloud Console)، که console.cloud.google.com است، به آن دسترسی پیدا کنید.



شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژههای Google Cloud (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً در این آزمایشگاه کد به آن PROJECT_ID گفته خواهد شد.
توجه: اگر از حساب Gmail استفاده میکنید، میتوانید مکان پیشفرض را روی «بدون سازمان» تنظیم کنید. اگر از حساب Google Workspace استفاده میکنید، مکانی را انتخاب کنید که برای سازمان شما منطقی باشد.
- در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .
اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعملهای بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش میدهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
شروع پوسته ابری
اگرچه میتوان از راه دور و از طریق لپتاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده خواهید کرد.
از کنسول GCP روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

آمادهسازی و اتصال به محیط فقط چند لحظه طول میکشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

این ماشین مجازی مجهز به تمام ابزارهای توسعه مورد نیاز شماست. این ماشین یک دایرکتوری خانگی دائمی ۵ گیگابایتی ارائه میدهد و روی فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. تمام کارهای شما در این آزمایشگاه را میتوان به سادگی با یک مرورگر انجام داد.
قبل از اینکه شروع کنی
داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
فعال کردن APIها
فعال کردن تمام سرویسهای لازم
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
۳. ایجاد سرویسهای بکاند
دو نمونه به شرح زیر ایجاد کنید - instance1-b1 را در zone us-central1-b ایجاد کنید
gcloud compute instances create vm-1-b1 \
--image-family debian-9 \
--image-project debian-cloud \
--tags tcp-lb \
--zone us-central1-b \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
sudo service apache2 restart
echo '<!doctype html><html><body><h1>This is VM1-b1 in central1-b</h1></body></html>' | tee /var/www/html/index.html
EOF"
نمونه ۱-b2 را در منطقه us-central1-b ایجاد کنید
gcloud compute instances create vm-1-b2 \
--image-family debian-9 \
--image-project debian-cloud \
--tags tcp-lb \
--zone us-central1-b \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
sudo service apache2 restart
echo '<!doctype html><html><body><h1>This is VM1-b2 in central1-b</h1></body></html>' | tee /var/www/html/index.html
EOF"
یک گروه نمونه vm-ig1 ایجاد کنید
gcloud compute instance-groups unmanaged create vm-ig1 --zone us-central1-b
یک پورت نامگذاری شده برای گروه نمونه ایجاد کنید. برای این آزمایش، ما از پورت ۱۱۰ استفاده خواهیم کرد.
gcloud compute instance-groups set-named-ports vm-ig1 \ --named-ports tcp 110:110 --zone us-central1-b
نمونهها را به گروه نمونه اضافه کنید
gcloud compute instance-groups unmanaged add-instances vm-ig1 \ --instances vm-1-b1,vm-1-b2 --zone us-central1-b
۴. پیکربندی متعادلکننده بار
در مرحله بعد، یک بررسی سلامت ایجاد خواهیم کرد.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
ایجاد یک سرویس بکاند
gcloud compute backend-services create my-tcp-lb --global-health-checks --global \ --protocol TCP --health-checks my-tcp-health-check --timeout 5m --port-name tcp110
گروه نمونه را به سرویس backend اضافه کنید
gcloud compute backend-services add-backend my-tcp-lb --global --instance-group \ vm-ig1 --instance-group-zone us-central1-b --balancing-mode UTILIZATION \ --max-utilization 0.8
پیکربندی یک پروکسی TCP هدف
gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE
رزرو آدرسهای IPv4 استاتیک جهانی
شما از این آدرس IP برای دسترسی به سرویس متعادلسازی بار خود استفاده خواهید کرد.
gcloud compute addresses create tcp-lb-static-ipv4 --ip-version=IPV4 --global
قوانین ارسال سراسری را برای آدرس IP LB پیکربندی کنید.
gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
--global --target-tcp-proxy my-tcp-lb-target-proxy --address LB_STATIC_IPV4 \ --ports 110
۵. ایجاد یک قانون فایروال برای متعادلکننده بار پروکسی TCP
gcloud compute firewall-rules create allow-tcplb-and-health \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --target-tags tcp-lb \ --allow tcp:110
پس از ایجاد متعادلکننده بار، آن را با دستور زیر آزمایش کنید.
Curl LB_IP:110
در مرحله بعد، ماشینهای مجازی را برای اعتبارسنجی عدم دسترسی به LB ایجاد کنید.
شما باید دو نمونه ایجاد کنید، هر کدام با یک آدرس IP عمومی و به نامهای test-server1 و test-server2
۶. ایجاد یک سیاست امنیتی در Cloud Armor
در این بخش، شما یک سیاست امنیتی backend و 2 قانون در سیاست Cloud Armor ایجاد خواهید کرد.
قانون اول با تنظیم یک سیاست امنیتی برای رد کردن IP های خاص، دسترسی مجموعه محدودی از IP ها به TCP Load Balancer را مسدود می کند و قانون دوم محدودیت سرعت را اجرا می کند.
- در Cloud Shell (برای دستورالعملهای نحوه استفاده از Cloud Shell به بخش «شروع Cloud Shell» در بخش «تنظیمات و الزامات» مراجعه کنید)، یک سیاست امنیتی سرویس backend به نام rate-limit-and-deny-tcp به شرح زیر ایجاد کنید:
gcloud compute security-policies create rate-limit-and-deny-tcp \
--description "policy for tcp proxy rate limiting and IP deny"
اضافه کردن قوانین به سیاست امنیتی
سپس یک قانون لیست انکار به سیاست Cloud Armor با عنوان "rate-limit-and-deny-tcp" اضافه کنید.
gcloud compute security-policies rules create 1000 --action deny --security-policy \ rate-limit-and-deny-tcp --description "deny test-server1" --src-ip-ranges \ "enter-test-server-1ip-here"
یک قانون محدودکننده نرخ به سیاست امنیتی Cloud Armor با عنوان "rate-limit-and-deny-tcp" اضافه کنید.
gcloud compute security-policies rules create 3000 \ --security-policy=rate-limit-and-deny-tcp \ --expression="true" --action=rate-based-ban --rate-limit-threshold-count=5 \ --rate-limit-threshold-interval-sec=60 --ban-duration-sec=300 \ --conform-action=allow --exceed-action=deny-404 --enforce-on-key=IP
سیاست را به سرویس backend TCP Proxy پیوست کنید:
دستور زیر را اجرا کنید تا مطمئن شوید که سیاست امنیتی به سرویس backend TCP Proxy متصل شده است.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
فعال کردن ورود به سیستم در متعادلکننده بار TCP Proxy
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
۷. اعتبارسنجی قانون لیست رد درخواستها
با ورود به سرور آزمایشی که IP آن در قانون لیست رد مشخص شده است، قانون لیست رد را تأیید کنید و دستور زیر را اجرا کنید
Curl LB_IP:110
درخواستهای فوری ممکن است از LB پاسخی دریافت کنند، اما صبر کنید تا درخواست curl رد یا حذف شود و سپس نگاهی به گزارشهای Cloud Logging بیندازید تا ورودی گزارش را برای فعال شدن قانون ip deny تأیید کنید.
به Cloud Logging بروید و در قسمت resources، نوع منبع را "tcp_ssl_proxy_rule" انتخاب کنید و backend target را "my-tcp-lb" تنظیم کنید.
با منابع تعریف شده برای فیلتر کردن، میتوانیم اعتبارسنجی کنیم که قانون رد IP از مقدار PRIORITY برابر با ۱۰۰۰ در ورودی لاگ و اقدام پیکربندی شده "DENY" فعال است، زیرا هر دو از قانون رد IP دستور گرفته شدهاند و IP همانطور که در زیر نشان داده شده است، رد میشود.

۸. اعتبارسنجی قانون محدودکننده نرخ
با ارسال درخواستهای زیاد در یک بازه زمانی کوتاه که از آستانه تعریفشده (۵ درخواست در دقیقه) فراتر میرود، قانون محدودیت سرعت را تأیید کنید.
پس از انجام این کار، روی مشاهده گزارشها در سرویس cloud armor کلیک کنید و این شما را به cloud logging میبرد که در آنجا میتوانید گزارشها را بر اساس متعادلکننده بار فیلتر کنید تا گزارشهای cloud armor را هنگام ورود مشاهده کنید.
یک ورودی با محدودیت نرخ باید مطابق تصویر زیر باشد. میتوانیم اعتبارسنجی کنیم که قانون محدودیت نرخ از مقدار اولویت ۳۰۰۰ در ورودی لاگ و از اقدام پیکربندیشده، فعال است، اقدام "ممنوعیت مبتنی بر نرخ" طبق دستورالعمل قانون محدودیت نرخ فعال است.

۹. پاکسازی محیط زیست
حتماً زیرساختهای ایجاد شده را پاکسازی کنید تا از هزینههای جاری زیرساختهای بلااستفاده جلوگیری شود.
سریعترین راه این است که کل پروژه را در GCP حذف کنید تا مطمئن شوید هیچ منبع معلقی بدون مراقبت باقی نمانده است. با این حال، منابع منفرد را با دستورات زیر حذف کنید
متعادلکننده بار TCP Proxy
gcloud compute target-tcp-proxies delete my-tcp-lb
گروه نمونه
gcloud compute instance-groups unmanaged delete vm-ig1
دو نمونه ماشین مجازی آزمایشی ایجاد شده
gcloud compute instances delete Instance_name --zone=instance_zone
سرویس بکاند
gcloud compute backend-services delete BACKEND_SERVICE_NAME
ابر زره پوش در چارچوب این سیاست حکمفرماست
gcloud compute security-policies rules delete 1000 \ --security-policy=rate-limit-and-deny-tcp && gcloud compute security-policies rules delete 3000 \ --security-policy=rate-limit-and-deny-tcp
سیاست امنیتی زره ابری
gcloud compute security-policies delete rate-limit-and-deny-tcp