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

1. مقدمة

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

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

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

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

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- إنشاء خدمات الخلفية

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

ثانيًا، عليك إنشاء أجهزة افتراضية للتحقُّق من رفض الوصول إلى جهاز LB.

يجب عليك إنشاء مثيلين، لكل منهما عنوان IP عام باسم test-server1 وtest-server2

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

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

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

  1. في Cloud Shell(يُرجى الرجوع إلى "Start Cloud Shell" ضِمن "الإعداد والمتطلبات" للحصول على تعليمات حول كيفية استخدام Cloud Shell)، أنشئ سياسة أمان خدمة خلفية تُسمَّى "معدل الحد الأقصى ورفض المعدَّل" على النحو التالي:
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

قد تتلقّى الطلبات الفورية ردًا من "مركز التحكّم" (LB) ولكن عليك الانتظار إلى أن يتم رفض طلب التجعّد أو حذفه، ثم الاطّلاع على السجلات في "تسجيل الدخول إلى السحابة الإلكترونية" للتحقّق من إدخال السجلّ الخاص بقاعدة منع عنوان IP التي يتم تشغيلها.

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

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

db9b835e0360dcaf.png

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

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

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

يجب أن يكون الإدخال المحدَّد لمعدّل الزحف كما هو موضّح في لقطة الشاشة أدناه. يمكننا التحقّق من سريان قاعدة الحدّ الأقصى لمعدّل الاستخدام من خلال قيمة PRIORITY التي تبلغ 3, 000 في إدخال السجلّ ومن الإجراء الذي تم ضبطه، يكون إجراء "حساب معدّل الإحالات الناجحة" (BAN) ساري المفعول وفقًا للتعليمات الواردة من قاعدة تقييد المعدّل.

37c76e5d7532623.png

9. نظافة البيئة

تأكد من تنظيف البنية الأساسية التي تم إنشاؤها لتجنب تشغيل البنية التحتية غير المستخدمة.

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

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

gcloud compute target-tcp-proxies delete my-tcp-lb

مجموعة المثيلات

gcloud compute instance-groups unmanaged delete vm-ig1

نسختا الجهاز الافتراضي (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

سياسة أمان Cloud Armor

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