1. مقدمه
توازن بار Google Cloud در لبه شبکه Google در نقاط حضور Google (POP) در سراسر جهان مستقر شده است. ترافیک کاربر هدایتشده به متعادلکننده بار TCP Proxy وارد POP نزدیکترین کاربر به کاربر میشود و سپس از طریق شبکه جهانی Google به نزدیکترین باطن که ظرفیت کافی در دسترس دارد، بارگذاری میشود.
Cloud Armor سیستم تشخیص انکار سرویس و فایروال برنامه وب (WAF) توزیع شده گوگل است. Cloud Armor به شدت با Google Cloud TCP Proxy Load Balancer همراه است و به شما امکان می دهد ترافیک ورودی را برای درخواست های ناخواسته بازجویی کنید. ویژگی محدود کننده نرخ این سرویس به شما امکان می دهد ترافیک را به منابع پشتیبان بر اساس حجم درخواست کاهش دهید و از مصرف ترافیک ناخواسته در شبکه Virtual Private Cloud (VPC) شما جلوگیری می کند.
متعادل کننده بار پروکسی Google Cloud TCP/SSL به شما این امکان را می دهد که ترافیک نوع TCP/SSL را در میان سرویس های باطن خود پروکسی کنید.
در این کد لبه، شما یک متعادل کننده بار پروکسی TCP/SSL با یک سرویس باطن ایجاد می کنید و از Cloud Armor برای محدود کردن دسترسی به متعادل کننده بار فقط به مجموعه خاصی از مشتریان کاربر استفاده می کنید.
چیزی که یاد خواهید گرفت
- نحوه ایجاد یک متعادل کننده بار پروکسی TCP/SSL
- نحوه ایجاد سیاست امنیتی Cloud Armor
- نحوه ایجاد قانون لیست انکار IP برای متعادل کننده بار پروکسی TCP/SSL در Cloud Armor
- نحوه ایجاد یک قانون محدود کننده نرخ برای متعادل کننده بار پروکسی TCP در Cloud Armor
- نحوه افزودن خط مشی امنیتی به یک سرویس باطن متعادل کننده بار TCP/SSL
آنچه شما نیاز دارید
- دانش اولیه موتور محاسباتی گوگل ( کدآلب )
- دانش پایه شبکه و TCP/IP
- دانش اولیه خط فرمان یونیکس/لینوکس
- انجام یک تور شبکه در GCP با شبکه در Google Cloud مفید است
2. الزامات
تنظیم محیط خود به خود
- به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
توجه: با به خاطر سپردن آدرس اینترنتی آن یعنی console.cloud.google.com می توانید به راحتی به Cloud Console دسترسی پیدا کنید.
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID نامیده خواهد شد.
توجه: اگر از یک حساب جیمیل استفاده میکنید، میتوانید مکان پیشفرض را روی بدون سازمان بگذارید. اگر از حساب Google Workspace استفاده میکنید، مکانی را انتخاب کنید که برای سازمان شما منطقی باشد.
- در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در Cloud Console فعال کنید .
اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعملهای موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه میکند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
از کنسول GCP روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:
تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این آزمایشگاه به سادگی با یک مرورگر قابل انجام است.
قبل از شروع
در داخل 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
3. خدمات باطن را ایجاد کنید
2 نمونه به صورت زیر ایجاد کنید - instance1-b1 را در ناحیه 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"
نمونه 1-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
یک پورت با نام برای گروه نمونه ایجاد کنید. برای این آزمایشگاه از پورت 110 استفاده خواهیم کرد
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
4. پیکربندی متعادل کننده بار
بعد، ما یک بررسی سلامت ایجاد می کنیم.
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
5. ایجاد یک قانون فایروال برای متعادل کننده بار پروکسی 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
بعد VM ها را برای اعتبارسنجی عدم دسترسی به LB ایجاد کنید
شما باید 2 نمونه ایجاد کنید که هر کدام با یک آدرس IP عمومی و با نام test-server1 و test-server2
6. یک سیاست امنیتی در Cloud Armor ایجاد کنید
در این بخش، یک خط مشی امنیتی باطن و 2 قانون در خط مشی در Cloud Armor ایجاد می کنید.
قانون اول با تنظیم یک خط مشی امنیتی برای انکار IP های خاص، مجموعه محدودی از IP ها را از دسترسی به TCP Load Balancer محروم می کند و قانون دوم محدودیت نرخ را انجام می دهد.
- در Cloud Shell (برای دستورالعملهای نحوه استفاده از Cloud Shell به «شروع پوسته ابری» در بخش «تنظیم و الزامات» مراجعه کنید)، یک خطمشی امنیتی سرویس پشتیبان به نام 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
خط مشی را به سرویس پشتیبان پروکسی TCP پیوست کنید:
دستور زیر را اجرا کنید تا مطمئن شوید که خط مشی امنیتی به سرویس پشتیبان TCP Proxy متصل است.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
ورود به سیستم TCP Proxy Load Balancer را فعال کنید
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. اعتبار سنجی قانون لیست انکار
با ورود به سرور آزمایشی که IP آن در قانون لیست انکار مشخص شده است، قانون لیست انکار را تأیید کنید و دستور زیر را اجرا کنید.
Curl LB_IP:110
درخواستهای فوری ممکن است از LB پاسخ دهند، اما منتظر بمانید تا درخواست curl رد یا حذف شود و سپس نگاهی به گزارشها در Cloud Logging بیندازید تا ورود log را برای اجرای قانون انکار IP تأیید کنید.
به Cloud Logging بروید و در زیر منابع، نوع منبع را به عنوان "tcp_ssl_proxy_rule" انتخاب کنید و هدف Backend را به عنوان "my-tcp-lb" تنظیم کنید.
با منابعی که برای فیلتر کردن تعریف شده است، میتوانیم تأیید کنیم که قانون انکار IP از مقدار PRIORITY 1000 در ورودی گزارش و عمل پیکربندی شده "DENY" همانطور که هر دو از قانون انکار و IP دستورالعمل داده شده بودند، اعمال میشود. مطابق شکل زیر رد می شود
8. اعتبار قانون محدود کردن نرخ
اعتبار سنجی قانون محدودیت نرخ با ارسال درخواست های زیادی در یک بازه زمانی کوتاه که از آستانه تعریف شده (5 درخواست در دقیقه) فراتر می رود، در حال اجرا است.
پس از انجام این کار، روی گزارشهای مشاهده در سرویس زره ابری کلیک کنید و این شما را به گزارشگیری ابری میبرد، جایی که میتوانید گزارشها را توسط متعادلکننده بار فیلتر کنید تا گزارشهای زره ابری را هنگام ورود مشاهده کنید.
ورودی محدود کننده نرخ باید مطابق تصویر زیر باشد. ما میتوانیم تأیید کنیم که قانون محدودیت نرخ از طریق مقدار PRIORITY 3000 در ورودی گزارش و از عملکرد پیکربندیشده، عمل "RATE BASED BAN" همانطور که از قانون محدود کردن نرخ دستورالعمل داده شده است، اعمال میشود.
9. پاکسازی محیط
حتماً زیرساخت ایجاد شده را تمیز کنید تا از هزینه های جاری زیرساخت های بلااستفاده جلوگیری کنید.
سریعترین راه این است که کل پروژه را در GCP حذف کنید تا اطمینان حاصل شود که هیچ منبع آویزان بدون مراقبت باقی نمی ماند. با این حال منابع فردی را با دستورات زیر حذف کنید.
متعادل کننده بار پروکسی TCP
gcloud compute target-tcp-proxies delete my-tcp-lb
گروه نمونه
gcloud compute instance-groups unmanaged delete vm-ig1
2 نمونه آزمایشی VM ایجاد شد
gcloud compute instances delete Instance_name --zone=instance_zone
سرویس باطن
gcloud compute backend-services delete BACKEND_SERVICE_NAME
Cloud Armor در خطمشی حاکم است
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