टीसीपी प्रॉक्सी कोडलैब - टीसीपी प्रॉक्सी लोड बैलेंसर की मदद से रेट सीमित करना और आईपी अस्वीकार करने वाली सूची

1. परिचय

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

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

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

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

be33dadf836374bb.png

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

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

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

  • Google Compute Engine के बारे में बुनियादी जानकारी ( codelab)
  • नेटवर्किंग और टीसीपी/आईपी के बारे में बुनियादी जानकारी
  • यूनिक्स/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 का इस्तेमाल करना होगा. यह 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

एपीआई चालू करें

सभी ज़रूरी सेवाएं चालू करना

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

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

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

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

db9b835e0360dcaf.png

8. अनुरोध की संख्या सीमित करने के नियम की पुष्टि करना

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

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

दर को सीमित करने वाली एंट्री, नीचे दिए गए स्क्रीनशॉट के मुताबिक होनी चाहिए. हम लॉग एंट्री में 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