আমি গত 16 মাস ধরে এই সমস্যাটির সমাধান বা অন্বেষণ করছি। তবে প্রতিবার আমি যখন দেখি তখন এসএসএইচ প্রোটোকলটি প্রাসঙ্গিক আরএফসিগুলিতে উল্লিখিত এবং বড় প্রয়োগগুলি দ্বারা কার্যকর করা হিসাবে এটি করা অসম্ভব বলে মনে হচ্ছে।
তবে আপনি যদি কিছুটা পরিবর্তিত এসএসএইচ ক্লায়েন্ট ব্যবহার করতে ইচ্ছুক হন এবং আপনি প্রোটোকলগুলি এমনভাবে ব্যবহার করতে ইচ্ছুক হন যেগুলি যখন তাদের নকশা করা হয়েছিল তখন ঠিক উদ্দেশ্য ছিল না, তবে এটি অর্জন সম্ভব। এই নীচে আরও।
কেন এটা সম্ভব হচ্ছে না
ক্লায়েন্টটি এসএসএইচ প্রোটোকলের অংশ হিসাবে হোস্টনামটি প্রেরণ করে না।
এটি কোনও ডিএনএস লুকের অংশ হিসাবে হোস্টনামটি প্রেরণ করতে পারে তবে এটি ক্যাশে হতে পারে এবং ক্লায়েন্টের কাছ থেকে সমাধানকারীদের মাধ্যমে প্রাইসেটেটিভ সার্ভারের পথটি প্রক্সিটি অতিক্রম করতে পারে না এবং এমনকি এটি নির্দিষ্ট ডিএনএস লুকআপের সাথে যুক্ত করার কোনও শক্ত উপায় না থাকলেও did নির্দিষ্ট এসএসএইচ ক্লায়েন্ট।
এসএসএইচ প্রোটোকলটি আপনি নিজেই করতে পারেন এমন অভিনব কোনও কিছুই নেই। এমনকি ক্লায়েন্টের কাছ থেকে এসএসএইচ সংস্করণ ব্যানারটি না দেখে আপনাকে একটি সার্ভার বাছতে হবে। প্রক্সিটিতে কোনও কিছু প্রেরণের আগে আপনাকে ক্লায়েন্টকে একটি ব্যানার পাঠাতে হবে। সার্ভারগুলির ব্যানারগুলি আলাদা হতে পারে এবং আপনার অনুমান করার কোনও সুযোগ নেই, কোনটি সঠিকভাবে ব্যবহার করা উচিত।
যদিও এই ব্যানারটি এনক্রিপ্ট না করে পাঠানো হয়েছে, আপনি এটি সংশোধন করতে পারবেন না। সংযোগ সেটআপ করার সময় সেই ব্যানারটির প্রতিটি বিট যাচাই করা হবে, সুতরাং আপনি কিছুটা লাইন থেকে একটি সংযোগ ব্যর্থতার কারণ হবেন।
আমার কাছে উপসংহারটি বেশ স্পষ্ট, এই সংযোগটির কাজ করার জন্য ক্লায়েন্টের পক্ষে কিছু পরিবর্তন করতে হবে।
বেশিরভাগ কাজের ক্ষেত্রগুলি এসএসএইচ ট্র্যাফিককে অন্য একটি প্রোটোকলের অভ্যন্তরে আবদ্ধ করে। কেউ নিজে নিজে এসএসএইচ প্রোটোকল যুক্ত করার কথা ভাবতেও পারেন, যাতে ক্লায়েন্টের পাঠানো সংস্করণ ব্যানারটিতে হোস্টের নাম অন্তর্ভুক্ত থাকে। এটি বিদ্যমান সেভের সাথে সামঞ্জস্যপূর্ণ থাকতে পারে, যেহেতু ব্যানারটির অংশটি বর্তমানে একটি ফর্ম সনাক্তকরণ ক্ষেত্র হিসাবে নির্দিষ্ট করা হয়েছে এবং ক্লায়েন্টরা সাধারণত তাদের নিজস্ব প্রেরণের আগে সার্ভার থেকে সংস্করণ ব্যানারটির জন্য অপেক্ষা করে, প্রোটোকল ক্লায়েন্টকে তাদের ব্যানার প্রেরণের অনুমতি দেয় না প্রথম। Ssh ক্লায়েন্টের কয়েকটি সাম্প্রতিক সংস্করণ (উদাহরণস্বরূপ উবুন্টু 14.04 এ থাকা একটি) সার্ভার ব্যানারটির জন্য অপেক্ষা না করে ব্যানারটি প্রেরণ করে।
আমি কোনও ক্লায়েন্টকে জানি না, যা এই ব্যানারটিতে সার্ভারের হোস্টনাম অন্তর্ভুক্ত করার পদক্ষেপ নিয়েছে। এই জাতীয় বৈশিষ্ট্য যুক্ত করতে আমি ওপেনএসএসএইচ মেলিং তালিকায় একটি প্যাচ পাঠিয়েছি । তবে এসএসএইচ ট্র্যাফিকের উপর ঝলক দেওয়া কারও কাছে হোস্টের নামটি প্রকাশ না করার আকাঙ্ক্ষার ভিত্তিতে এটি প্রত্যাখ্যান করা হয়েছিল। যেহেতু একটি গোপন হোস্টনাম নাম ভিত্তিক প্রক্সি পরিচালনার সাথে মৌলিকভাবে বেমানান, তাই শীঘ্রই এসএসএইচ প্রোটোকলের জন্য কোনও অফিসিয়াল এসএনআই এক্সটেনশন দেখার আশা করবেন না।
একটি বাস্তব সমাধান
আমার পক্ষে যে সমাধানটি সবচেয়ে ভাল কাজ করেছে তা হ'ল আইপিভি 6 ব্যবহার করা।
আইপিভি With সহ আমি প্রতিটি সার্ভারের জন্য পৃথক আইপি ঠিকানা নির্ধারণ করতে পারি, যাতে গেটওয়েটি কোন সার্ভারে প্যাকেট প্রেরণ করতে হবে তা নির্ধারণের জন্য গন্তব্য আইপি ঠিকানাটি ব্যবহার করতে পারে। এসএসএইচ ক্লায়েন্টগুলি কখনও কখনও এমন নেটওয়ার্কগুলিতে চলতে পারে যেখানে আইপিভি 6 ঠিকানা পাওয়ার একমাত্র উপায় টেরেডো ব্যবহার করে। টেরেডো অবিশ্বাস্য হিসাবে পরিচিত, তবে কেবল তখনই যখন সংযোগের নেটিভ আইপিভি 6 শেষটি পাবলিক টেরেডো রিলে ব্যবহার করে। গেটওয়েতে কেউ কেবল টেরিডো রিলে রাখতে পারে, যেখানে আপনি প্রক্সিটি চালাবেন। মিরাদেও পাঁচ মিনিটেরও কম সময়ে রিলে হিসাবে ইনস্টল এবং কনফিগার করা যায়।
একটি workaround
আপনি একটি জাম্প হোস্ট / বাশান হোস্ট ব্যবহার করতে পারেন। এই পদ্ধতির ক্ষেত্রে আপনি স্বতন্ত্র সার্ভারগুলির এসএসএইচ পোর্টটি সরাসরি পাবলিক ইন্টারনেটে প্রকাশ করতে চান না এমন উদ্দেশ্যে এই উদ্দেশ্যে করা হয়েছে। এসএসএইচের জন্য আপনার প্রয়োজনীয় বহিরাগত আইপি ঠিকানার সংখ্যা হ্রাস করার এতে অতিরিক্ত সুবিধা রয়েছে, যার কারণে এটি এই দৃশ্যে ব্যবহারযোগ্য। সুরক্ষার কারণে সুরক্ষার জন্য আরও একটি স্তর যুক্ত করার উদ্দেশ্যে এটি সমাধান হওয়া সমাধানটি যখন আপনার অতিরিক্ত সুরক্ষার প্রয়োজন হয় না তখন আপনাকে এটি ব্যবহার করা থেকে বিরত রাখে না।
ssh -o ProxyCommand='ssh -W %h:%p user1@bastion' user2@target
আসল সমাধান (আইপিভি 6) আপনার নাগালের বাইরে থাকলে এটি কাজ করতে হ্যাক করা একটি নোংরা
আমি যে হ্যাকটি বর্ণনা করতে চলেছি তা কেবল একেবারে শেষ উপায় হিসাবে ব্যবহার করা উচিত। এমনকি আপনি এই হ্যাকটি ব্যবহার করার বিষয়ে চিন্তাভাবনা করার আগে, আমি দৃ strongly়ভাবে সুপারিশ করছি যে প্রতিটি সার্ভারের জন্য আপনি এসএসএইচের মাধ্যমে বাহ্যিকভাবে পৌঁছনীয় হতে চান তার প্রতিটি আইপিভি 6 ঠিকানা প্রাপ্ত হন। আপনার এসএসএইচ সার্ভারগুলিতে অ্যাক্সেসের জন্য আইপিভি 6টিকে আপনার প্রাথমিক পদ্ধতি হিসাবে ব্যবহার করুন এবং কেবলমাত্র এই আইপিভি 4-শুধুমাত্র নেটওয়ার্ক থেকে যখন আপনার এসএসএইচ ক্লায়েন্ট চালানো দরকার সেখানে আইপিভি 6 স্থাপন করার ক্ষেত্রে আপনার কোনও প্রভাব নেই this
ধারণাটি হ'ল ক্লায়েন্ট এবং সার্ভারের মধ্যে ট্র্যাফিকের জন্য পুরোপুরি বৈধ এসএসএইচ ট্র্যাফিক হওয়া দরকার। তবে প্রক্সিটিতে হোস্টের নামটি সনাক্ত করতে প্যাকেটের প্রবাহ সম্পর্কে যথেষ্ট বুঝতে হবে। যেহেতু এসএসএইচ হোস্ট-নেম প্রেরণের কোনও উপায় নির্ধারণ করে না, আপনি পরিবর্তে অন্যান্য প্রোটোকলগুলি বিবেচনা করতে পারেন যা এ জাতীয় সম্ভাবনা সরবরাহ করে।
সার্ভারের কোনও ডেটা প্রেরণের আগে এইচটিটিপি এবং এইচটিটিপিএস উভয়ই ক্লায়েন্টকে হোস্টনাম পাঠাতে দেয় allow এখন প্রশ্ন, এসএসএইচ ট্রাফিক এবং এইচটিটিপি এবং এইচটিটিপিএস হিসাবে একসাথে বৈধ বাইটের একটি স্ট্রিম নির্মাণ করা সম্ভব কিনা কিনা। এইচটিটিপি এটি একটি অ-স্টার্টার বেশ, তবে এইচটিটিপি সম্ভব (HTTP- র যথেষ্ট উদার সংজ্ঞাগুলির জন্য)।
SSH-2.0-OpenSSH_6.6.1 / HTTP/1.1
$:
Host: example.com
এটি কি আপনার কাছে এসএসএইচ বা এইচটিটিপির মতো দেখাচ্ছে? এটি এসএসএইচ এবং সম্পূর্ণ আরএফসি অনুবর্তী (বাইনারি অক্ষরের কিছু বাদে এসএফ রেন্ডারিং করে কিছুটা ম্যাঙ্গাল হয়ে গেছে)।
এসএসএইচ সংস্করণ স্ট্রিংয়ে একটি মন্তব্য ক্ষেত্র অন্তর্ভুক্ত রয়েছে, যার উপরেরটির মান রয়েছে / HTTP/1.1
। নতুন লাইনের পরে এসএসএইচে কিছু বাইনারি প্যাকেট ডেটা রয়েছে। প্রথম প্যাকেটটি MSG_SSH_IGNORE
ক্লায়েন্টের দ্বারা প্রেরিত বার্তা এবং সার্ভার দ্বারা উপেক্ষা করা হয়। অগ্রাহ্য করা হবে পে লোডটি হ'ল:
:
Host: example.com
যদি কোনও HTTP প্রক্সি এটি গ্রহণযোগ্যভাবে যথেষ্ট উদার হয়, তবে বাইটগুলির একই ক্রমটি একটি HTTP পদ্ধতি হিসাবে ব্যাখ্যা করা হবে SSH-2.0-OpenSSH_6.6.1
এবং উপেক্ষা বার্তার শুরুতে বাইনারি ডেটা একটি HTTP শিরোনামের নাম হিসাবে ব্যাখ্যা করা হবে।
প্রক্সিটি HTTP পদ্ধতি বা প্রথম শিরোনাম উভয়ই বুঝতে পারে। তবে এটি শিরোনামটি বুঝতে পারে Host
যা ব্যাকএন্ডটি সন্ধানের জন্য এটির প্রয়োজন।
এই কাজ করার জন্য প্রক্সিটি মূলত এই নীতিতে তৈরি করা উচিত যে এটি ব্যাকএন্ড সন্ধানের জন্য যথেষ্ট পরিমাণে এইচটিটিপি বুঝতে হবে এবং একবার ব্যাকএন্ডটি সন্ধান করা গেলে প্রক্সিটি কেবল কাঁচা বাইট প্রবাহটি পাস করবে এবং আসল সমাপ্তি ছাড়বে ব্যাকএন্ড দ্বারা করা এইচটিটিপি সংযোগের।
এইচটিটিপি প্রক্সি সম্পর্কে এতগুলি অনুমান করা এক প্রকারের মতো লাগতে পারে। তবে আপনি যদি এসএসএইচ সমর্থন করার অভিপ্রায় তৈরি করে একটি নতুন টুকরা সফ্টওয়্যার ইনস্টল করতে ইচ্ছুক হন, তবে এইচটিটিপি প্রক্সিটির প্রয়োজনীয়তা খুব খারাপ লাগবে না।
আমার নিজের ক্ষেত্রে আমি কোড, কনফিগারেশন বা অন্যথায় কোনও পরিবর্তন ছাড়াই ইতিমধ্যে ইনস্টল করা প্রক্সিটিতে কাজ করার জন্য এই পদ্ধতিটি পেয়েছি। এবং এটি কেবল এইচটিটিপি এবং কোনও এসএসএইচকে মাথায় না রেখে লেখা প্রক্সিটির জন্য ছিল।
ধারণা ক্লায়েন্ট এবং প্রক্সি প্রমাণ । (দাবি অস্বীকার করুন যে প্রক্সিটি আমার দ্বারা পরিচালিত একটি পরিষেবা। একবার অন্য কোনও প্রক্সি এই ব্যবহারকে সমর্থন করার জন্য নিশ্চিত হয়ে গেলে লিঙ্কটি প্রতিস্থাপন করতে নির্দ্বিধায় অনুভব করুন))
এই হ্যাক এর গুহা
- এটি ব্যবহার করবেন না। আসল সমাধানটি ব্যবহার করা আরও ভাল, এটি আইপিভি 6।
- প্রক্সিটি যদি এইচটিটিপি ট্র্যাফিক বোঝার চেষ্টা করে তবে অবশ্যই তা ভঙ্গ হতে চলেছে।
- পরিবর্তিত এসএসএইচ ক্লায়েন্টের উপর নির্ভর করা ভাল নয়।