ওয়েবসাইটে নির্দিষ্ট IP-র এক্সেস সীমিত রাখা একটি সাধারণ প্রয়োজন। এই পোস্টে আমি দেখাব কীভাবে Edge কম্পিউটিং ব্যবহার করে IP Allow/Deny লিস্ট বাস্তবায়ন করতে হয়। প্রথমে Cloudflare Workers-কে পরিচয় করাই।
Cloudflare Workers
Cloudflare Workers সম্প্রতি বছরে খুব জনপ্রিয় টেকনোলজি। এটি ২০১৭ সালে পাবলিকলি উপলব্ধ হয় এবং Cloudflare KV স্টোরেজ ২০১৯ সালে পাবলিকলি উপলব্ধ হয়।
গভীর ডিটেইলে না গিয়ে সংক্ষেপে ব্যাখ্যা করছি। Cloudflare Workers-এ আপনি যেকোনো HTTP রিকোয়েস্ট Edge লেভেলে ইন্টারসেপ্ট করতে পারেন, কোড স্নিপেট এক্সিকিউট করতে পারেন এবং রিকোয়েস্ট/রেসপন্স ম্যানিপুলেট করতে পারেন। Cloudflare Workers-এ নেটিভভাবে উপলব্ধ KV স্টোরেজ ব্যবহার করে আপনি ডিকশনারি পুট/গেট করতে পারেন। প্লেگران্ড এনভায়রনমেন্ট দিয়ে দ্রুত ট্রাই করতে পারেন, এটি খুব সিম্পল এবং ১-ক্লিক টেস্ট এনভায়রনমেন্ট।
Cloudflare KV স্টোরেজ ছাড়া, ডেভেলপার হিসেবে আপনার আরও উন্নত ডেটা স্ট্রাকচার দরকার হতে পারে। অথবা আপনি আউটসাইড থেকে (ব্যাকএন্ড বা API বা SDK ক্লায়েন্ট থেকে) KV স্টোরেজ এক্সেস করতে চাইতে পারেন। তাই আমরা সম্প্রতি Upstash-এ REST API সক্ষম করেছি।
এখন আপনি আপনার Upstash Redis ডেটাবেস এক্সেস করতে পারেন:
- Cloudflare Workers-এ Upstash REST API
- কমান্ড লাইন টার্মিনালে redis-cli
- প্রোগ্রামিং ল্যাঙ্গুয়েজের যেকোনো Redis ক্লায়েন্ট
আপনার ডেটাবেস ডিটেইলস পেজের connect বাটনে ক্লিক করে কিছু স্যাম্পল কোড স্নিপেট এবং কমান্ড দেখুন।
Cloudflare Workers এবং Upstash Redis REST API একসাথে একটি ছোট অ্যাপ্লিকেশন বানাই।
অ্যাপ্লিকেশন
Redisকে সোর্স অফ ট্রুথ হিসেবে ব্যবহার করে Cloudflare Worker-এ IP Allow/Deny।
প্রেরিকোয়িজিটস
- একটি সার্ভারলেস Redis ডেটাবেস ( Upstash Console- থেকে তৈরি করুন )
- Cloudflare একাউন্ট বা CF Playground ব্যবহার করুন
- বেসিক জাভাস্ক্রিপ্ট নলেজ
- বেসিক Cloudflare Workers নলেজ
:::note Upstash ডেটাবেস তৈরি করার সময় Global Database সিলেক্ট করুন। গ্লোবাল ডেটাবেস ডেটা একাধিক রিজনে রেপ্লিকেট করে এজ ফাংশন থেকে লেটেন্সি কমায়। :::
একটি Cloudflare Worker তৈরি করুন এবং রিকোয়েস্ট ইন্টারসেপ্ট করুন। Worker তৈরি করলে স্যাম্পল কোড স্বয়ংক্রিয়ভাবে আসবে।
ইমপ্লিমেন্টেশন
ভিজিটারের IP অ্যাড্রেস পান:
async function handleRequest(request) {
const ip = request.headers.get("cf-connecting-ip");
return new Response(ip);
}
হেডার থেকে ভিজিটারের IP অ্যাড্রেস পাওয়া সম্ভব। এখন চেক করব এই IP ঠিকানা আলাউড লিস্টে আছে কিনা। একটু REST API কল করে কোড উন্নত করি।
async function handleRequest(request) {
const ip = request.headers.get("cf-connecting-ip");
res = await fetch(
"https://YOUR_DATABASE_ENDPOINT/sismember/allowed-set/" + ip + "?_token=YOUR_REST_API_TOKEN"
);
if ((await res.text()).includes("1")) {
return new Response(ip + " is allowed.");
}
return new Response(ip + " is not allowed.");
}
এখন আমরা Upstash Redis সার্ভারে REST API কল করে চেক করছি IP অ্যাড্রেস লিস্টে আছে কিনা। রেজাল্টে "1" থাকলে মানে লিস্টে আছে, নাইলে নেই।
redis-cli ব্যবহার করে Redis সেট আপডেট করতে পারেন:
sadd allowed-set $IP_ADDRESS
উপসংহার এবং ভবিষ্যতের কাজ
এখন REST API ব্যবহার করে আপনার Redis সার্ভার ইনস্ট্যান্স এক্সেস করা সম্ভব। আমরা প্রায় সব কমান্ড REST API-তে সাপোর্ট করছি। আরো ডিটেইলের জন্য আমাদের ডকুমেন্টেশন দেখুন। Cloudflare KV স্টোরেজের সাথে আপনি শুধু KV ডিকশনারি API-তে বাঁধা থাকেন এবং থার্ড-পার্টি অ্যাপ্লিকেশন থেকে Cloudflare Workers KV এক্সেস করা সহজ নয়। কিন্তু Redis-এর অনেক ক্লায়েন্ট SDK এবং redis-cli আছে। Upstash-এও আপনি REST API ব্যবহার করে Redis ডেটাবেস এক্সেস করতে পারেন।
এই সিম্পল অ্যাপ্লিকেশনকে Cloudflare Workers-এ একটি সিকিউরিটি গার্ড হিসেবে এক্সটেন্ড করা সম্ভব। ব্যবহারকারীরা Redis ডেটাবেসে কনফিগ ভ্যালু চেঞ্জ করতে পারেন এবং Cloudflare Worker Redis থেকে কনফিগারেশন পড়তে পারবে।