ক্লাউড সিকিউর ওয়েব প্রক্সি (SWP) কোডল্যাব

১. ভূমিকা

ক্লাউড সিকিওর ওয়েব প্রক্সি

ক্লাউড এসডব্লিউপি একটি ক্লাউড-ফার্স্ট পরিষেবা যা বহির্গামী ওয়েব ট্র্যাফিক (HTTP/S) সুরক্ষিত করতে একটি নিরাপদ ওয়েব প্রক্সি প্রদান করে। আপনি আপনার ক্লায়েন্টদেরকে প্রক্সি হিসেবে ক্লাউড এসডব্লিউপি স্পষ্টভাবে ব্যবহার করার জন্য কনফিগার করেন। ওয়েব অনুরোধগুলি নিম্নলিখিত উৎসগুলি থেকে আসতে পারে:

  • ভার্চুয়াল মেশিন (ভিএম) ইনস্ট্যান্স
  • কন্টেইনার
  • একটি সার্ভারলেস পরিবেশ যা একটি সার্ভারলেস কানেক্টর ব্যবহার করে
  • VPC পিয়ারিং জুড়ে ওয়ার্কলোড
  • গুগল ক্লাউডের বাইরের ওয়ার্কলোডগুলি ক্লাউড ভিপিএন বা ক্লাউড ইন্টারকানেক্ট দ্বারা সংযুক্ত থাকে

ক্লাউড এসডব্লিউপি ক্লাউড-ফার্স্ট আইডেন্টিটি এবং ওয়েব অ্যাপ্লিকেশনের উপর ভিত্তি করে নমনীয় ও সুনির্দিষ্ট পলিসি প্রণয়নে সক্ষম করে।

সুবিধা

নিচে ক্লাউড এসডব্লিউপি একটি প্রতিষ্ঠানকে যে সকল সুবিধা প্রদান করতে পারে তার কিছু উদাহরণ দেওয়া হলো:

গুগল ক্লাউডে স্থানান্তর

ক্লাউড এসডব্লিউপি আপনার বিদ্যমান নিরাপত্তা নীতি এবং বহির্গামী ওয়েব ট্র্যাফিকের প্রয়োজনীয়তা বজায় রেখে গুগল ক্লাউডে স্থানান্তরিত হতে সাহায্য করে। এর মাধ্যমে আপনি এমন থার্ড-পার্টি সলিউশন ব্যবহার করা এড়াতে পারেন, যেগুলোর জন্য অন্য একটি ম্যানেজমেন্ট কনসোল অথবা ম্যানুয়ালি কনফিগারেশন ফাইল সম্পাদনা করার প্রয়োজন হয়।

বিশ্বস্ত বাহ্যিক ওয়েব পরিষেবাগুলিতে অ্যাক্সেস

ক্লাউড এসডব্লিউপি আপনাকে আপনার বহির্গামী ওয়েব ট্র্যাফিকের উপর সুনির্দিষ্ট অ্যাক্সেস নীতি প্রয়োগ করার সুযোগ দেয়, যার মাধ্যমে আপনি আপনার নেটওয়ার্ক সুরক্ষিত করতে পারেন। আপনি ওয়ার্কলোড বা অ্যাপ্লিকেশন আইডেন্টিটি তৈরি ও শনাক্ত করেন এবং তারপর নীতিগুলো প্রয়োগ করেন।

অবিশ্বস্ত ওয়েব পরিষেবাগুলিতে নজরদারি করা অ্যাক্সেস

আপনি অবিশ্বস্ত ওয়েব পরিষেবাগুলিতে নিরীক্ষিত অ্যাক্সেস প্রদান করতে ক্লাউড এসডব্লিউপি (Cloud SWP) ব্যবহার করতে পারেন। ক্লাউড এসডব্লিউপি সেইসব ট্র্যাফিক শনাক্ত করে যা নীতিমালার সাথে সঙ্গতিপূর্ণ নয় এবং সেটিকে ক্লাউড লগিং (Logging)-এ লগ করে রাখে। এরপর আপনি ইন্টারনেট ব্যবহার নিরীক্ষণ করতে, আপনার নেটওয়ার্কের জন্য হুমকি খুঁজে বের করতে এবং সেই হুমকিগুলোর মোকাবিলা করতে পারেন।

গুগল এপিআই-এর জন্য সূক্ষ্ম নীতি নিয়ন্ত্রণ

আপনি গুগল এপিআই-এর জন্য সুনির্দিষ্ট পলিসি প্রদান করতে ক্লাউড এসডব্লিউপি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি কমন এক্সপ্রেশন ল্যাঙ্গুয়েজ (সিইএল) কাজে লাগিয়ে বাকেট/অবজেক্ট স্তরের পলিসি নির্ধারণ করতে পারেন।

সমর্থিত বৈশিষ্ট্য

ক্লাউড SWP নিম্নলিখিত বৈশিষ্ট্যগুলি সমর্থন করে:

সুস্পষ্ট প্রক্সি পরিষেবা

প্রক্সি সার্ভার ব্যবহার করার জন্য ক্লায়েন্টদের অবশ্যই সুস্পষ্টভাবে কনফিগার করতে হবে। ক্লাউড SWP প্রক্সি ক্লায়েন্টের পক্ষ থেকে নতুন TCP সংযোগ তৈরি করার মাধ্যমে ক্লায়েন্টদের ইন্টারনেট থেকে বিচ্ছিন্ন রাখে।

অটোস্কেলিং ক্লাউড SWP এনভয় প্রক্সি

এটি একটি অঞ্চলে এনভয় প্রক্সি পুলের আকার এবং ধারণক্ষমতা স্বয়ংক্রিয়ভাবে সমন্বয় করতে সহায়তা করে, যা উচ্চ চাহিদার সময়ে সর্বনিম্ন খরচে ধারাবাহিক কর্মক্ষমতা নিশ্চিত করে।

মডুলার বহির্গমন অ্যাক্সেস নীতি

ক্লাউড SWP বিশেষভাবে নিম্নলিখিত বহির্গমন নীতিগুলি সমর্থন করে:

  • সুরক্ষিত ট্যাগ, পরিষেবা অ্যাকাউন্ট বা আইপি ঠিকানার উপর ভিত্তি করে উৎসের পরিচয়।
  • ইউআরএল ও হোস্টনেম ভিত্তিক গন্তব্যস্থল।
  • মেথড, হেডার বা ইউআরএল-এর উপর ভিত্তি করে অনুরোধ। তালিকা, ওয়াইল্ডকার্ড বা প্যাটার্ন ব্যবহার করে ইউআরএল নির্দিষ্ট করা যেতে পারে।
  • এন্ড-টু-এন্ড এনক্রিপশন: ক্লায়েন্ট-প্রক্সি টানেলগুলো TLS-এর মাধ্যমে স্থানান্তরিত হতে পারে। ক্লাউড SWP গন্তব্য সার্ভারে ক্লায়েন্ট-প্রবর্তিত, এন্ড-টু-এন্ড TLS সংযোগের জন্য HTTP/S CONNECT-ও সমর্থন করে।

সরলীকৃত ক্লাউড NAT ইন্টিগ্রেশন

যখন ক্লাউড SWP ট্র্যাফিক পরিবেশনকারী প্রক্সির সংখ্যা বৃদ্ধি পায়, তখন ক্লাউড NAT স্বয়ংক্রিয়ভাবে অতিরিক্ত পাবলিক আইপি অ্যাড্রেস সরবরাহ করে।

যারা পরিচিত বহির্গমন আইপি (egress IP) রাখতে চান, তাদের জন্য ম্যানুয়াল স্ট্যাটিক পাবলিক আইপি অ্যাড্রেসও একটি বিকল্প।

ক্লাউড অডিট লগ এবং গুগল ক্লাউডের অপারেশন স্যুট ইন্টিগ্রেশন

ক্লাউড অডিট লগ এবং গুগল ক্লাউডের অপারেশনস স্যুট, ক্লাউড SWP-সম্পর্কিত রিসোর্সসমূহের প্রশাসনিক কার্যকলাপ এবং অ্যাক্সেস অনুরোধ রেকর্ড করে। এছাড়াও, এগুলি প্রক্সি দ্বারা পরিচালিত অনুরোধগুলির মেট্রিক্স এবং ট্রানজ্যাকশন লগ রেকর্ড করে।

টিএলএস পরিদর্শন

সিকিওর ওয়েব প্রক্সি একটি TLS পরিদর্শন পরিষেবা প্রদান করে, যার মাধ্যমে আপনি TLS ট্র্যাফিক আটকাতে, এনক্রিপ্ট করা অনুরোধ পরীক্ষা করতে এবং নিরাপত্তা নীতি প্রয়োগ করতে পারেন।

  • সার্টিফিকেট অথরিটি সার্ভিস (CAS)-এর সাথে নিবিড় সংযোগ, যা প্রাইভেট CA-গুলোর জন্য একটি অত্যন্ত সহজলভ্য এবং পরিবর্ধনযোগ্য ভান্ডার।
  • প্রয়োজনে আপনার নিজস্ব রুট অফ ট্রাস্ট ব্যবহার করার সুবিধা। আপনি CAS-এর অধীনস্থ CA-গুলোর জন্য স্বাক্ষর করতে একটি বিদ্যমান রুট CA-ও ব্যবহার করতে পারেন। আপনি চাইলে CAS-এর মধ্যেই একটি নতুন রুট সার্টিফিকেট তৈরি করতে পারেন।
  • সিকিওর ওয়েব প্রক্সি পলিসি রুলের মধ্যে SessionMatcher এবং ApplicationMatcher ব্যবহার করে সুনির্দিষ্ট ডিক্রিপশন ক্রাইটেরিয়া নির্ধারণ করা হয়। এই ক্রাইটেরিয়ার মধ্যে রয়েছে ইউআরএল লিস্টে উপস্থিত হোস্ট মেলানো, রেগুলার এক্সপ্রেশন, আইপি অ্যাড্রেস রেঞ্জ এবং অনুরূপ এক্সপ্রেশন। প্রয়োজনে, ক্রাইটেরিয়াকে বুলিয়ান এক্সপ্রেশনের সাথেও যুক্ত করা যেতে পারে।
  • প্রতিটি সিকিওর ওয়েব প্রক্সি পলিসি তার নিজস্ব TLS ইন্সপেকশন পলিসি এবং CA পুল দিয়ে কনফিগার করা যেতে পারে। বিকল্পভাবে, একাধিক সিকিওর ওয়েব প্রক্সি পলিসি একটিমাত্র TLS ইন্সপেকশন পলিসি শেয়ার করতে পারে।

আপনি যা শিখবেন

  • ক্লাউড SWP কীভাবে স্থাপন ও পরিচালনা করবেন।

আপনার যা যা লাগবে

  • ইনস্ট্যান্স স্থাপন এবং নেটওয়ার্কিং উপাদান কনফিগার করার জ্ঞান
  • ভিপিসি ফায়ারওয়াল কনফিগারেশন জ্ঞান

২. পরীক্ষার পরিবেশ

এই কোডল্যাবটি একটিমাত্র VPC ব্যবহার করবে। এই পরিবেশে একটি কম্পিউট রিসোর্স, নিচের ডায়াগ্রামে দেখানো অনুযায়ী, ক্লাউড SWP ব্যবহার করে বহির্গমন করবে।

1264e30caa136365.png

এই ল্যাবে আমাদের ২টি ওয়ার্কলোড ভিএম থাকবে।

ক্লায়েন্ট A-কে সমস্ত HTTP/HTTPS অনুরোধ ক্লাউড SWP-তে পাঠানোর জন্য কনফিগার করা হবে।

ক্লায়েন্ট B-কে ক্লাউড SWP-তে সরাসরি HTTP/HTTPS অনুরোধ পাঠানোর জন্য কনফিগার করা হবে না , বরং ইন্টারনেটগামী ট্র্যাফিকের জন্য ক্লাউড NAT ব্যবহার করা হবে।

৩. শুরু করার আগে

কোডল্যাবে একটিমাত্র প্রজেক্ট প্রয়োজন।

ক্লাউড শেলের ভিতরে, নিশ্চিত করুন যে আপনার প্রজেক্ট আইডি সেট আপ করা আছে।

export project_id=`gcloud config list --format="value(core.project)"`
export project_number=`gcloud projects describe $project_id --format="value(projectNumber)"`
export region=us-west1
export zone=us-west1-a
export prefix=codelab-swp
export member="serviceAccount:service-$project_number@gcp-sa-networksecurity.iam.gserviceaccount.com"

৪. এপিআই সক্রিয় করুন

পণ্যগুলি ব্যবহার করার জন্য এপিআইগুলি সক্ষম করুন।

gcloud services enable networksecurity.googleapis.com
gcloud services enable certificatemanager.googleapis.com
gcloud services enable networkservices.googleapis.com

৫. ভিপিসি নেটওয়ার্ক, সাবনেট এবং প্রক্সি-অনলি সাবনেট তৈরি করুন

ভিপিসি নেটওয়ার্ক

কোডল্যাব-এসডব্লিউপি-ভিপিসি ভিপিসি তৈরি করুন:

gcloud compute networks create $prefix-vpc --subnet-mode=custom 

সাবনেট

নির্বাচিত অঞ্চলে সংশ্লিষ্ট সাবনেটগুলি তৈরি করুন:

gcloud compute networks subnets create $prefix-vpc-subnet \
   --range=10.10.10.0/24 --network=$prefix-vpc --region=$region

প্রক্সি-অনলি সাবনেট

নির্বাচিত অঞ্চলে একটি প্রক্সি-অনলি সাবনেট তৈরি করুন:

gcloud compute networks subnets create $prefix-proxy-only-subnet --purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE --region=$region --network=$prefix-vpc --range=172.16.0.0/23

৬. ফায়ারওয়াল নিয়ম তৈরি করুন

আপনার VM ইনস্ট্যান্সগুলিতে IAP-কে সংযোগ করার অনুমতি দিতে, এমন একটি ফায়ারওয়াল নিয়ম তৈরি করুন যা:

  • এটি সেই সমস্ত VM ইনস্ট্যান্সের ক্ষেত্রে প্রযোজ্য, যেগুলোকে আপনি IAP ব্যবহার করে অ্যাক্সেসযোগ্য করতে চান।
  • 35.235.240.0/20 আইপি রেঞ্জ থেকে ইনগ্রেস ট্র্যাফিকের অনুমতি দেয়। এই রেঞ্জে সেই সমস্ত আইপি অ্যাড্রেস রয়েছে যা IAP টিসিপি ফরওয়ার্ডিংয়ের জন্য ব্যবহার করে।

ক্লাউডশেল থেকে:

gcloud compute firewall-rules create $prefix-allow-iap-proxy \
--direction=INGRESS \
--priority=1000 \
--network=$prefix-vpc \
--action=ALLOW \
--rules=tcp:22 \
--source-ranges=35.235.240.0/20

৭. ক্লাউড রাউটার এবং ক্লাউড ন্যাট তৈরি করুন

ক্লাউড NAT-এর জন্য ক্লাউড রাউটার তৈরি করুন।

gcloud compute routers create ${prefix}-cr \
--region=$region \
--network=${prefix}-vpc

ক্লায়েন্ট বি-এর জন্য ক্লাউড ন্যাট গেটওয়ে তৈরি করুন।

gcloud compute routers nats create $prefix-nat-gw-$region \
--router=$prefix-cr \
--router-region=$region \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges

৮. একটি গেটওয়ে নিরাপত্তা নীতি তৈরি করুন

পলিসিটির জন্য প্রাসঙ্গিক তথ্য সম্বলিত একটি YAML ফাইল তৈরি করুন:

cat > /tmp/policy.yaml << EOF
description: Policy to allow .com traffic, then (/index.html), and finally TLS.
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy
EOF

yaml ফাইল থেকে পলিসি তৈরি করতে gcloud কমান্ডটি চালান:

gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}

৯. একটি গেটওয়ে নিরাপত্তা নীতি নিয়ম তৈরি করুন

একটি YAML ফাইল তৈরি করুন যাতে নিয়মগুলো থাকবে। এই নিয়মগুলো কমন এক্সপ্রেশন ল্যাঙ্গুয়েজ (CEL)-এ লেখা হয়। এই ল্যাবে একটি সাধারণ নিয়ম ব্যবহার করা হবে যা .com ডোমেইনে ট্র্যাফিকের অনুমতি দেবে এবং অন্য সবগুলোকে ব্লক করবে:

cat > /tmp/rule-com.yaml << EOF
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy/rules/rule-com
enabled: true
priority: 1
description: Allow .com traffic
basicProfile: ALLOW
sessionMatcher: host().endsWith('com')
EOF

এখন আমরা নিয়মটি গেটওয়ে নিরাপত্তা নীতির সাথে সংযুক্ত করতে পারি:

gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy

১০. একটি সার্টিফিকেট তৈরি করুন এবং ক্লাউড সার্টিফিকেট ম্যানেজারে আপলোড করুন।

ওয়ার্কলোড ট্র্যাফিক বন্ধ করার জন্য একটি সার্টিফিকেট তৈরি করুন:

openssl req -x509 -newkey rsa:2048 -keyout /tmp/key.pem -out /tmp/cert.pem -days 365 -subj '/CN=www.codelab-swp.com' -nodes -addext \
  "subjectAltName = DNS:www.codelab-swp.com"

সার্টিফিকেটটি ক্লাউড সার্টিফিকেট ম্যানেজারে আপলোড করুন, যাতে SWP সিকিউরিটি গেটওয়ে পলিসিতে এটিকে উল্লেখ করতে পারে।

gcloud certificate-manager certificates create ${prefix}-cert --location=${region} --private-key-file=/tmp/key.pem --certificate-file=/tmp/cert.pem

১১. SWP গেটওয়ে তৈরি করুন

সার্টিফিকেট, গেটওয়ে সিকিউরিটি পলিসি, নেটওয়ার্ক এবং সাবনেটের মতো পূর্ববর্তী তথ্যগুলো রেফারেন্স করার জন্য SWP গেটওয়ের জন্য yaml ফাইলটি তৈরি করুন।

cat > /tmp/gateway.yaml << EOF
name: projects/${project_id}/locations/${region}/gateways/${prefix}-gateway
type: SECURE_WEB_GATEWAY
addresses: [10.10.10.50]
ports: [443]
certificateUrls: [projects/${project_id}/locations/${region}/certificates/${prefix}-cert]
gatewaySecurityPolicy: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy
network: projects/${project_id}/global/networks/${prefix}-vpc
subnetwork: projects/${project_id}/regions/${region}/subnetworks/${prefix}-vpc-subnet
EOF

গেটওয়ে তৈরি করুন:

gcloud network-services gateways import ${prefix}-swp --source=/tmp/gateway.yaml --location=${region}

গেটওয়েটি তৈরি হয়েছে কিনা তা নিশ্চিত করুন:

gcloud network-services gateways describe ${prefix}-swp --location ${region}

১২. কম্পিউট ইনস্ট্যান্স তৈরি করুন

যেহেতু ক্লাউড SWP একটি এক্সপ্লিসিট প্রক্সি, তাই ওয়ার্কলোড ট্র্যাফিকের জন্য আমাদের প্রক্সি আইপি স্পষ্টভাবে উল্লেখ করতে হবে। কম্পিউট ইনস্ট্যান্স ক্লায়েন্ট A-এর জন্য এনভায়রনমেন্ট ভেরিয়েবল সেট করা থাকবে। ক্লায়েন্ট B-এর জন্য থাকবে না।

ClientA এবং ClientB কম্পিউট ইনস্ট্যান্সগুলো তৈরি করুন:

gcloud compute instances create clienta \
   --subnet=$prefix-vpc-subnet \
   --no-address \
   --private-network-ip=10.10.10.10 \
   --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
sudo echo http_proxy=https://10.10.10.50:443/ >> /etc/environment
sudo echo https_proxy=https://10.10.10.50:443/ >> /etc/environment
'
gcloud compute instances create clientb \
   --subnet=$prefix-vpc-subnet \
   --no-address \
   --private-network-ip=10.10.10.200 \
   --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
'

১৩. পরীক্ষার সেশন মেলানো

সম্প্রতি তৈরি করা 'clienta' কম্পিউট ভিএম-এ SSH করুন। এই ভিএম-টিতে ক্লাউড SWP ব্যবহার করার জন্য এনভায়রনমেন্টাল ভেরিয়েবল সেট করা আছে।

ক্লাউডশেল থেকে:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

কার্যকারিতা যাচাই করার জন্য কিছু ওয়েব কোয়েরি চালান। আমাদের –proxy-insecure প্রয়োজন, কারণ আমরা এই ল্যাবের জন্য একটি সেলফ-সাইন্ড সার্টিফিকেট তৈরি করেছি:

curl https://google.com --proxy-insecure

প্রত্যাশিত আউটপুট:

davidtu@clienta:~$ curl https://google.com --proxy-insecure
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

যেমনটি দেখতে পাচ্ছেন, অনুরোধটি "সফল" হয়েছে। যেহেতু ওয়েবসাইটটি https://www.google.com- এ রিডাইরেক্ট হচ্ছে, তাই একটি 301 রিডাইরেক্ট দেখাটাই প্রত্যাশিত।

নিম্নলিখিত কমান্ডটি চালালে সংযোগ সম্পর্কে বিস্তারিত বিবরণসহ বিশদ লগ পাওয়া যাবে:

curl https://google.com --proxy-insecure -v

প্রক্সি সংযোগের বিবরণ, সার্টিফিকেট এবং গন্তব্য দেখানোর জন্য কিছু আউটপুট হাইলাইট করা হচ্ছে।

davidtu@clienta:~$ curl https://google.com --proxy-insecure -v
* Uses proxy env variable https_proxy == 'https://10.10.10.50:443/'
*   Trying 10.10.10.50:443...
* Connected to 10.10.10.50 (10.10.10.50) port 443 (#0)
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Proxy certificate:
*  subject: CN=www.codelab-swp.com
*  start date: Dec 12 17:16:35 2022 GMT
*  expire date: Dec 12 17:16:35 2023 GMT
*  issuer: CN=www.codelab-swp.com
*  SSL certificate verify result: self signed certificate (18), continuing anyway.
* allocate connect buffer!
* Establish HTTP proxy tunnel to google.com:443
> CONNECT google.com:443 HTTP/1.1
> Host: google.com:443
> User-Agent: curl/7.74.0
> Proxy-Connection: Keep-Alive
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
< HTTP/1.1 200 OK
< date: Mon, 12 Dec 2022 19:22:04 GMT
< 
* Proxy replied 200 to CONNECT request
* CONNECT phase completed!
...

কার্যকারিতা যাচাই করার জন্য নির্দ্বিধায় অন্যান্য .com ডোমেইন ব্যবহার করে দেখতে পারেন।

এখন ডিফল্ট ব্লকিং আচরণ যাচাই করার জন্য অন্য কিছু .com-নয় এমন ডোমেইন দিয়ে চেষ্টা করা যাক:

curl https://wikipedia.org --proxy-insecure

প্রত্যাশিত আউটপুট:

curl: (56) Received HTTP code 403 from proxy after CONNECT

একইভাবে, ভার্বোস আউটপুট লগিং দেখুন এবং নিশ্চিত করুন যে ক্লাউড এসডব্লিউপি এই ট্র্যাফিকটি ব্লক করছে:

curl https://wikipedia.org --proxy-insecure -v
davidtu@clienta:~$ curl https://wikipedia.org --proxy-insecure -v
* Uses proxy env variable https_proxy == 'https://10.10.10.50:443/'
*   Trying 10.10.10.50:443...
* Connected to 10.10.10.50 (10.10.10.50) port 443 (#0)
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Proxy certificate:
*  subject: CN=www.codelab-swp.com
*  start date: Dec 12 17:16:35 2022 GMT
*  expire date: Dec 12 17:16:35 2023 GMT
*  issuer: CN=www.codelab-swp.com
*  SSL certificate verify result: self signed certificate (18), continuing anyway.
* allocate connect buffer!
* Establish HTTP proxy tunnel to wikipedia.org:443
> CONNECT wikipedia.org:443 HTTP/1.1
> Host: wikipedia.org:443
> User-Agent: curl/7.74.0
> Proxy-Connection: Keep-Alive
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
< HTTP/1.1 403 Forbidden
< content-length: 13
< content-type: text/plain
< date: Mon, 12 Dec 2022 19:35:09 GMT
< connection: close
< 
* Received HTTP code 403 from proxy after CONNECT
* CONNECT phase completed!
* Closing connection 0
curl: (56) Received HTTP code 403 from proxy after CONNECT

আচরণ যাচাই করার জন্য নির্দ্বিধায় অন্যান্য ডোমেইনগুলোও চেষ্টা করে দেখতে পারেন।

'clienta'-এর SSH সেশন থেকে বেরিয়ে আসুন এবং 'clientb'-এর সাথে একটি নতুন SSH সংযোগ শুরু করুন।

gcloud compute ssh clientb --zone=$zone --tunnel-through-iap

আচরণ পরীক্ষা করার জন্য কিছু কার্ল কমান্ড চালান:

curl https://google.com

এটি প্রত্যাশিতভাবেই কাজ করবে ক্লায়েন্টবি ভিএম:

davidtu@clientb:~$ curl https://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

একটি অর্গ ডোমেনের বিরুদ্ধে পরীক্ষা করা:

curl https://wikipedia.org

এটি প্রত্যাশিতভাবেই কাজ করে, কারণ ক্লায়েন্ট ক্লাউড SWP ব্যবহার করছে না:

davidtu@clientb:~$ curl https://wikipedia.org
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://www.wikipedia.org/">here</a>.</p>
</body></html>

ক্লাউড SWP-এর মাধ্যমে স্পষ্টভাবে ট্র্যাফিক পাঠানোর পরীক্ষা করুন:

curl -x https://10.10.10.50:443/ https://wikipedia.org --proxy-insecure 

আমরা দেখতে পাচ্ছি যে এই ট্র্যাফিকটি ক্লাউড SWP পলিসির মাধ্যমে প্রত্যাখ্যান করা হয়েছে:

davidtu@clientb:~$ curl -x https://10.10.10.50:443/ https://wikipedia.org --proxy-insecure
curl: (56) Received HTTP code 403 from proxy after CONNECT

আপনি যেমন যাচাই করেছেন, ক্লাউড এসডব্লিউপি (Cloud SWP) ব্যবহার করে আসা ট্র্যাফিক কনফিগার করা নিরাপত্তা নীতির অধীনে নিয়ন্ত্রিত হচ্ছে। .com-এর জন্য নির্ধারিত ট্র্যাফিক অনুমোদিত এবং অন্য সব গন্তব্য প্রত্যাখ্যাত।

ক্লায়েন্টবি থেকে প্রস্থান করুন।

১৪. অ্যাপ্লিকেশনম্যাচিং-এর জন্য একটি গেটওয়ে নিরাপত্তা নীতি নিয়ম আপডেট করুন

চলুন, অ্যাপ্লিকেশন লেভেলের বিবরণের সাথে মেলানোর জন্য নিয়মটি আপডেট করি। আমরা এমন একটি নিয়ম তৈরি করব যা রিকোয়েস্ট পাথটি দেখবে এবং শুধুমাত্র index.html-এর সাথে মিললেই সেটিকে অনুমতি দেবে।

cat > /tmp/rule-com.yaml << EOF
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy/rules/rule-com
enabled: true
priority: 1
description: Allow .com traffic with path index.html
basicProfile: ALLOW
sessionMatcher: host().endsWith('com')
applicationMatcher: request.path.matches('index.html')
EOF

এখন আমরা আপডেট করা নিয়মটি গেটওয়ে নিরাপত্তা নীতির সাথে যুক্ত করতে পারি:

gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy

১৫. অ্যাপ্লিকেশনম্যাচার নিয়ম পরীক্ষা করা

ক্লায়েন্টের কম্পিউট ভিএম-এ SSH করুন। এই ভিএম-টিতে ক্লাউড SWP ব্যবহার করার জন্য এনভায়রনমেন্টাল ভেরিয়েবল সেট করা আছে।

ক্লাউডশেল থেকে:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

কার্যকারিতা যাচাই করার জন্য কিছু ওয়েব কোয়েরি চালান। আমাদের –proxy-insecure প্রয়োজন, কারণ আমরা এই ল্যাবের জন্য একটি সেলফ-সাইন্ড সার্টিফিকেট তৈরি করেছি:

curl http://google.com --proxy-insecure

লক্ষ্য করুন যে এই কোয়েরিটি পূর্বে সফল হলেও এখন ব্যর্থ হবে।

Access denied

'index.html' ছাড়া অন্য যেকোনো রিকোয়েস্ট পাথ 403 এর মাধ্যমে ব্লক হয়ে যাবে। আপনি চাইলে এটি আরও পরীক্ষা করে দেখতে পারেন।

কোয়েরিটি পরিবর্তন করে /index.html পাথটি অন্তর্ভুক্ত করুন।

curl http://google.com/index.html --proxy-insecure

এই অনুরোধটি সফল হওয়া উচিত:

davidtu@clienta:~$ curl http://google.com/index.html --proxy-insecure
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/index.html">here</A>.
</BODY></HTML>

যেহেতু ওয়েবসাইটটি http://www.google.com/index.html- এ রিডাইরেক্ট হচ্ছে, তাই একটি 301 রিডাইরেক্ট দেখা যাবে বলে আশা করা যায়।

লক্ষ্য করুন যে এটি একটি HTTP অনুরোধ। এরপরে, TLS পরিদর্শন ক্ষমতা পেতে আপনাকে SWP সক্রিয় করতে হবে।

এরপর একই কোয়েরিটি TLS-এর মাধ্যমে চালান:

curl -k https://google.com/index.html --proxy-insecure

প্রত্যাশিত আউটপুট:

curl: (56) Received HTTP code 403 from proxy after CONNECT

এই অনুরোধটি ব্যর্থ হওয়া উচিত, কারণ SWP TLS যাচাই করার জন্য কনফিগার করা নেই এবং applicationMatcher নিয়মের সাথে পাথটি মূল্যায়ন করতে পারে না।

ক্লেন্টা থেকে প্রস্থান করুন।

১৬. টিএলএস পরিদর্শন সক্ষম করুন

TLS ইন্সপেকশন ছাড়া, applicationMatcher HTTPS ট্র্যাফিকের সাথে ম্যাচ করবে না।

"applicationMatcher" নিম্নলিখিত বিষয়গুলির উপর ফিল্টার করার সুযোগ দেয়:

  • অনুরোধ হেডার ম্যাপ
  • অনুরোধ পদ্ধতি
  • হোস্টের কাছে অনুরোধ করুন
  • অনুরোধের পথ
  • অনুরোধ জিজ্ঞাসা
  • অনুরোধ স্কিম
  • সম্পূর্ণ অনুরোধ ইউআরএল
  • ব্যবহারকারী এজেন্টকে অনুরোধ করুন

পরিষেবা অ্যাকাউন্ট তৈরি করুন

এই সার্ভিস অ্যাকাউন্টটির SWP TLS ইন্সপেকশনের জন্য সার্টিফিকেট তৈরি করার অনুমতি থাকবে।

gcloud beta services identity create \
    --service=networksecurity.googleapis.com \
    --project=$project_id

CAS সক্রিয় আছে কিনা তা নিশ্চিত করুন।

gcloud services enable privateca.googleapis.com

একটি CA পুল তৈরি করুন

gcloud privateca pools create $prefix-ca-pool \
    --tier=devops \
    --project=$project_id \
    --location=$region 

রুট CA তৈরি করুন

সার্টিফিকেট স্বাক্ষরের জন্য CA ব্যবহৃত হয়।

gcloud privateca roots create $prefix-root-ca --pool=$prefix-ca-pool \
  --location=$region \
  --auto-enable \
  --subject="CN=my-swp-ca, O=SWP LLC"

একটি সার্টিফিকেট ইস্যু করার নীতি ফাইল তৈরি করুন

cat > /tmp/tls-issuance-policy.yaml << EOF
maximumLifetime: 1209600s
baselineValues:
  caOptions:
    isCa: false
  keyUsage:
    extendedKeyUsage:
      serverAuth: true
EOF

TLS পরিদর্শন yaml ফাইল তৈরি করুন

cat > /tmp/tls-inspection-policy.yaml << EOF
caPool: projects/$project_id/locations/$region/caPools/$prefix-ca-pool
name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-inspection
EOF

টিএলএস পরিদর্শন নীতি তৈরি করুন

gcloud network-security tls-inspection-policies import $prefix-tls-inspection \
    --source=/tmp/tls-inspection-policy.yaml \
    --location=$region

সার্টিফিকেট ইস্যু করার নীতি ব্যবহার করার জন্য CA পুল আপডেট করুন

gcloud privateca pools update $prefix-ca-pool    --issuance-policy=/tmp/tls-issuance-policy.yaml --location=$region

অনুদানের অনুমতি

এর ফলে আপনার সার্ভিস অ্যাকাউন্ট সার্টিফিকেট তৈরি করার জন্য CA পুল ব্যবহার করতে পারে।

gcloud privateca pools add-iam-policy-binding $prefix-ca-pool \
    --member=$member \
    --role='roles/privateca.certificateManager' \
    --location=$region

TLS পরিদর্শন অন্তর্ভুক্ত করতে Policy yaml আপডেট করুন

cat > /tmp/policy.yaml << EOF
description: some policy description
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy
tlsInspectionPolicy: projects/${project_id}/locations/${region}/tlsInspectionPolicies/${prefix}-tls-inspection
EOF

আপডেট করা পলিসি প্রয়োগ করতে কমান্ডটি চালান।

gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}

TLS পরিদর্শন অন্তর্ভুক্ত করতে নিয়মাবলী হালনাগাদ করুন

এরপর নির্দিষ্ট করুন কোন নিয়মগুলিতে 'enabtlsInspectionEnabled: true' ফ্ল্যাগ সহ TLS পরিদর্শন থাকবে।

cat > /tmp/rule-com.yaml << EOF
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy/rules/rule-com
enabled: true
priority: 1
description: Allow .com traffic with path index.html
basicProfile: ALLOW
sessionMatcher: host().endsWith('com')
applicationMatcher: request.path.matches('index.html')
tlsInspectionEnabled: true
EOF

আপডেট করা নিয়মটি প্রয়োগ করতে কমান্ডটি চালান।

gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy

১৭. টিএলএস পরিদর্শন পরীক্ষা

ক্লায়েন্টের কম্পিউট ভিএম-এ SSH করুন। এই ভিএম-টিতে ক্লাউড SWP ব্যবহার করার জন্য এনভায়রনমেন্টাল ভেরিয়েবল সেট করা আছে।

ক্লাউডশেল থেকে:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

পাথটি পুনরুদ্ধার করার জন্য SWP TLS পরিদর্শন করছে কিনা তা যাচাই করতে পূর্ববর্তী ওয়েব কোয়েরিটি চালান।

curl -k https://google.com/index.html --proxy-insecure

এবার এটি সফল হওয়া উচিত, কারণ SWP ApplicationMatcher-টিকে মূল্যায়ন করতে পারে।

প্রত্যাশিত আউটপুট:

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/index.html">here</A>.
</BODY></HTML>

আমরা TLS পরিদর্শন এবং applicationMatcher লজিক মূল্যায়ন করার জন্য সফলভাবে Cloud SWP সেট আপ করেছি!

ক্লায়েন্টা থেকে প্রস্থান করুন।

১৮. পরিষ্কার করার পদক্ষেপ

ক্লাউড শেল থেকে SWP গেটওয়ে, নিরাপত্তা নীতি, সার্টিফিকেট, ইনস্ট্যান্স, ক্লাউড NAT এবং ক্লাউড রাউটার সরিয়ে ফেলুন:

gcloud -q network-services gateways delete ${prefix}-swp --location=${region}

gcloud -q network-security gateway-security-policies rules delete rule-com --location=${region} --gateway-security-policy=${prefix}-policy

gcloud -q network-security gateway-security-policies delete ${prefix}-policy --location=${region}

gcloud -q certificate-manager certificates delete ${prefix}-cert --location=${region}

gcloud -q network-security tls-inspection-policies delete $prefix-tls-inspection --location=$region

gcloud -q privateca roots disable $prefix-root-ca --pool=$prefix-ca-pool --location=$region

gcloud -q privateca roots delete $prefix-root-ca --pool=$prefix-ca-pool --location=$region --ignore-active-certificates --skip-grace-period

gcloud -q privateca pools delete $prefix-ca-pool --location=$region

gcloud -q compute instances delete clienta --zone=$zone

gcloud -q compute instances delete clientb --zone=$zone

gcloud -q compute routers nats delete ${prefix}-nat-gw-${region} \
--router=$prefix-cr --router-region=$region

gcloud -q compute routers delete `gcloud compute routers list --regions=$region --format="value(NAME)" | grep -e swg-autogen -e codelab-swp` --region=$region

সাবনেট, ফায়ারওয়াল নিয়ম এবং ভিপিসিগুলো মুছে ফেলুন:

gcloud -q compute networks subnets delete $prefix-vpc-subnet \
    --region $region

gcloud -q compute networks subnets delete $prefix-proxy-only-subnet \
    --region=$region

gcloud -q compute firewall-rules delete $prefix-allow-iap-proxy

gcloud -q compute networks delete $prefix-vpc

১৯. অভিনন্দন!

কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন। আপনি গুগল ক্লাউডে ক্লাউড সিকিওর ওয়েব প্রক্সি সফলভাবে কনফিগার এবং ডেপ্লয় করেছেন।

আমরা যা আলোচনা করেছি

  • ক্লাউড এসডব্লিউপি এবং এর সুবিধাগুলো!