VPN-এর পেছনে PHP-র REMOTE_ADDR আসলে কী বলে
এটি আপনার ওয়েব সার্ভারের দেওয়া মান, টানেলে কোনো জিজ্ঞাসা নয়। অনুরোধের পথ দেখুন, কে এটি আবার লিখতে পারে তা যাচাই করুন এবং পরিচয় অ্যাপে রাখুন।
কেউ জিজ্ঞাসা করে কেন VPN ব্যবহারকারী অ্যাপ্লিকেশন লগে গেটওয়ের ঠিকানা নিয়ে দেখা যায়, বা দুপুরের খাবারের পরে বদলে যাওয়া ঠিকানা নিয়ে দেখা যায়। উত্তর শুরু হয় এটা দিয়ে যে এই মানটি কী: একটি এন্ট্রি যা ওয়েব সার্ভার অনুরোধের পরিবেশে রেখেছিল। এটি টানেলের ভেতরের জিজ্ঞাসা নয়, সার্টিফিকেটের পরিচয় নয়, এবং নম্বরটি একজন মানুষের এই প্রতিশ্রুতিও নয়। এগুলোর যেকোনোটি হিসেবে পড়লে ভিন্ন ভিন্নভাবে ভুল আত্মবিশ্বাসী উত্তর পাওয়া যায়।
মান সার্ভার থেকে আসে, টানেল থেকে নয়
PHP অনুরোধের পরিবেশ পায় তার কাছ থেকে যা স্ক্রিপ্ট চালিয়েছে। PHP-র সার্ভার ভেরিয়েবলের রেফারেন্স এই এন্ট্রিগুলোকে ওয়েব সার্ভারের তৈরি বলে বর্ণনা করে, আর তাদের প্রাপ্যতা নির্ভর করে অনুরোধটি কীভাবে এসেছে তার উপর।
VPN-এর কমান্ড-লাইন হুক হিসেবে চলা স্ক্রিপ্ট সম্পূর্ণ ভিন্ন সম্পাদন প্রসঙ্গ। এর কোনো ওয়েব অনুরোধ নেই, ক্লায়েন্ট সকেট নেই এবং REMOTE_ADDR নেই, তাই হুকে কপি করা ওয়েব কোড ভুল মানের বদলে খালি মান দেয়। হুকের নিজস্ব পরিবেশ আছে, যা ডেমন পূরণ করে, এবং তা আলাদাভাবে নথিভুক্ত। সেখানে REMOTE_ADDR-এর দিকে হাত বাড়ানো মানে এমন ভেরিয়েবলের দিকে হাত বাড়ানো যা কখনো সেট হয়নি।
দুটি লগ তুলনা করার আগে এই পার্থক্য মনে রাখুন। হতে পারে আপনি একটি পৃষ্ঠার অনুরোধের সাথে হুকের তুলনা করছেন, আর সেটি কোনো তুলনাই নয়। আগে সম্পাদন প্রসঙ্গ দেখুন, পরে ঠিকানা।
নম্বরে ভরসা করার আগে অনুরোধের পথ দেখুন
রিপোর্ট করা ঠিকানাটি ওয়েব সার্ভার যে সংযোগ দেখেছে তার সমকক্ষ। ক্লায়েন্ট ও সেই সার্ভারের মধ্যে যা কিছু রাখুন, সমকক্ষ বদলে যায়। অনুবাদ, সমাপ্তি এবং ভারসাম্য প্রতিটি পর্যবেক্ষণকে ব্যবহারকারী থেকে এক ধাপ দূরে সরায়।
চারটি সাধারণ পথ চারটি ভিন্ন পর্যবেক্ষণ দেয়।
| Path to the listener | What can be reported |
|---|---|
| Client routed straight to the private listener, no translation | The client's tunnel address |
| Gateway translates the source before forwarding | The gateway's translated address |
| Reverse proxy terminates the client and opens its own backend connection | The proxy's backend address |
| Load balancer in front of two proxies | Whichever hop the server treats as its peer |
পথটি গন্তব্যের নাম, ঠিকানার পরিবার এবং প্রতিটি অনুবাদ বিন্দুসহ লিখুন। সেই মানচিত্র ছাড়া সঠিক ও ভুল মান লগের এক লাইনে একই রকম দেখায়। চিত্রের দুই লাইন দুপুরভর তর্ক বাঁচায়।
প্রতিস্থাপন কেবল সেখানেই ঘটে যেখানে তা কনফিগার করা
সার্ভার বা ফ্রেমওয়ার্ক ইচ্ছাকৃতভাবে ক্লায়েন্টের ঠিকানা প্রতিস্থাপন করতে পারে। Apache-র remote-IP মডিউল ও NGINX-এর real-IP মডিউল দুটোই এটি করে, আর PHP যে মান পায় তা নির্ভর করে সেই কনফিগারেশন এবং স্ক্রিপ্ট হ্যান্ডলারকে দেওয়া প্যারামিটারের উপর।
অর্থাৎ REMOTE_ADDR সর্বদা অস্পর্শিত TCP সমকক্ষ নয়। এটি সেই সমকক্ষ যা সার্ভার নিজের নীতি প্রয়োগের পর রিপোর্ট করা বেছে নিয়েছে। এই পার্থক্যই ঠিক করে মানটি প্রমাণ না সাজসজ্জা।
সার্ভারের মালিককে জিজ্ঞাসা করুন এই স্থাপনায় কোন ক্ষেত্রটি প্রামাণিক এবং প্রতিস্থাপন ঘটলে মূল সমকক্ষ কীভাবে সংরক্ষিত থাকে। কেউ উত্তর দিতে না পারলে লগ এখনো কিছুই প্রমাণ করে না।
ফরওয়ার্ডিং হেডার ভরসা করে পড়বেন না
আহ্বানকারী নিজেই ফরওয়ার্ডিং হেডার পাঠাতে পারে। কমা দিয়ে আলাদা করা প্রথম এন্ট্রিকে যাচাইকৃত ব্যবহারকারী ঠিকানা হিসেবে ধরা মানে যে কেউ সংযুক্ত হয় তাকেই বিশ্বাস করার সিদ্ধান্ত, যা হেডারের উদ্দেশ্যের ঠিক উল্টো। হেডার একটি শৃঙ্খল বর্ণনা করে, আর কেবল একটি বিশ্বস্ত স্তর সেই শৃঙ্খলের জামিন দিতে পারে।
সার্ভার বা ফ্রেমওয়ার্কের বিশ্বস্ত প্রক্সি সমর্থন প্রকৃত প্রক্সি শৃঙ্খল কনফিগার করে ব্যবহার করুন এবং সেটিকে সেই শৃঙ্খলের বাইরের উৎসের মান ফেলে দিতে দিন। হাতে লেখা বিশ্লেষণ সেই জায়গা যেখানে বেশিরভাগ আকর্ষণীয় ব্যর্থতা বাস করে।
প্রক্সির রিপোর্ট করা ঠিকানা উপরের ফায়ারওয়াল যে প্যাকেট উৎস দেখে সেটিও বদলায় না। HTTP মেটাডেটা এবং নেটওয়ার্ক ফিল্টারিং আলাদা পর্যবেক্ষণ হিসেবে রাখুন, কারণ তারা ভিন্ন প্রশ্নের উত্তর দেয়।
সিদ্ধান্তের জন্য অ্যাপের পরিচয় ব্যবহার করুন
কোনো ব্যবহারকারীর রেকর্ডে প্রবেশের জন্য প্রমাণিত পক্ষ এবং অ্যাপের অনুমোদন নিয়মের উপর নির্ভর করুন। অভ্যন্তরীণ ঠিকানা পুনরায় বরাদ্দ হতে পারে, এবং একটি অনূদিত ঠিকানা শত শত একসাথে ব্যবহারকারীর প্রতিনিধিত্ব করতে পারে। এই গুণগুলোর কোনোটিই ঠিকানা যাচাই সারাতে পারে না।
যদি পরিচালনকে একটি অনুরোধ VPN সেশনের সাথে যুক্ত করতে হয়, তবে পর্যবেক্ষিত ঠিকানা ও সময়-ছাপকে আপনি যে অনুবাদ মডেল নথিভুক্ত করেছেন তা অনুসারে প্রামাণিক সেশন রেকর্ডের সাথে যুক্ত করুন। এতে এমন সম্পর্ক তৈরি হয় যা আপনি রক্ষা করতে পারেন; কেবল ঠিকানা তা করে না।
নির্ণয়ের জন্য পুরো সার্ভার অ্যারের বদলে দরকারি সেই কয়েকটি ক্ষেত্র লগ করুন, কারণ অ্যারে হেডার ও প্রমাণীকরণ সামগ্রী বহন করতে পারে। উপকারী সিদ্ধান্ত বলে এই স্থাপনায় এই মানের অর্থ কী, কোন মান ক্লায়েন্টের মতো সবচেয়ে বেশি দেখায় তা নয়।