HTTP প্রক্সি, SSH টানেল নাকি VPN: সঠিক স্তর বেছে নিন
প্রক্সি, SSH টানেল ও VPN ভিন্ন ধরনের ট্রাফিক বহন করে। যে প্রোটোকল ও নাম সমাধান আপনার কাজে লাগে তার সঙ্গে স্তর মিলিয়ে নিন, তারপর পথটি যাচাই করুন।
একটি অভ্যন্তরীণ সেবায় কীভাবে পৌঁছাবেন তা তিনজন ইঞ্জিনিয়ারকে জিজ্ঞাসা করুন, তিনটি নকশা পাবেন: একটি ওয়েব প্রক্সি, একটি SSH টানেল বা একটি পূর্ণ VPN। তিনটিই দূরবর্তী সেবা নাগালে আনতে পারে, আর তিনটিই ট্রাফিককে অন্য জায়গা থেকে আসছে বলে দেখাতে পারে। পার্থক্য পরে প্রকাশ পায়, যখন ব্যবহৃত প্রোটোকল বেছে নেওয়া যন্ত্রটি যেটা ধরে নেয় তা নয়। দ্রুত ব্রাউজার পরীক্ষায় উত্তীর্ণ নকশা যে আবেদনের কারণে অনুরোধটি এসেছিল সেখানে নিয়মিতভাবে ব্যর্থ হয়।
দুটি তথ্য থেকে সিদ্ধান্ত নিন: কোন প্রোটোকলগুলো পার হতে হবে, আর জড়িত নামগুলো কে সমাধান করতে পারে। বাকি সব পছন্দের বিষয়।
প্রক্সি কেবল তা-ই সরায় যা সে বোঝে
ওয়েব প্রক্সি যে প্রোটোকলের জন্য তৈরি তা বিশ্লেষণ করে। ক্লায়েন্ট তাকে একটি অনুরোধ দেয় আর সে সেই অনুরোধ সামনে পাঠায়, তাই প্রক্সি সেটিংস নেই এমন আবেদন আদৌ অংশ নেয় না। HTTPS-এর জন্য ক্লায়েন্টের অস্বচ্ছ চ্যানেল দরকার, যা প্রক্সি CONNECT-এর মাধ্যমে দেয়, অনুরোধ পড়ে নয়।
SSH ডাইনামিক ফরোয়ার্ড একটি স্থানীয় পোর্ট খোলে যা SOCKS বলে, আর সেই পোর্ট TCP স্ট্রিমকে ক্লায়েন্টের নামানো যেকোনো গন্তব্যে পাঠায়। TCP-ভিত্তিক প্রোটোকল সাধারণত এর মধ্য দিয়ে কাজ করে। UDP কাজ করে না, যদি কোনো যন্ত্র স্পষ্টভাবে সমর্থন না যোগ করে। স্থানীয় ফরোয়ার্ড আরও সংকীর্ণ: একটি স্থানীয় পোর্ট একটি নির্দিষ্ট হোস্ট ও পোর্টে মাপা, যা একটি জানা সেবা পরিবেশন করে আর কিছু নয়।
ssh -D 1080 user@bastion
ssh -L 8443:fileserver.internal:443 user@bastionVPN প্যাকেট সরায়। ক্লায়েন্ট টানেলে যা পাঠায় তা সবই এর মধ্য দিয়ে যায়, UDP ও ICMP সহ, তাই এটি একক সংযোগের বদলে নেটওয়ার্কের প্রয়োজন মেটায়।
কাউকে নামটি সমাধান করতে হবে
যখন লক্ষ্য নাম কেবল দূরবর্তী নেটওয়ার্কের DNS-এ থাকে, যে বাক্সটি খোঁজ করে তাকে সেই জোন দেখতে হবে। ওয়েব প্রক্সি নিজেই খোঁজ করে, তাই অভ্যন্তরীণ নাম এর মধ্য দিয়ে কাজ করে, এমনকি ল্যাপটপ নামটি আদৌ সমাধান করতে না পারলেও। SOCKS একইভাবে আচরণ করতে পারে, কিন্তু কেবল যদি ক্লায়েন্ট নামটি পাঠিয়ে দেয়, ইতিমধ্যে সমাধান করা ঠিকানায় সংযোগ করার বদলে। সেই সিদ্ধান্ত ক্লায়েন্টে, সার্ভারে নয়।
curl বিভাজনটি স্পষ্ট দেখায়: একটি ফ্ল্যাগ হোস্টনাম প্রক্সিতে পাঠায়, আরেকটি আগে স্থানীয়ভাবে সমাধান করে। স্থানীয় সমাধানে কেবল-অভ্যন্তরীণ নাম কোনো টানেল স্পর্শ করার আগেই ব্যর্থ হয়, আর ত্রুটি প্রক্সিকে দোষ দেয় যা আসলে একটি DNS সিদ্ধান্ত ছিল।
VPN তৃতীয় পথ নেয়: রুটের পাশে ব্যক্তিগত রিজলভার ও সার্চ ডোমেইন বসিয়ে। এটি সুবিধাজনক, আর এটি একটি পরিচিত ভ্রম তৈরি করে: যে রুট আছে অথচ রিজলভার উত্তর দেয় না, তা দেখতে ঠিক মৃত টানেলের মতো, যদিও প্যাকেট ওপারে পৌঁছাচ্ছে।
যখন নেটওয়ার্ক কেবল একটি প্রস্থান অনুমোদন করে
অনেক কর্পোরেট নেটওয়ার্ক কেবল প্রমাণিত ওয়েব প্রক্সির মধ্য দিয়ে বাইরের সংযোগ অনুমোদন করে। OpenVPN ও SSH দুটোকেই সেখানে কাজ করানো যায়, প্রথমটি নিজের পরিবহন প্রক্সির মধ্য দিয়ে টানেল করে, দ্বিতীয়টি একটি প্রক্সি কমান্ড দিয়ে যা ছোট CONNECT সহায়ক চালায়।
TCP-ভিত্তিক টানেল সেই সীমাবদ্ধতা সহ্য করে, UDP-ভিত্তিক VPN করে না, যা এমন অনেক কনফিগারেশন ব্যাখ্যা করে যা বাড়িতে কাজ করে অফিসে ব্যর্থ হয়। দ্বিতীয় খরচ সহজে চোখ এড়ায়: প্রক্সিযুক্ত TCP সংযোগের ভিতরে বহন করা TCP টানেলের এখন দুই স্তর পুনঃপ্রেরণ করে, আর ক্ষতির সময় এই জোড়া এমনভাবে আটকে যায় যা কোনো স্তর একা তৈরি করে না।
মধ্যস্থতাকারীদের শৃঙ্খলবদ্ধ করা স্তর বাছাই থেকে আলাদা প্রশ্ন। দ্বিতীয় প্রক্সি বা Tor যোগ করা বদলে দেয় কে কী পর্যবেক্ষণ করে, আর শৃঙ্খলে অবস্থান ঠিক করে কোন হপ সাইফারটেক্সট দেখে।
হপের সংখ্যার চেয়ে ক্রম বেশি জরুরি। বাইরের হপ এনক্রিপ্টেড স্ট্রিম দেখে, ভিতরের হপ তার বহন করা প্লেইনটেক্সট দেখে, তাই একটি শৃঙ্খল তার সবচেয়ে অসতর্ক লিঙ্কের মতোই গোপন। হপের মধ্যে প্রোটোকল মেশানো এটি স্বয়ংক্রিয়ভাবে উন্নত করে না। এটি মূলত ব্যর্থতার ধরনগুলো নিয়ে ভাবা আরও কঠিন করে তোলে।
জাল ঠিকানা কোনো একটি বিকল্প নয়
অন্যের উৎস ঠিকানা দিয়ে প্যাকেট তৈরি করে কোনো কাজ হয় না: উত্তরগুলো আসল মালিকের কাছে যায়, আর বেশিরভাগ নেটওয়ার্ক ট্রাফিক সরাসরি ফেলে দেয়। মধ্যস্থতাকারী দরকার কারণ উৎসটি বানানো যায় না, আর এটাই তিন নকশার সৎ যুক্তি।
এটি আরও সীমাবদ্ধ করে তাদের প্রত্যেকে কী দাবি করতে পারে। নির্দিষ্ট ঠিকানা থেকে আসছে বলে দেখানো হলো সেই প্রশ্ন যে ঠিকানাটি বৈধভাবে কোথায় বরাদ্দ এবং কে এটি রুট করতে পারে, কোন যন্ত্র হেডার জাল করতে পারে তা নয়। যদি কোনো নকশা অন্যথা ধরে নেয়, ধারণাটি প্রথম প্রোভাইডারেই ব্যর্থ হয় যে এটি ফিল্টার করে। ধারণাটি লিখে রাখুন যাতে ব্যর্থতা এলে তা চেনা যায়।
প্রোটোকল ও নাম দিয়ে সিদ্ধান্ত নিন
একটি প্রক্সি বেছে নিন যখন একক ওয়েব ক্লায়েন্টের একক ওয়েব সেবা দরকার এবং তার প্রক্সি সেটিংস আছে। SSH টানেল বেছে নিন যখন অল্প কিছু জানা TCP সেবা যথেষ্ট এবং SSH প্রবেশাধিকার আগেই আছে। VPN বেছে নিন যখন কয়েকটি আবেদন, অ-TCP ট্রাফিক, ব্যক্তিগত DNS বা পুনর্ব্যবহারযোগ্য পথ প্রয়োজনটির অংশ।
তারপর আসল ক্লায়েন্ট ও আসল নাম দিয়ে যাচাই করুন। প্রক্সি দিয়ে পাতা লোড করলে UDP সম্পর্কে কিছুই শেখে না, আর একটি যন্ত্র SOCKS-এ চালালে সিস্টেম রিজলভার সম্পর্কে কিছুই শেখে না। পড়ুন প্রক্রিয়াটি কোন স্থানীয় ঠিকানায় বাঁধা পড়েছে এবং কোন রিজলভার উত্তর দিয়েছে। এটাই পার্থক্য এমন পথের যা কাজ করে আর এমন পথের যা একবার কাকতালীয়ভাবে কাজ করেছিল।