मौजूदा HTTP प्रॉक्सी तक SSH स्थानीय फ़ॉरवर्ड: दो loopback पते
SSH होस्ट पर मौजूद प्रॉक्सी एक ही स्थानीय फ़ॉरवर्ड से एक एप्लिकेशन की सेवा कर सकती है। दोनों loopback पतों और प्रॉक्सी प्रोटोकॉल को अलग रखें।
आपकी स्वीकृत प्रॉक्सी एक जंप होस्ट पर चलती है जहाँ वह केवल loopback पर सुनती है, इसलिए उस मशीन के बाहर से कुछ भी उस तक नहीं पहुँच सकता। आपको VPN या नई प्रॉक्सी की ज़रूरत नहीं है; आपको उस मशीन का एक पोर्ट अपने एक पोर्ट तक ले जाना है। स्थानीय फ़ॉरवर्ड ठीक यही करता है, और उसमें एक कमांड तथा एप्लिकेशन की एक सेटिंग लगती है। उलझन आम तौर पर यह मिलाने से होती है कि कौन-सा loopback पता किस मशीन का है।
तय करें कि क्या पहले से कोई स्थिर प्रॉक्सी मौजूद है
यह तकनीक ऐसी सेवा को फ़ॉरवर्ड करती है जो पहले से चल रही है। अगर दूरस्थ होस्ट पर केवल SSH डेमॉन है और कोई प्रॉक्सी नहीं, तो कितना भी फ़ॉरवर्ड करें वह बनेगी नहीं, और कनेक्शन दूरस्थ पक्ष से अस्वीकार कर दिया जाएगा। पुष्टि करें कि प्रॉक्सी बाध्य है, उसका पोर्ट क्या है, और वह 127.0.0.1 पर सुनती है या किसी विशिष्ट इंटरफ़ेस पते पर, क्योंकि फ़ॉरवर्ड को उसी पते को लक्षित करना है।
इसे पहले पुष्टि कर लेने से आप ऐसी सुरंग को डीबग करने से बच जाते हैं जो कभी किसी चीज़ से जुड़ी ही नहीं थी।
फ़ॉरवर्ड बनाएँ और कमांड पढ़ें
आपको जो रूप चाहिए वह आपके लैपटॉप पर एक loopback पोर्ट बाध्य करता है और सर्वर की ओर से उसे प्रॉक्सी के पते से जोड़ता है, जैसे सर्वर उसे देखता है।
ssh -NT -o ControlPath=none -o ExitOnForwardFailure=yes \
-L 127.0.0.1:13128:127.0.0.1:3128 [email protected]-N दूरस्थ कमांड को दबाता है और -T termios आवंटन को दबाता है, क्योंकि आपको सुरंग चाहिए, शेल नहीं। पहला loopback पता वह है जहाँ लैपटॉप सुनता है; दूसरा SSH सर्वर द्वारा हल किया जाता है, इसलिए वहाँ 127.0.0.1 का अर्थ उस मशीन की प्रॉक्सी है। ExitOnForwardFailure स्थानीय पोर्ट पहले से लिया हुआ होने पर कमांड को ज़ोर से विफल करता है, ऐसा सत्र शुरू करने के बजाय जो कुछ भी फ़ॉरवर्ड नहीं करता। लक्ष्य पता वैसे लिखें जैसे सर्वर उसे हल करता है, क्योंकि ऐसा नाम जिसे केवल आपका लैपटॉप हल कर सकता है, दूसरी ओर विफल होगा।
इसमें से कुछ भी काम करने से पहले सर्वर की अपनी नीति लागू होती है। AllowTcpForwarding को इसकी अनुमति देनी चाहिए, और PermitOpen सीमित कर सकता है कि कोई सत्र किन गंतव्यों और पोर्टों तक पहुँच सकता है, इसलिए क्लाइंट जिस फ़ॉरवर्ड को स्वीकार करता है उसे सर्वर फिर भी अस्वीकार कर सकता है। अस्वीकृति क्लाइंट पर फ़ॉरवर्ड या चैनल त्रुटि के रूप में दिखाई देती है, और उस संदेश को पढ़ना कमांड संपादित करने से तेज़ है।
एक एप्लिकेशन को फ़ॉरवर्ड की ओर इंगित करें
एप्लिकेशन को http://127.0.0.1:13128 पर HTTP प्रॉक्सी उपयोग करने के लिए कॉन्फ़िगर करें, यदि दूरस्थ प्रॉक्सी मांगे तो क्रेडेंशियल के साथ। HTTPS गंतव्यों के लिए एप्लिकेशन का अपना प्रमाणपत्र सत्यापन बनाए रखें, क्योंकि प्रॉक्सी सुरंग उसका स्थान नहीं लेती। यह एक सेवा का स्थिर फ़ॉरवर्ड है, इसलिए एप्लिकेशन को प्रॉक्सी के बारे में बताना होगा, उसे स्वयं खोजने के लिए छोड़ना नहीं।
कोई भी स्थायी कॉन्फ़िगरेशन करने से पहले एक त्वरित जाँच: curl -x http://127.0.0.1:13128 -I https://example.com, जो उस HTTP CONNECT विधि का अभ्यास करता है जिसका प्रॉक्सी को समर्थन करना चाहिए।
अधिकार वहीं रखें जहाँ था
दूरस्थ प्रॉक्सी अब भी तय करती है कि किन गंतव्यों और विधियों की अनुमति देती है, और SSH लॉगिन को चुपचाप हर खाते को सामान्य वेब रिले नहीं देना चाहिए। लैपटॉप पर 127.0.0.1 पर बाध्य करना पोर्ट को आपके स्थानीय नेटवर्क पर प्रकाशित होने से बचाता है, और यह पोर्ट को उसी मशीन की अन्य प्रक्रियाओं से निजी नहीं बनाता। प्रॉक्सी साझा करने के लिए उस बाध्यता को wildcard पते से बदलना ही अनियंत्रित खुला रिले बनने का तरीका है।
SSH परिवहन सर्वर तक की छलांग की रक्षा करता है। उस बिंदु के आगे प्रॉक्सी अपना स्वयं का कनेक्शन खोलती है, इसलिए किसी गंतव्य के लिए सादा HTTP अनुरोध सर्वर के आगे भी सादा रहता है, भले ही पहला खंड एन्क्रिप्टेड था।
दोनों सिरों को सत्यापित करें, फिर सफ़ाई करें
स्थानीय सुरंग की स्थापना और दूरस्थ सेवा की सफलता अलग-अलग परिणाम हैं, और कमांड की निकास स्थिति आपको केवल पहले के बारे में बताती है। ss -ltn के साथ जाँचें कि श्रोता मौजूद है, फिर एक अनुमत एप्लिकेशन अनुरोध और एक ऐसा अनुरोध करें जिसे प्रॉक्सी को अस्वीकार करना चाहिए। अगर दोनों अपेक्षा के अनुसार व्यवहार करें, तो मार्ग वास्तविक है; अगर सुरंग चालू है और हर अनुरोध विफल होता है, तो प्रॉक्सी मना कर रही है या गंतव्य तक नहीं पहुँच पा रही।
समाप्त होने पर, इसे रखने वाली SSH प्रक्रिया रोकें, एप्लिकेशन से प्रॉक्सी सेटिंग हटाएँ, और यह पुष्टि करें कि स्थानीय पोर्ट चला गया है, न कि कार्य से अधिक जीने वाला श्रोता छोड़ें।