Cloud Armor और टीसीपी/एसएसएल प्रॉक्सी लोड बैलेंसर - रेट सीमित करना और आईपी अस्वीकार करने वाली सूची कोडलैब (कोड बनाना सीखना)

1. परिचय

Google Cloud में लोड बैलेंसिंग की सुविधा, Google के नेटवर्क के एज पर डिप्लॉय की जाती है. यह सुविधा, दुनिया भर में मौजूद Google के पॉइंट ऑफ़ प्रेज़ेंस (पीओपी) में उपलब्ध होती है. टीसीपी प्रॉक्सी लोड बैलेंसर पर भेजे गए उपयोगकर्ता ट्रैफ़िक को, उपयोगकर्ता के सबसे नज़दीकी पीओपी में भेजा जाता है. इसके बाद, Google के ग्लोबल नेटवर्क पर लोड बैलेंस किया जाता है. ऐसा सबसे नज़दीकी बैकएंड पर किया जाता है, जहां ज़रूरत के मुताबिक क्षमता उपलब्ध हो.

Cloud Armor, Google का डिस्ट्रिब्यूटेड डिनायल ऑफ़ सर्विस और वेब ऐप्लिकेशन फ़ायरवॉल (डब्ल्यूएएफ़) का पता लगाने वाला सिस्टम है. Cloud Armor, Google Cloud TCP प्रॉक्सी लोड बैलेंसर के साथ मिलकर काम करता है. इससे आपको अवांछित अनुरोधों के लिए, आने वाले ट्रैफ़िक की जांच करने की सुविधा मिलती है. इस सेवा की दर सीमित करने की सुविधा की मदद से, अनुरोध की संख्या के आधार पर बैकएंड संसाधनों के ट्रैफ़िक को कम किया जा सकता है. साथ ही, अवांछित ट्रैफ़िक को आपके वर्चुअल प्राइवेट क्लाउड (वीपीसी) नेटवर्क पर संसाधनों का इस्तेमाल करने से रोका जा सकता है.

Google Cloud के टीसीपी/एसएसएल प्रॉक्सी लोड बैलेंसर की मदद से, बैकएंड सेवाओं के बीच टीसीपी/ एसएसएल टाइप के ट्रैफ़िक को प्रॉक्सी किया जा सकता है.

इस कोडलैब में, आपको बैकएंड सेवा के साथ टीसीपी/एसएसएल प्रॉक्सी लोड बैलेंसर बनाना होगा. साथ ही, Cloud Armor का इस्तेमाल करके, लोड बैलेंसर का ऐक्सेस सिर्फ़ कुछ खास उपयोगकर्ता क्लाइंट तक सीमित करना होगा.

be33dadf836374bb.png

आपको क्या सीखने को मिलेगा

  • टीसीपी/एसएसएल प्रॉक्सी लोड बैलेंसर बनाने का तरीका
  • Cloud Armor की सुरक्षा नीति बनाने का तरीका
  • Cloud Armor में टीसीपी/एसएसएल प्रॉक्सी लोड बैलेंसर के लिए, आईपी पते को अनुमति न देने की सूची का नियम बनाने का तरीका
  • Cloud Armor में टीसीपी प्रॉक्सी लोड बैलेंसर के लिए, दर सीमित करने का नियम बनाने का तरीका
  • टीसीपी/एसएसएल लोड बैलेंसिंग बैकएंड सेवा में सुरक्षा नीति जोड़ने का तरीका

आपको किन चीज़ों की ज़रूरत होगी

  • Google Compute Engine के बारे में बुनियादी जानकारी ( कोड लैब)
  • नेटवर्किंग और टीसीपी/आईपी की बुनियादी जानकारी
  • Unix/Linux कमांड लाइन की बुनियादी जानकारी
  • यह ज़रूरी है कि आपने Google Cloud में नेटवर्किंग के साथ GCP में नेटवर्किंग का टूर पूरा कर लिया हो

2. ज़रूरी शर्तें

अपनी स्पीड से एनवायरमेंट सेट अप करना

  1. Cloud Console में साइन इन करें. इसके बाद, नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

ध्यान दें: Cloud Console को आसानी से ऐक्सेस करने के लिए, इसके यूआरएल को याद रखें. यह console.cloud.google.com है.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

प्रोजेक्ट आईडी याद रखें. यह सभी Google Cloud प्रोजेक्ट के लिए एक यूनीक नाम होता है. ऊपर दिया गया नाम पहले ही इस्तेमाल किया जा चुका है. इसलिए, यह आपके लिए काम नहीं करेगा. माफ़ करें! इस कोड लैब में इसे बाद में PROJECT_ID के तौर पर दिखाया जाएगा.

ध्यान दें: अगर Gmail खाते का इस्तेमाल किया जा रहा है, तो डिफ़ॉल्ट जगह को 'कोई संगठन नहीं' पर सेट किया जा सकता है. अगर Google Workspace खाते का इस्तेमाल किया जा रहा है, तो अपने संगठन के हिसाब से कोई जगह चुनें.

  1. इसके बाद, Google Cloud संसाधनों का इस्तेमाल करने के लिए, आपको Cloud Console में बिलिंग चालू करनी होगी.

इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. "सफ़ाई करना" सेक्शन में दिए गए निर्देशों का पालन करना न भूलें. इसमें बताया गया है कि संसाधनों को कैसे बंद किया जाए, ताकि इस ट्यूटोरियल के बाद आपको बिलिंग न करनी पड़े. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.

Cloud Shell शुरू करना

Google Cloud को अपने लैपटॉप से रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जाएगा. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

GCP Console में, सबसे ऊपर दाईं ओर मौजूद टूलबार पर मौजूद 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. बैकएंड सेवाएं बनाना

नीचे दिए गए तरीके से दो इंस्टेंस बनाएं - us-central1-b ज़ोन में instance1-b1 बनाएं

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"

ज़ोन us-central1-b में इंस्टेंस 1-b2 बनाएं

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

टारगेट टीसीपी प्रॉक्सी कॉन्फ़िगर करना

gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE

ग्लोबल स्टैटिक IPv4 पते रिज़र्व करना

लोड बैलेंस की गई सेवा तक पहुंचने के लिए, इस आईपी पते का इस्तेमाल किया जाएगा.

gcloud compute addresses create tcp-lb-static-ipv4  --ip-version=IPV4   --global

एलबी आईपी पते के लिए, ग्लोबल फ़ॉरवर्डिंग के नियम कॉन्फ़िगर करें.

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. टीसीपी प्रॉक्सी लोड बैलेंसर के लिए फ़ायरवॉल का नियम बनाना

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

इसके बाद, एलबी को ऐक्सेस करने से जुड़ी समस्या की पुष्टि करने के लिए वीएम बनाएं

आपको दो इंस्टेंस बनाने चाहिए. हर इंस्टेंस का एक सार्वजनिक आईपी पता होना चाहिए और उनका नाम test-server1 और test-server2 होना चाहिए

6. Cloud Armor में सुरक्षा नीति बनाना

इस सेक्शन में, Cloud Armor में बैकएंड की सुरक्षा से जुड़ी नीति और उस नीति में दो नियम बनाए जाएंगे.

पहले नियम के तहत, कुछ आईपी पतों को टीसीपी लोड बैलेंसर ऐक्सेस करने से रोका जाएगा. इसके लिए, सुरक्षा नीति सेट की जाएगी. वहीं, दूसरे नियम के तहत, अनुरोधों की संख्या सीमित की जाएगी.

  1. Cloud Shell में, rate-limit-and-deny-tcp नाम की बैकएंड सेवा की सुरक्षा नीति बनाएं. 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

टीसीपी प्रॉक्सी बैकएंड सेवा से नीति अटैच करें:

यह पक्का करने के लिए कि सुरक्षा नीति, टीसीपी प्रॉक्सी बैकएंड सेवा से जुड़ी है, यह कमांड चलाएं.

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

टीसीपी प्रॉक्सी लोड बैलेंसर पर लॉगिंग की सुविधा चालू करना

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

7. अनुमति न देने से जुड़े नियम की पुष्टि करना

अनुमति न देने वाली सूची के नियम की पुष्टि करने के लिए, उस टेस्ट-सर्वर में लॉग इन करें जिसका आईपी पता, अनुमति न देने वाली सूची के नियम में बताया गया था. इसके बाद, यह कमांड चलाएं

Curl LB_IP:110

तुरंत किए गए अनुरोधों पर एलबी से जवाब मिल सकता है. हालांकि, कर्ल अनुरोध के अस्वीकार होने या बंद होने तक इंतज़ार करें. इसके बाद, Cloud Logging में जाकर लॉग देखें. इससे यह पुष्टि की जा सकेगी कि आईपी पते को ब्लॉक करने का नियम लागू हुआ है या नहीं.

Cloud Logging पर जाएं. इसके बाद, संसाधनों में जाकर संसाधन टाइप के तौर पर "tcp_ssl_proxy_rule" चुनें. साथ ही, बैकएंड टारगेट को "my-tcp-lb" के तौर पर सेट करें.

फ़िल्टर करने के लिए तय किए गए संसाधनों की मदद से, हम यह पुष्टि कर सकते हैं कि आईपी पते को ब्लॉक करने का नियम, लॉग एंट्री में PRIORITY वैल्यू 1000 से लागू है. साथ ही, कॉन्फ़िगर किया गया ऐक्शन "DENY" ऐक्शन लागू है, क्योंकि दोनों को ब्लॉक करने के नियम से निर्देश मिले थे. साथ ही, आईपी पते को ब्लॉक किया जा रहा है, जैसा कि नीचे दिखाया गया है

db9b835e0360dcaf.png

8. दर सीमित करने वाले नियम की पुष्टि करना

पुष्टि करें कि दर की सीमा से जुड़ा नियम लागू है. इसके लिए, तय थ्रेशोल्ड (हर मिनट में पांच अनुरोध) से ज़्यादा अनुरोध कुछ ही समय में भेजें.

इसके बाद, Cloud Armor सेवा में लॉग देखें पर क्लिक करें. इससे आपको Cloud Logging पर ले जाया जाएगा. यहां लोड बैलेंसर के हिसाब से लॉग फ़िल्टर किए जा सकते हैं, ताकि Cloud Armor के लॉग देखे जा सकें.

रेट लिमिट करने वाली एंट्री, यहां दिए गए स्क्रीनशॉट के मुताबिक होनी चाहिए. हम पुष्टि कर सकते हैं कि दर की सीमा तय करने वाला नियम लागू है. इसकी पुष्टि, लॉग एंट्री में PRIORITY वैल्यू 3000 से होती है. साथ ही, कॉन्फ़िगर किए गए ऐक्शन से, "RATE BASED BAN" ऐक्शन लागू है. ऐसा दर की सीमा तय करने वाले नियम के निर्देशों के मुताबिक किया गया है.

37c76e5d7532623.png

9. एनवायरमेंट को साफ़ करना

इस्तेमाल न किए गए इन्फ़्रास्ट्रक्चर की लागत से बचने के लिए, बनाए गए इन्फ़्रास्ट्रक्चर को हटाना न भूलें.

सबसे आसान तरीका यह है कि GCP में पूरे प्रोजेक्ट को मिटा दिया जाए, ताकि यह पक्का किया जा सके कि कोई भी संसाधन बिना इस्तेमाल के न रहे.हालांकि, इन कमांड का इस्तेमाल करके अलग-अलग संसाधनों को मिटाएं

टीसीपी प्रॉक्सी लोड बैलेंसर

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