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

1. परिचय

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

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

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

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

be33dadf836374bb.png

आप इन चीज़ों के बारे में जानेंगे

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

आपको इनकी ज़रूरत होगी

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

क्लाउड शेल शुरू करें

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

GCP कंसोल में, सबसे ऊपर दाईं ओर मौजूद टूलबार पर क्लाउड शेल आइकॉन पर क्लिक करें:

bce75f34b2c53987.png

प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा. उसके पूरा हो जाने पर, आपको कुछ ऐसा दिखाई देगा:

f6ef2b5f13479f3a.png

इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और 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 ज़ोन में इंस्टेंस1-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

ग्लोबल स्टैटिक आईपीवी4 पते रिज़र्व करें

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

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

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

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 को ऐक्सेस अस्वीकार किए जाने की पुष्टि के लिए वर्चुअल मशीन (वीएम) बनाएं

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

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

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

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

  1. 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

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

यह पक्का करने के लिए कि सुरक्षा नीति टीसीपी प्रॉक्सी बैकएंड सेवा से अटैच है, यह पक्का करने के लिए नीचे दिया गया निर्देश चलाएं.

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

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

क्लाउड लॉगिंग पर जाएं और संसाधनों में, संसाधन प्रकार को "tcp_SSL_प्रॉक्सी_ दवा" के रूप में चुनें और बैकएंड टारगेट को "my-tcp-lb" के तौर पर सेट करें.

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

db9b835e0360dcaf.png

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

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

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

नीचे दिए गए स्क्रीनशॉट के मुताबिक, अनुरोध संख्या सीमित करने की सुविधा दी जानी चाहिए. हम लॉग एंट्री में मौजूद 3,000 की PRIORITY वैल्यू से यह पुष्टि कर सकते हैं कि दर की सीमा का नियम लागू है. साथ ही, कॉन्फ़िगर की गई कार्रवाई से, "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

क्लाउड कवच के लिए सुरक्षा नीति

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