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

أهداف الدورة التعليمية
- كيفية إنشاء أداة موازنة حمل لخادم وكيل TCP/SSL
- كيفية إنشاء سياسة أمان في Cloud Armor
- كيفية إنشاء قاعدة قائمة عناوين IP المحظورة لجهاز موازنة الحمل الخاص بخادم وكيل TCP/SSL في Cloud Armor
- كيفية إنشاء قاعدة للحدّ من عدد الطلبات لجهاز موازنة الحمل الخاص بخادم وكيل TCP في Cloud Armor
- كيفية إضافة سياسة الأمان إلى خدمة خلفية لموازنة الحمل في TCP/SSL
المتطلبات
- معرفة أساسية بخدمة Google Compute Engine ( درس تطبيقي حول الترميز)
- معرفة أساسية بالشبكات وبروتوكول TCP/IP
- معرفة أساسية بسطر الأوامر في نظامَي Unix وLinux
- من المفيد إكمال جولة في الشبكات على Google Cloud Platform باستخدام الشبكات في Google Cloud.
2. المتطلبات
إعداد بيئة الاختبار الذاتي
- سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
ملاحظة: يمكنك الوصول بسهولة إلى Cloud Console من خلال تذكُّر عنوان URL الخاص بها، وهو console.cloud.google.com.



تذكَّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (الاسم أعلاه مستخدَم حاليًا ولن يكون متاحًا لك، نأسف لذلك). سيُشار إليه لاحقًا في هذا الدرس التطبيقي حول الترميز باسم PROJECT_ID.
ملاحظة: إذا كنت تستخدم حساب Gmail، يمكنك ترك الموقع الجغرافي التلقائي مضبوطًا على "لا توجد مؤسسة". في حال كنت تستخدم حسابًا على Google Workspace، اختَر موقعًا جغرافيًا مناسبًا لمؤسستك.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد Google Cloud.
لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن وُجدت تكلفة على الإطلاق. احرص على اتّباع أي تعليمات في قسم "التنظيف" الذي ينصحك بكيفية إيقاف الموارد حتى لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي حول الترميز Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
من وحدة تحكّم Google Cloud Platform، انقر على رمز 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
تفعيل واجهات برمجة التطبيقات
تفعيل جميع الخدمات اللازمة
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 معيّنة، وستنفّذ القاعدة الثانية عملية الحدّ من المعدّل.
- في 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"
إضافة قاعدة الحدّ من عدد الطلبات إلى سياسة الأمان "rate-limit-and-deny-tcp" في Cloud Armor
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 الذي تم رفضه كما هو موضّح أدناه.

8. التحقّق من صحة قاعدة الحدّ الأقصى لمعدّل الزحف
تأكَّد من أنّ قاعدة الحدّ الأقصى لعدد الطلبات سارية من خلال إرسال العديد من الطلبات في إطار زمني قصير يتجاوز الحدّ المحدّد (5 طلبات في الدقيقة).
بعد الانتهاء من ذلك، انقر على "عرض السجلات" في خدمة Cloud Armor، وسيتم نقلك إلى Cloud Logging حيث يمكنك فلترة السجلات حسب موازن الحمل للاطّلاع على سجلات Cloud Armor عند ورودها.
يجب أن يكون إدخال الحدّ الأقصى لعدد الطلبات في الدقيقة الواحدة مطابقًا للقطة الشاشة أدناه. يمكننا التأكّد من أنّ قاعدة الحدّ الأقصى لعدد الطلبات سارية من قيمة الأولوية البالغة 3000 في إدخال في السجلّ ومن الإجراء الذي تمّ ضبطه، وأنّ الإجراء "الحظر المستند إلى المعدّل" سارٍ كما هو موضّح في قاعدة الحدّ الأقصى لعدد الطلبات.

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