একটি ক্লায়েন্টকে অন্য ক্লায়েন্টের SSH সেবায় পৌঁছাতে হবে, আর পুলের বাকি অংশ আজ যতটা বিচ্ছিন্ন ততটাই থাকা উচিত। লোভনীয় সুইচ হল client-to-client, যা সবার জন্য একসঙ্গে সহকর্মী প্রবেশ চালু করে এবং সিদ্ধান্ত কার্নেলের বদলে OpenVPN-কে দেয়। সংকীর্ণ উত্তর ওই সুইচ বন্ধ রাখে এবং সার্ভারের নিজের রাউটিং ও ফায়ারওয়ালকে ঠিক একটি প্রবাহ বহন করতে দেয়।

প্রক্রিয়াটি নিয়মের পাঠ্যের চেয়ে বেশি গুরুত্বপূর্ণ, কারণ দুটি পদ্ধতি প্যাকেটকে আলাদা জায়গায় রাখে। কোনটি বেছেছেন তা জানা এমন নিয়মটিকেও ব্যাখ্যা করে যা কিছুই করে না বলে মনে হয় এবং সেই সহকর্মীকেও যে তা ছাড়াই সংযুক্ত হয়।

client-to-client প্যাকেট কোথায় সরায়

client-to-client চালু থাকলে সার্ভার সহকর্মীর প্যাকেট টানেল ডিভাইস থেকে আবার বাইরে না পাঠিয়ে ভেতরেই এগিয়ে পাঠায়, তাই প্যাকেট কখনও কার্নেলের ফরওয়ার্ডিং পথে পৌঁছায় না। এটি সুবিধাজনক এবং এর অর্থ আপনার ফায়ারওয়াল যে প্রবাহের নজরদারি করার কথা তা কখনও দেখে না। অপশন বন্ধ রাখুন এবং সার্ভার প্যাকেট একই ইন্টারফেস দিয়ে আবার বাইরে পাঠায়, যা এটিকে netfilter-এর সামনে রাখে। একই ইন্টারফেস ভেতরে, একই বাইরে, এবং FORWARD শৃঙ্খলের ভোট আছে।

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

সহকর্মীর প্যাকেট যে পথ সত্যিই নেয়

ধরুন Linux Community OpenVPN 2.6 সেবা, DCO-র বদলে ব্যবহারকারী স্থানে TUN প্রক্রিয়াকরণ, সাবনেট টপোলজি, tun0, এবং 10.44.0.0/24-এর পুল যেখানে ক্লায়েন্ট A 10.44.0.21-এ এবং ক্লায়েন্ট B 10.44.0.37-এ আছে। সাবনেট টপোলজিতে A যে ঠিকানা ও নেটমাস্ক পেয়েছে তা ইতিমধ্যেই পুল ঢাকে, তাই A কোনো অতিরিক্ত ঠেলে দেওয়া রুট ছাড়াই প্যাকেট টানেল ডিভাইসে পাঠায়। A-তে কার্যকর রুট যাচাই করুন, ধরে নেবেন না।

সার্ভারে প্যাকেট B-কে ঠিকানা দিয়ে আসে, যা স্থানীয় ঠিকানা নয়, তাই এটি এগিয়ে পাঠানো হয়। এটি ঘটতে হলে IPv4 ফরওয়ার্ডিং চালু থাকতে হবে, এবং রুট অনুসন্ধানকে প্যাকেট আবার tun0 দিয়ে বাইরে পাঠাতে হবে। তাই ফায়ারওয়াল দুই পাশে একই ইন্টারফেসযুক্ত ফরওয়ার্ড করা প্রবাহ দেখে, এবং এটিই সেই সূক্ষ্ম বিষয় যা বেশিরভাগ নিয়মসমষ্টি এড়িয়ে যায়। এখানে উৎস অনুবাদের দরকার নেই, এবং A-র ঠিকানা অক্ষত রাখাই B-কে তার নিজের উৎসভিত্তিক নিয়ম প্রয়োগ করতে দেয়।

সার্ভারে দুটি নিয়ম, এই ক্রমে

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

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o tun0 -s 10.44.0.21 -d 10.44.0.37 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -j DROP

এই কমান্ডগুলো উদাহরণ এবং আপনার হোস্ট নিয়ম সংরক্ষণে যে প্রক্রিয়া ব্যবহার করে তারই অংশ; চলার সময় ঢোকানো নিয়ম পরের বুটে হারিয়ে যায়। অবস্থাযুক্ত নিয়মই B-র উত্তর ও TCP হ্যান্ডশেককে দ্বিতীয়, প্রতিফলিত গ্রহণ ছাড়াই ফিরে আসতে দেয়।

পরে নিয়মের তালিকা নয়, কাউন্টার দেখুন, কারণ যে নিয়ম কখনও মেলে না তা কাজ করা নিয়মের মতোই দেখায়। কাউন্টার শূন্যে থাকলে প্যাকেট আপনি যে পথ ভাবছেন সেটি নিচ্ছে না।

B-কে এখনও কী অনুমতি দিতে হবে

B-ই SSH সেবা চালায়, তাই টানেল ঠিকানায় কিছু শুনছে কি না এবং তার নিজের হোস্ট ফায়ারওয়াল উৎস গ্রহণ করে কি না তা B ঠিক করে। সার্ভারে দেওয়া নেটওয়ার্ক অনুমতি B-র কোনো অ্যাকাউন্টের জন্য অনুমতি নয়, এবং হোস্ট কী যাচাই ও ব্যবহারকারী প্রমাণীকরণ অন্য যেকোনো জায়গা থেকে আসার মতোই প্রযোজ্য থাকে।

আগে ইতিবাচক কেসটি পরীক্ষা করুন: A থেকে B-র টানেল ঠিকানায় নতুন SSH সংযোগ, প্রত্যাশিত হোস্ট কী দিয়ে গৃহীত। তারপর অন্য সহকর্মী বা অন্য পোর্ট পরীক্ষা করে নিশ্চিত করুন যে তা প্রত্যাখ্যাত হয়, কারণ চুপচাপ সবকিছু অনুমতি দেওয়া অনুমতি কাজ করা অনুমতির থেকে তখনই আলাদা বোঝা যায় যখন তা গুরুত্বপূর্ণ হয়। ওই পরীক্ষার দুই অর্ধই প্রয়োজন, আর দ্বিতীয়টি সেই অর্ধ যা মানুষ এড়িয়ে যায়।

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

সম্পর্কিত নিবন্ধ