कैसे SSH स्थानीय पोर्ट अग्रेषण अक्षम करें?


20

मेरे पास एक सर्वर है जो उबंटू और ओपनएसएसएच डेमन चला रहा है। इसे S1 कहते हैं।

मैं क्लाइंट मशीनों से इस सर्वर का उपयोग करता हूं (चलो उनमें से एक C1 को कॉल करें) दूरस्थ बंदरगाह अग्रेषण का उपयोग करके SSH रिवर्स सुरंग बनाने के लिए, उदाहरण के लिए:

ssh -R 1234:localhost:23 login@S1

S1 पर, मैं डिफ़ॉल्ट sshd_config फ़ाइल का उपयोग करता हूं। मैं जो देख सकता हूं, S1 पर सही क्रेडेंशियल {लॉगिन, pwd} वाले कोई भी व्यक्ति S1 में लॉग इन कर सकता है और या तो रिमोट पोर्ट फ़ॉरवर्डिंग और लोकल पोर्ट फ़ॉरवर्डिंग कर सकता है। इस तरह के क्रेडेंशियल्स भविष्य में एक प्रमाण पत्र हो सकते हैं, इसलिए मेरी समझ में प्रमाण पत्र हथियाने वाला कोई भी व्यक्ति कहीं से भी एस 1 में लॉग इन कर सकता है (जरूरी नहीं कि सी 1) और इसलिए स्थानीय पोर्ट अग्रेषण बनाएं।

मेरे लिए, स्थानीय पोर्ट अग्रेषण की अनुमति देना बहुत खतरनाक है, क्योंकि यह किसी प्रकार के सार्वजनिक प्रॉक्सी बनाने की अनुमति देता है। मैं एक रास्ता ढूंढ रहा हूँ, जिसमें केवल -L अग्रेषण अक्षम हों।

मैंने निम्नलिखित की कोशिश की, लेकिन यह स्थानीय और दूरस्थ अग्रेषण दोनों को अक्षम करता है:

AllowTcpForwarding No

मैंने निम्नलिखित की भी कोशिश की, यह केवल -L को SX: 1 की अनुमति देगा। यह कुछ भी नहीं से बेहतर है, लेकिन फिर भी मुझे जो चाहिए, वह "विकल्प" नहीं है।

PermitOpen SX:1

इसलिए मैं सोच रहा हूं कि क्या कोई रास्ता है, ताकि मैं कुछ लिखने के लिए सभी स्थानीय बंदरगाह को आगे से मना कर सकूं:

PermitOpen none:none

निम्नलिखित एक अच्छा विचार है?

PermitOpen localhost:1

इसलिए, हमेशा की तरह, इस की जड़ को प्राप्त करने दें: आपकी वास्तविक समस्या क्या है , आप मोबाइल / एम्बेडेड उपकरणों के लिए कुछ इस तरह से सेटअप क्यों करना चाहते हैं, आप क्या हल करना चाहते हैं?
अकीरा

यहाँ पर हल की जाने वाली समस्या टेलनेट सत्र को खोलने में सक्षम है, कहीं भी इंटरनेट से, मोबाइल से जुड़े / मोबाइल से जुड़े डिवाइस से, यह ध्यान में रखते हुए कि डिवाइस नैट हो सकता है, या फ़ायरवॉल हो सकता है, इसलिए उपलब्ध नहीं है इंटरनेट से।
एससीओ

टेलनेट .. किस लिए? 'stun' के लिए फ़ायरवॉल google में छिद्रण के लिए
akira

जवाबों:


16

लॉगिन क्रेडेंशियल्स वाला कोई भी व्यक्ति अपने एसडीएस का उदाहरण ला सकता है, एक यादृच्छिक पोर्ट पर चल रहा है और जो कुछ भी चाहते हैं, उसे -L स्थानीय अग्रेषण सहित अनुमति देता है:

% /usr/sbin/sshd -d -f mysshd.config -p 12345

यदि आप उपयोगकर्ताओं को अपनी मशीन के साथ कुछ करने के लिए भरोसा नहीं करते हैं, तो आपको उन्हें पहली जगह में प्रवेश करने की अनुमति नहीं देनी चाहिए।

(btw, -D झंडा "प्रॉक्सी-समस्याग्रस्त" की तरह है)


वैसे मुझे लगता है कि मैं इस उद्देश्य के लिए एक बहुत ही प्रतिबंधक खाते की स्थापना कर सकता हूं (उदाहरण के लिए उपयोगकर्ता को उसके घर पर चिपकाएँ, कोई लिस्टिंग नहीं, कोई फ़ाइल सिस्टम ब्राउज़िंग नहीं), ताकि वह शुरू न हो और sshd (या स्थापित और sshd बाइनरी शुरू) कर सके। मुद्दा यह है कि ग्राहकों को एम्बेडेड डिवाइस माना जाता है। लेकिन चूँकि वे संभवतः प्रमाणपत्रों को एम्बेड करेंगे और उनके फ्लैश मेमोरी को डंप किया जा सकता है, इसलिए यह संभव है कि प्रमाणपत्र लीक हो जाएंगे, इसलिए किसी को भी S1 में प्रवेश करने की अनुमति देगा।
एससीओ

ChrootDirectory का उपयोग उस विशेष उपयोगकर्ता के लिए करेगा जो ट्रिक करेगा, यह कोशिश करेगा!
एससीओ

1
अधिकृत_की में, सेट करें command="/sbin/nologin"। यह उन्हें सर्वर पर किसी भी कमांड को चलाने से रोकना चाहिए।
जस्टिस

"लॉगिन क्रेडेंशियल वाला कोई भी व्यक्ति अपने स्वयं के <जो कुछ भी ला सकता है" कथन गलत है। sshउन खातों से कनेक्ट करने के लिए उपयोग किया जा सकता है जिनके पास गंभीर रूप से प्रतिबंधित गोले हैं जो इसकी अनुमति नहीं देते हैं। पोर्ट फॉरवर्डिंग इस तरह के प्रतिबंधित गोले में सुरक्षा छेद है। अनुमत कमांड चलाने के अलावा, उपयोगकर्ता सुरंग बना सकता है।
कज़

3
sshd_configमैन पेज से उद्धरण : ध्यान दें कि टीसीपी अग्रेषण को अक्षम करने से सुरक्षा में सुधार नहीं होता है जब तक कि उपयोगकर्ताओं को शेल एक्सेस से वंचित नहीं किया जाता है , क्योंकि वे हमेशा अपने स्वयं के फारवर्डर स्थापित कर सकते हैं। (जोर मेरा)।
कज़

17

एक अन्य समाधान केवल उपयोगकर्ताओं को निर्दिष्ट करने के लिए पोर्ट अग्रेषण की अनुमति देना होगा:

SSH से: निश्चित गाइड

पोर्ट अग्रेषण को विश्व स्तर पर सक्षम या sshd में अक्षम किया जा सकता है। यह सर्वरवाइड कॉन्फ़िगरेशन कीवर्ड AllowTcpForwarding in / etc / sshd_config के साथ किया जाता है। कीवर्ड का मान हाँ में हो सकता है (डिफ़ॉल्ट, फ़ॉरवर्डिंग सक्षम करना) या नहीं (अग्रेषण अक्षम करना):

# SSH1, SSH2, OpenSSH
AllowTcpForwarding no

इसके अलावा, SSH2 में निम्नलिखित विकल्प हैं:

# SSH2 only
AllowTcpForwardingForUsers
AllowTcpForwardingForGroups

इनमें से सिंटैक्स, AllowUsers और AllowGroups विकल्पों के लिए समान है। [धारा ५.५.२.१, "खाता अभिगम नियंत्रण"] वे उन उपयोगकर्ताओं या समूहों की सूची निर्दिष्ट करते हैं जिन्हें पोर्ट फ़ॉरवर्डिंग का उपयोग करने की अनुमति है; सर्वर किसी और के लिए पोर्ट अग्रेषण अनुरोधों का सम्मान करने से इनकार करता है। ध्यान दें कि ये SSH सत्र के लक्ष्य खाते का उल्लेख करते हैं, न कि क्लाइंट उपयोगकर्ता नाम (जिसे अक्सर ज्ञात नहीं है)।

...

यह महसूस करना महत्वपूर्ण है कि इस खंड में निर्देश वास्तव में पोर्ट अग्रेषण को नहीं रोकते हैं, जब तक कि आप इंटरैक्टिव लॉगिन को अक्षम नहीं करते हैं और रिमोट साइड पर चलने वाले कार्यक्रमों को प्रतिबंधित कर सकते हैं। अन्यथा, जानकार उपयोगकर्ता केवल SSH सत्र में अपने स्वयं के पोर्ट-फ़ॉरवर्डिंग एप्लिकेशन चला सकते हैं। ये सेटिंग्स अकेले एक गैर-तकनीकी समुदाय में एक पर्याप्त निवारक हो सकती हैं, लेकिन वे किसी ऐसे व्यक्ति को नहीं रोकेंगे जो जानता है कि वह क्या कर रहा है।


1
मूल रूप से मेरे पास S1 पर केवल एक ही उपयोगकर्ता होगा। AFAIU, इस विशिष्ट मामले में, AllowTcpForwardingForUsers / AllowTcpForwardingForGroups का उपयोग करके चाल, सही नहीं करेगा? इंटरएक्टिव लॉगिन को मना करना एक अच्छा विचार है क्योंकि यह उपयोगकर्ताओं को बायनेरिज़ शुरू करने में सक्षम नहीं बना देगा। लेकिन किसी भी क्लाइंट को अभी भी -L सिंटैक्स सही का उपयोग करके अनुमति दी जाएगी? तो अब के लिए, सबसे अच्छा विकल्प होगा: 1 / निष्क्रिय इंटरेक्टिव लॉगिन, एक नकली होस्टनाम के साथ 2 / PermitOpen: पोर्ट। क्या मैं कुछ भुल गया ?
एससीओ

इसे सत्यापित करने का सबसे अच्छा तरीका सेटअप की कोशिश करना होगा।
ईसाई

मैं इन विकल्पों को मुक्त OpenSSH सॉफ़्टवेयर में नहीं देख सकता। Google AllowTcpForwardingForUsersयह बताता है कि यह एक कॉन्फ़िगर किया गया है sshd2_config, जिसका उपयोग कुछ व्यावसायिक कार्यक्रमों में किया जाता है। इनमें से एक का जवाब देखें: superuser.com/questions/384643/…
कज़

^ ओपनएसएसएच Matchके कॉन्फ़िगरेशन में ब्लॉक हैं। आप Matchउपयोगकर्ताओं और समूहों पर कर सकते हैं, और AllowTcpForwardingभीतर को घेर सकते हैं।
कज़

2

अब केवल स्थानीय / दूरस्थ अग्रेषण की अनुमति देने का विकल्प है।

AllowTcpForwarding निर्दिष्ट करता है कि TCP अग्रेषण की अनुमति है या नहीं। उपलब्ध विकल्प टीसीपी अग्रेषण की अनुमति देने के लिए "हां" या "सभी" हैं, "नहीं" सभी टीसीपी अग्रेषण को रोकने के लिए, "स्थानीय" स्थानीय (एसएचएस के परिप्रेक्ष्य से (1)) केवल या "रिमोट" को अग्रेषित करने की अनुमति देने के लिए केवल अग्रेषण । डिफ़ॉल्ट "हाँ" है। ध्यान दें कि टीसीपी अग्रेषण को अक्षम करने से सुरक्षा में सुधार नहीं होता है जब तक कि उपयोगकर्ताओं को शेल एक्सेस से वंचित नहीं किया जाता है, क्योंकि वे हमेशा अपने स्वयं के फारवर्डर स्थापित कर सकते हैं।

तो, जैसा कि पहले ही कहा गया है कि आपको शेल को कोलोन में सेट करना चाहिए, भी।


0

इस समस्या का मेरा समाधान जोड़ना था: PermitOpen fo.local: 80 sshd_config के मुख्य भाग में।

यह फ़ॉर्ल के अलावा स्थानीय अग्रेषण के किसी भी अनुरोध को अस्वीकार करता है। 80:।


0

मैं एक रास्ता ढूंढ रहा हूँ, जिसमें केवल -L अग्रेषण अक्षम हों

यदि मैं आपको सही तरीके से समझता हूं, तो आपके उपयोगकर्ताओं के पास पूर्ण शेल एक्सेस है, लेकिन आप नहीं चाहते कि वे बाकी नेट की ओर कनेक्शन खोल सकें।

SSH द्वारा अनुमत "स्थानीय बंदरगाह अग्रेषण" ऐसा करने के संभावित तरीकों में से एक है। दूसरों का एक उदाहरण की शुरूआत में शामिल हैं socat, netcat, या उपकरण के किसी भी अन्य संख्या।

आउटगोइंग के साथ-साथ लिनक्स में आने वाले कनेक्शन को नियंत्रित करने का सबसे अच्छा तरीका नेटफिल्टर, उर्फ ​​आईपीटेबल्स है।

इसके पास एक विशेष मॉड्यूल है जिसे मालिक कहा जाता है ( ipt_owner) जो आपको स्थानीय स्तर पर उत्पन्न पैकेट के लिए पैकेट निर्माता की विभिन्न विशेषताओं से मेल खाने की अनुमति देता है। यह OUTPUTऔर POSTROUTINGचेन में मान्य है ।

आप उपयोगकर्ताओं के कुछ समूहों द्वारा उत्पन्न आउटगोइंग पैकेट को अस्वीकार करने के लिए इसका उपयोग कर सकते हैं, इस प्रकार किसी भी प्रकार के पोर्ट अग्रेषण को रोक सकते हैं, न कि केवल -Lएसएसएच का विकल्प।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.