أجهزة موازنة حمل الخادم الوكيل في Cloud Armor وTCP/SSL - درس تطبيقي حول الترميز وقائمة منع عناوين IP

1. مقدمة

يتم نشر موازنة الحمل في Google Cloud على حافة شبكة Google في نقاط التواجد (POP) التابعة لـ Google حول العالم. تنتقل زيارات المستخدمين الموجّهة إلى أداة موازنة حمل لخادم TCP الوكيل إلى نقطة التواجد الأقرب إلى المستخدم، ثم تتم موازنة الحمل على شبكة Google العالمية إلى الخلفية الأقرب التي تتوفّر فيها سعة كافية.

‫Cloud Armor هو نظام رصد الهجمات الموزَّعة لحجب الخدمة وجدار حماية تطبيقات الويب (WAF) من Google. ترتبط خدمة Cloud Armor بشكل وثيق بخدمة "موازنة الحمل المستندة إلى وكيل TCP" في Google Cloud، وتتيح لك فحص حركة البيانات الواردة بحثًا عن الطلبات غير المرغوب فيها. تتيح لك ميزة تحديد المعدّل في هذه الخدمة تقليل عدد الزيارات إلى موارد الخلفية استنادًا إلى حجم الطلبات، كما تمنع الزيارات غير المرغوب فيها من استهلاك الموارد على شبكة السحابة الإلكترونية الخاصة الافتراضية (VPC).

تتيح لك أجهزة موازنة الحمل لخادم TCP/SSL الوكيل في Google Cloud توجيه زيارات من نوع TCP/ SSL بين خدمات الخلفية.

في هذا الدرس التطبيقي حول الترميز، ستنشئ جهاز موازنة حمل وكيل TCP/SSL مع خدمة خلفية، وستستخدم Cloud Armor للحدّ من إمكانية الوصول إلى جهاز موازنة الحمل لمجموعة محدّدة فقط من أجهزة المستخدمين.

be33dadf836374bb.png

أهداف الدورة التعليمية

  • كيفية إنشاء أداة موازنة حمل لخادم وكيل TCP/SSL
  • كيفية إنشاء سياسة أمان في Cloud Armor
  • كيفية إنشاء قاعدة قائمة عناوين IP المحظورة لجهاز موازنة الحمل الخاص بخادم وكيل TCP/SSL في Cloud Armor
  • كيفية إنشاء قاعدة للحدّ من معدّل الزحف لجهاز موازنة الحمل الخاص بخادم وكيل TCP في Cloud Armor
  • كيفية إضافة سياسة الأمان إلى خدمة خلفية لموازنة الحمل TCP/SSL

المتطلبات

  • معرفة أساسية بخدمة Google Compute Engine ( codelab)
  • معرفة أساسية بالشبكات وبروتوكول TCP/IP
  • معرفة أساسية بسطر الأوامر في نظامَي Unix وLinux
  • من المفيد أن تكون قد أكملت جولة في الشبكات في Google Cloud Platform باستخدام الشبكات في Google Cloud.

2. المتطلبات

إعداد البيئة بوتيرة ذاتية

  1. سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

ملاحظة: يمكنك الوصول بسهولة إلى Cloud Console من خلال تذكُّر عنوان URL الخاص بها، وهو console.cloud.google.com.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

تذكَّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (الاسم أعلاه مستخدَم حاليًا ولن يكون متاحًا لك، نأسف لذلك). سيُشار إليه لاحقًا في هذا الدرس التطبيقي حول الترميز باسم PROJECT_ID.

ملاحظة: إذا كنت تستخدم حساب Gmail، يمكنك ترك الموقع الجغرافي التلقائي مضبوطًا على "بدون مؤسسة". في حال كنت تستخدم حسابًا على Google Workspace، اختَر موقعًا جغرافيًا مناسبًا لمؤسستك.

  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد Google Cloud.

لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن لم تكلفك شيئًا على الإطلاق. احرص على اتّباع أي تعليمات في قسم "التنظيف" الذي ينصحك بكيفية إيقاف الموارد حتى لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي حول الترميز Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.

من وحدة تحكّم Google Cloud Platform، انقر على رمز 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

تفعيل واجهات برمجة التطبيقات

تفعيل جميع الخدمات اللازمة

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com        
gcloud services enable monitoring.googleapis.com

3- إنشاء خدمات الخلفية

أنشئ مثيلَين على النحو التالي: أنشئ 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

إضافة مجموعة الأجهزة الافتراضية إلى خدمة الخلفية

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 الخاص بموازنة التحميل.

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

بعد ذلك، أنشئ أجهزة افتراضية للتحقّق من رفض الوصول إلى موازن التحميل.

عليك إنشاء مثيلَين، لكلّ منهما عنوان IP عام، وتسميتهما test-server1 وtest-server2.

6. إنشاء سياسة أمان في Cloud Armor

في هذا القسم، ستنشئ سياسة أمان للخادم الخلفي وقاعدتَين في السياسة في Cloud Armor.

سترفض القاعدة الأولى مجموعة محدودة من عناوين IP الوصول إلى موازن تحميل TCP من خلال ضبط سياسة أمان لرفض عناوين IP معيّنة، وستنفّذ القاعدة الثانية عملية الحدّ من المعدّل.

  1. في Cloud Shell(راجِع "بدء 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 الوكيل.

gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp

تفعيل التسجيل في موازن الحمل الخاص بخادم وكيل TCP

gcloud beta compute backend-services update my-tcp-lb \ 
--enable-logging --logging-sample-rate=1

7. التحقّق من صحة قاعدة قائمة الرفض

تحقَّق من صحة قاعدة قائمة الرفض من خلال تسجيل الدخول إلى الخادم التجريبي الذي تم تحديد عنوان IP الخاص به في قاعدة قائمة الرفض وتشغيل الأمر التالي

Curl LB_IP:110

قد تقدّم الطلبات الفورية استجابة من موازن التحميل، ولكن عليك الانتظار إلى أن يتم رفض طلب curl أو إسقاطه، ثم إلقاء نظرة على السجلات في Cloud Logging للتحقّق من تفعيل إدخال السجل لقاعدة رفض عنوان IP.

انتقِل إلى Cloud Logging وضِمن المراجع، اختَر نوع المرجع "tcp_ssl_proxy_rule" واضبط هدف الخلفية على "my-tcp-lb".

باستخدام الموارد المحدّدة للفلترة، يمكننا التأكّد من أنّ قاعدة الرفض حسب عنوان IP سارية من قيمة الأولوية 1000 في إدخال في السجلّ، وأنّ الإجراء "رفض" الذي تم ضبطه سارٍ لأنّه تم توجيه كليهما من قاعدة الرفض، كما تم رفض عنوان IP كما هو موضّح أدناه.

db9b835e0360dcaf.png

8. التحقّق من صحة قاعدة تقييد المعدّل

تأكَّد من أنّ قاعدة الحدّ الأقصى لعدد الطلبات سارية من خلال إرسال العديد من الطلبات في إطار زمني قصير يتجاوز الحدّ المحدّد (5 طلبات في الدقيقة).

بعد الانتهاء من ذلك، انقر على "عرض السجلات" في خدمة Cloud Armor، وسيتم نقلك إلى Cloud Logging حيث يمكنك فلترة السجلات حسب موازنة الحمل للاطّلاع على سجلات Cloud Armor عند ورودها.

يجب أن يكون إدخال الحدّ الأقصى لعدد الطلبات في الدقيقة الواحدة مطابقًا للقطة الشاشة أدناه. يمكننا التأكّد من أنّ قاعدة الحدّ الأقصى لمعدّل الطلبات سارية من خلال قيمة الأولوية البالغة 3000 في إدخال في السجلّ ومن الإجراء الذي تمّ ضبطه، والإجراء "الحظر المستند إلى المعدّل" سارٍ كما هو موضّح في قاعدة الحدّ الأقصى لمعدّل الطلبات.

37c76e5d7532623.png

9- تنظيف البيئة

احرص على تنظيف البنية التحتية التي تم إنشاؤها لتجنُّب تكاليف التشغيل الخاصة بالبنية التحتية غير المستخدَمة.

أسرع طريقة هي حذف المشروع بأكمله في Google Cloud Platform لضمان عدم ترك أي موارد معلّقة بدون معالجة، ولكن يمكنك حذف الموارد الفردية باستخدام الأوامر التالية:

جهاز موازنة الحمل الخاص بخادم وكيل TCP

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

قواعد 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

سياسة الأمان في Cloud Armor

gcloud compute security-policies delete rate-limit-and-deny-tcp