Cloud Armor و TCP/SSL Proxy Load Balancers - محدود کردن نرخ و لیست رد IP Codelab

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 برای محدود کردن دسترسی به متعادل کننده بار فقط به مجموعه خاصی از مشتریان کاربر استفاده می کنید.

be33dadf836374bb.png

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

  • نحوه ایجاد یک متعادل کننده بار پروکسی TCP/SSL
  • نحوه ایجاد سیاست امنیتی Cloud Armor
  • نحوه ایجاد قانون لیست انکار IP برای متعادل کننده بار پروکسی TCP/SSL در Cloud Armor
  • نحوه ایجاد یک قانون محدود کننده نرخ برای متعادل کننده بار پروکسی TCP در Cloud Armor
  • نحوه افزودن خط مشی امنیتی به یک سرویس باطن متعادل کننده بار TCP/SSL

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

  • دانش اولیه موتور محاسباتی گوگل ( کدآلب )
  • دانش پایه شبکه و TCP/IP
  • دانش اولیه خط فرمان یونیکس/لینوکس
  • انجام یک تور شبکه در GCP با شبکه در Google Cloud مفید است

2. الزامات

تنظیم محیط خود به خود

  1. به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

توجه: با به خاطر سپردن آدرس اینترنتی آن یعنی console.cloud.google.com می توانید به راحتی به Cloud Console دسترسی پیدا کنید.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID نامیده خواهد شد.

توجه: اگر از یک حساب جیمیل استفاده می‌کنید، می‌توانید مکان پیش‌فرض را روی بدون سازمان بگذارید. اگر از حساب Google Workspace استفاده می‌کنید، مکانی را انتخاب کنید که برای سازمان شما منطقی باشد.

  1. در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورت‌حساب را در Cloud Console فعال کنید .

اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعمل‌های موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه می‌کند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورت‌حساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

از کنسول GCP روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 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 محروم می کند و قانون دوم محدودیت نرخ را انجام می دهد.

  1. در 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 دستورالعمل داده شده بودند، اعمال می‌شود. مطابق شکل زیر رد می شود

db9b835e0360dcaf.png

8. اعتبار قانون محدود کردن نرخ

اعتبار سنجی قانون محدودیت نرخ با ارسال درخواست های زیادی در یک بازه زمانی کوتاه که از آستانه تعریف شده (5 درخواست در دقیقه) فراتر می رود، در حال اجرا است.

پس از انجام این کار، روی گزارش‌های مشاهده در سرویس زره ابری کلیک کنید و این شما را به گزارش‌گیری ابری می‌برد، جایی که می‌توانید گزارش‌ها را توسط متعادل‌کننده بار فیلتر کنید تا گزارش‌های زره ​​ابری را هنگام ورود مشاهده کنید.

ورودی محدود کننده نرخ باید مطابق تصویر زیر باشد. ما می‌توانیم تأیید کنیم که قانون محدودیت نرخ از طریق مقدار PRIORITY 3000 در ورودی گزارش و از عملکرد پیکربندی‌شده، عمل "RATE BASED BAN" همانطور که از قانون محدود کردن نرخ دستورالعمل داده شده است، اعمال می‌شود.

37c76e5d7532623.png

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