কানেক্ট হুক হলো সেশন নীতি, প্যাকেট ফিল্টার নয়
ক্লায়েন্ট-কানেক্ট হুক প্রতি সেশনে একবার চলে এবং কখনোই পেলোড দেখে না। সেশন যেখানে আছে সেখানে ভর্তির সিদ্ধান্ত রাখুন, আর কনটেন্ট পরিবর্তন যেখানে অনুরোধ আছে সেখানে।
কেউ টানেলের ভেতর দিয়ে ক্লায়েন্টরা কী পাঠায় তা দেখতে চায়, ডকুমেন্টেশনে কানেক্ট হুক খুঁজে পায়, আর এমন একটি স্ক্রিপ্ট লিখতে শুরু করে যা কখনোই একটিও প্যাকেট পাবে না। হুকটি সত্যিকারের এবং কাজের, কিন্তু তার কাজের একক হলো সেশন, কোনো বাইট নয়। সঠিক উপাদান বেছে নেওয়া মানে কাজ ঘটতে পারে এমন তিন জায়গার মধ্যে তুলনা, আর নির্ণায়ক প্রশ্ন হলো কোন উপাদানটি আসলে কোন একক দেখতে পায়।
হুক কী পায়, আর কী কখনোই পায় না
একজন প্রমাণিত ক্লায়েন্ট সেশন প্রতিষ্ঠা করলে ক্লায়েন্ট-কানেক্ট হুক একবার চলে, সার্ভারের প্রসেস প্রসঙ্গে, নথিভুক্ত আর্গুমেন্ট এবং কমন নেম ও নির্ধারিত ঠিকানার মতো এনভায়রনমেন্ট মান নিয়ে। এটি প্রতি-ক্লায়েন্ট কনফিগারেশন লিখতে পারে, ভর্তির সিদ্ধান্ত নিতে পারে, বাইরের কোনো রিসোর্স বরাদ্দ করতে পারে, অথবা সংযোগটি ঘটেছে বলে রেকর্ড করতে পারে। যা এটি করতে পারে না তা হলো ট্রাফিক পর্যবেক্ষণ, কারণ প্রথম প্যাকেট টানেল পেরোনোর সময় হুক ইতিমধ্যে ফিরে গেছে।
এটি এড়িয়ে যাওয়ার মতো কোনো সীমাবদ্ধতা নয়। স্ট্রিম প্রক্রিয়া করার চেষ্টা করা একটি সেশন কলব্যাককে সংযোগের পুরো জীবনকাল ধরে চলতে হতো, আর ডেমনটির স্ক্রিপ্টিং চুক্তি এমন আকৃতির জন্য তৈরি নয়। হুকটি আপনার পথে বাধা বলে সিদ্ধান্ত নেওয়ার আগে জিজ্ঞাসা করুন এটি কীসের জন্য।
পুনঃসংযোগও গুরুত্বপূর্ণ। যে ক্লায়েন্ট বিচ্ছিন্ন হয়ে আবার সংযুক্ত হয় সে নতুন সেশন, তাই হুক যা বরাদ্দ করে তা অবশ্যই ইডেম্পোটেন্ট হতে হবে, নয়তো পরিষ্কার করে দেওয়া কোনো ডিসকানেক্ট ইভেন্টের সঙ্গে জোড়া থাকতে হবে। প্রতিবার পুনঃসংযোগে যে অবস্থা লিক করে, সেটাই হুকভিত্তিক নকশার চেনা প্রথম বাগ।
সেশন নীতি হুকের ভেতরেই থাকে
ভর্তির সিদ্ধান্ত হুকের স্বাভাবিক কাজ। কে সংযুক্ত হয়েছে, কোথা থেকে, কোন সার্টিফিকেট নিয়ে, তা আপনি জানেন, আর এই সেশন চলবে কি না তা আপনি ঠিক করতে পারেন। সেই সিদ্ধান্ত সস্তা, একবারই ঘটে, আর এক বাইট পেলোড দেখার দরকার নেই।
কনফিগারেশন বরাদ্দও একই ছাঁচে পড়ে। হুক ক্লায়েন্টের ঠিকানা বেছে নিতে পারে, সেই পরিচয়ের উপযুক্ত অপশন পাঠাতে পারে, বা সার্ভার এই ক্লায়েন্টের জন্য যে খণ্ড পড়ে তা লিখতে পারে। সিদ্ধান্তটি সেশনভিত্তিক হওয়ায় কিছু ভুল হলে এবং কেউ ব্যাখ্যা করতে হলে যে নির্দিষ্ট ক্লায়েন্ট কেন নির্দিষ্ট ঠিকানা পেল, তা বোধগম্য থাকে।
রেকর্ড করা তৃতীয় উপযুক্ততা। একটি অডিট এন্ট্রি যা বলে কোনো সেশন ভর্তি হয়েছে, তার পরিচয় ও সময়সহ, ঠিক এখানেই থাকে। এটি ট্রাফিক লগ নয় এবং সাজার চেষ্টা করা উচিত নয়। পরে কেউ যদি জিজ্ঞাসা করে ক্লায়েন্ট টানেলের ভেতর কী করেছে, উত্তর অন্য জায়গা থেকে আসতে হবে।
প্যাকেটের কাজ প্যাকেট পথের
যদি প্রয়োজন হয় উড়ন্ত বাইট দেখা বা বদলানো, উপাদানটিকে ফরওয়ার্ডিং পথে থাকতে হবে: সারি সহ ফায়ারওয়াল নিয়ম, ট্রাফিক-নিয়ন্ত্রণ হুক, বা ইউজারস্পেস ফরওয়ার্ডার। ওই কৌশলগুলো প্যাকেট দেখে, আর তাদের নিজস্ব অবস্থা, নিজস্ব ব্যর্থতার ধরন ও নিজস্ব কর্মক্ষমতা প্রোফাইল আছে।
ওই স্তরে পেলোড সম্পাদনা করা তা পড়ার চেয়ে কঠিন। একটি বাইট বদলালে লেন্থ ফিল্ড, চেকসাম বা প্রোটোকল স্টেট মেশিন অকার্যকর হতে পারে, আর তৃতীয় স্তরের টানেল এর কোনোটিই থেকে আপনাকে রক্ষা করে না। এর মানে শুধু এই যে আপনি যে হেডার সম্পাদনা করছেন সেগুলো বাইরের হেডার নয়। কাউকে কনটেন্ট পুনর্লিখনের প্রতিশ্রুতি দেওয়ার আগে ওই মেরামতের কাজের বাজেট রাখুন।
ইন্টারফেস ক্যাপচার এই শ্রেণির সবচেয়ে সস্তা হাতিয়ার, আর এটি সম্পাদক নয়, পর্যবেক্ষণ। মানুষ দুটোকে গুলিয়ে ফেলে কারণ দুটোকেই ট্রাফিক দেখা বলে বর্ণনা করা হয়, কিন্তু ক্যাপচার একটি ফাইল তৈরি করে আর প্যাকেট পথ একটি সিদ্ধান্ত তৈরি করে।
অ্যাপ্লিকেশনের পরিবর্তন অ্যাপ্লিকেশনেই
যখন লক্ষ্য হলো কোনো অনুরোধে কী আছে বা প্রতিক্রিয়া কীভাবে গঠিত হয় তা বদলানো, সঠিক জায়গা হলো পরিষেবাটি নিজেই বা এমন প্রক্সি যা সচেতনভাবে প্রোটোকল সমাপ্ত করে। ওই উপাদানগুলো অনুরোধ, প্রতিক্রিয়া এবং অ্যাপ্লিকেশন যে প্রমাণীকরণ আশা করে তা আগেই বোঝে, আর ঠিক সেই প্রসঙ্গই প্যাকেট ফিল্টারের নেই।
ঠিকানা অনুবাদ এই তালিকার নিচে আছে একটি কারণে। এটি ঠিকানা ও পোর্ট পুনর্লিখন করে এবং পেলোড অক্ষত রাখে, তাই এটি কনটেন্টের হাতিয়ার নয়, যদিও কনটেন্টের উল্লেখ আছে এমন রেসিপিতেও এটি প্রায়ই দেখা যায়।
এই সীমাগুলো আলাদা রাখাই নকশাকে ব্যাখ্যাযোগ্য করে। হুকে সেশন নীতি, প্যাকেট পথে প্যাকেট পরিচালনা, আর যেখানে প্রোটোকল সচেতনভাবে সমাপ্ত হয় সেখানে অ্যাপ্লিকেশন পরিবর্তন: তিনটি বাক্য যা পর্যালোচনার চেকলিস্ট হিসেবেও কাজ করে।
যেখানে TLS এখনো কথোপকথন শেষ করে
উপরের সবকিছুর পরেও একটি জিনিস টিকে থাকে: টানেলের ভেতরের যে ট্রাফিক HTTPS বহন করে, সে নিজের পরিবহন এনক্রিপশন রাখে। VPN-এর চাবি থাকলে আপনি ভেতরের IP প্যাকেট পান, আর অন্য প্রান্তের ওয়েবসাইটের সেশন চাবি পান না।
সেজন্যই হুক নীতিগতভাবেও কনটেন্ট পরিদর্শন করতে পারে না, আর সেজন্যই প্যাকেট পথ সিফারটেক্সট দেখে, যদি না ডিপ্লয়মেন্ট সচেতনভাবে ভেতরের TLS সমাপ্ত করে। স্ক্রিপ্টিং চুক্তি বর্ণনা করে হুককে কী দেওয়া হয়; পেলোড নিয়ে এটি কিছুই বলে না, কারণ দেওয়ার মতো কোনো পেলোড নেই।