SSH डेमॉन के साथ संभावित सुरक्षा मुद्दे क्या हैं?


14

मैं बाहर से अपने Ubuntu 10.04 कार्यालय पीसी के लिए SSH करने में सक्षम होना चाहते हैं। मैं इस प्रकार पीसी पर एक एसएसएच डेमॉन शुरू करने की सोच रहा हूं। सुरक्षा के मुद्दे, संभावित ग्लिच, विशिष्ट कॉन्फ़िगरेशन सेटिंग्स आदि क्या हैं, मुझे इसके बारे में पता होना चाहिए?

मामले में यह मायने रखता है: यह अनिवार्य रूप से केवल मेरे स्वयं के उपयोग के लिए है, मुझे नहीं लगता कि इसका उपयोग करने वाले अन्य लोग होंगे; यह ज्यादातर विंडोज 7 / विस्टा / एक्सपी वातावरण में एक उबंटू 10.04 पीसी है।


1
आप OpenVPN को भी स्थापित करने पर विचार कर सकते हैं और अपने ssh कनेक्शन के लिए अपने पीसी में एक वीपीएन सुरंग बना सकते हैं। इस तरह से आपको अपना ssh पोर्ट दुनिया के लिए खोलने की आवश्यकता नहीं है।
Linker3000

@ Linker3000 धन्यवाद! मैं इसे एक विचार दे दूँगा --- भले ही मुझे कुछ समय पहले वीपीएन के साथ काफी अप्रिय अनुभव हुआ था।
ev-br

@Zhenya यदि आप अपने "@" और उपयोगकर्ताओं के नाम को नहीं रखते हैं, तो वे आपको उत्तर देने की सूचना प्राप्त करेंगे। ;) तो आप एक टिप्पणी प्राप्त करेंगे जब मैं @ ज़ेन्या का उपयोग करूँगा, लेकिन तब नहीं जब मैं @
ज़ेन्या का

@Zhenya और अब आप इसे फिर से कर रहे हैं XD
ब्लडफिलिया

@ लिकर, क्या आप थोड़ा विस्तार से बता सकते हैं कि ओपनवीपीएन एसएसएच से अधिक सुरक्षित क्यों है?
अर्जन

जवाबों:


20

सबसे बड़ी चिंता यह होगी कि लोग एसएसएच पर कंप्यूटर के व्यवस्थापक के रूप में प्रवेश कर रहे हैं। यदि आप पासवर्ड का अनुमान लगाने में आसान हैं, तो यह क्रूर बल द्वारा किया जा सकता है।

कई सुरक्षा उपाय हैं जो आप कर सकते हैं, नीचे कुछ हैं जिन्हें मैं हमेशा एसएसएच सर्वर और कुछ अतिरिक्त स्थापित करते समय लेता हूं।

  1. कम से कम (कहते हैं) 10 ऊपरी और निचले अक्षरों, संख्याओं और अन्य वर्णों से मिलकर एक मजबूत पासवर्ड का उपयोग करें।

  2. उपयोगकर्ताओं को उनके घर निर्देशिका में जेल। जेल किए गए उपयोगकर्ता उन फ़ाइलों को एक्सेस / संपादित नहीं कर पाएंगे जो उनके होम डायरेक्टरी के बाहर हैं। इसलिए आपका उपयोगकर्ता कुंजी सिस्टम फ़ाइलों को एक्सेस / संपादित नहीं कर पाएगा। एक उपयोगकर्ता को कैसे जेल देना है, इस पर बहुत सारे ट्यूटोरियल देखे जा सकते हैं। उनमें से ज्यादातर जेलकिट का उपयोग करते हैं । इस तरह के एक ट्यूटोरियल का एक उदाहरण यहां पाया जा सकता है । वैकल्पिक रूप से, आप ओपनएसएसएच-सर्वर के मूल ChrootDirectoryनिर्देश का भी उपयोग कर सकते हैं । इस पर एक ट्यूटोरियल का एक उदाहरण यहां पाया जा सकता है

  3. Fail2Ban स्थापित करें । Fail2Ban एक प्रोग्राम है जो गलत प्रविष्टियों के लिए प्रमाणीकरण लॉग की जांच करता है। जब एक निश्चित सीमा पूरी हो जाती है, तो यह उस निश्चित IP के लिए फ़ायरवॉल ब्लॉक को प्रीसेट राशि के लिए जोड़ता है। वहाँ भी ऑनलाइन कैसे SSH के साथ fail2ban स्थापित करने के लिए के बारे में पाया हैं कई ऑनलाइन ट्यूटोरियल, एक उदाहरण होगा इस एक । Fail2Ban होमपेज कुछ अच्छे और पूर्ण HOWTOs रखता है।

  4. SSH के माध्यम से रूट लॉगिन को अक्षम करें। यह वह उपयोगकर्ता है जिसकी आपके सिस्टम की प्रत्येक फ़ाइल तक बहुत अधिक पहुंच है, इसके शेल लॉगिन को अक्षम करना इसलिए अनुशंसित है। उबंटू के नवीनतम संस्करणों में, रूट उपयोगकर्ता स्वचालित रूप से अक्षम है, लेकिन यह वैसे भी अपने एसएसएच एक्सेस को अक्षम करने के लिए चोट नहीं करता है। यह फ़ाइल को संपादित करके किया जाता है /etc/ssh/sshd_config निम्नलिखित लाइन के लिए देखो और सुनिश्चित करें कि वहाँ उसके सामने कोई # है।

    #PermitRootLogin no
    
  5. एक गैर-मानक पोर्ट का उपयोग करें (ईजी नहीं 22) यह या तो आपके राउटर में पोर्ट अग्रेषण के माध्यम से किया जाता है (जैसे 16121 -> 22 के बजाय 22 -> 22) या एक अलग पोर्ट पर एसएसएच डेमन सुनकर। यह आपकी SSH सेवा को दुर्भावनापूर्ण उपयोगकर्ताओं के लिए आसानी से पता लगाने योग्य बना देगा। यह फ़ाइल को संपादित करके किया जाता है /etc/ssh/sshd_config निम्नलिखित लाइन और 22 जो कुछ भी बंदरगाह आप चाहते करने के लिए बदलाव के लिए देखो। बाद में अपने राउटर में सही पोर्ट को फॉरवर्ड करना न भूलें।

    Port 22
    
  6. लॉग इन करने के लिए पासवर्ड का उपयोग न करें। पासवर्ड के अलावा, SSH निजी कुंजी के उपयोग से भी लॉगिन की अनुमति देता है। इसका मतलब है कि आपके कंप्यूटर पर एक कुंजी संग्रहीत है, जिस पर आप SSH मशीन के SSH का उपयोग करते हैं। जब कनेक्शन का प्रयास किया जाता है, तो SSH क्लाइंट पासवर्ड प्रमाणीकरण के माध्यम से सर्वर में प्रवेश करने के लिए कुंजी का उपयोग करता है। प्रमाणीकरण कुंजी पासवर्ड की तुलना में क्रिप्टोग्राफिक रूप से बहुत मजबूत हैं और इसलिए दरार करना इतना आसान नहीं है। वहाँ भी ऑनलाइन कैसे SSH के साथ कुंजी आधारित प्रमाणीकरण स्थापित करने के लिए के बारे में पाया हैं कई ऑनलाइन ट्यूटोरियल, एक उदाहरण होगा इस एक । (यदि आप PuTTY वाली खिड़कियों से SSH करते हैं, तो इस लिंक को PuTTY howto के लिए जांचें ।) जब आपने कुंजी-आधारित प्रमाणीकरण सेट किया है, तो आप फ़ाइल को संपादित करके पासवर्ड प्रमाणीकरण को अक्षम कर सकते हैं /etc/ssh/sshd_config निम्नलिखित पंक्ति देखें और सुनिश्चित करें कि इसके सामने कोई # नहीं है।

    #PasswordAuthentication no
    
  7. वैकल्पिक रूप से, जैसा कि @ Linker3000 ने अपनी टिप्पणी में उल्लेख किया है, आप SSH के माध्यम से जिस पीसी को एक्सेस करना चाहते हैं , उसके लिए एक वीपीएन सुरंग स्थापित कर सकते हैं और फिर एसएसएच सर्वर पर गैर-स्थानीय नेटवर्क एक्सेस को अस्वीकार कर सकते हैं। इस तरह, वीपीएन कनेक्शन के बिना कोई भी बाहरी डिवाइस आपके एसएसएच सर्वर तक नहीं पहुंच पाएगा। यह सभी मेजबानों को नकारने और फिर केवल स्थानीय नेटवर्क आईपी को लॉगिन करने की अनुमति देकर किया जा सकता है। यह संपादन करके /etc/hosts.denyऔर निम्नलिखित जोड़कर किया जाता है :

    sshd: ALL
    

    और /etc/hosts.allowनिम्नलिखित जोड़ने के लिए:

    sshd: 192.168.1.*
    

    जहाँ IP आपके स्थानीय नेटवर्क से मेल खाता है। *एक वाइल्डकार्ड है, इसलिए शुरू होने वाले सभी आईपी पते 192.168.1.स्वीकार किए जाएंगे। यदि यह काम नहीं करता है, तो आपका वितरण sshइसके स्थान पर उपयोग कर सकता है sshd। उस मामले में, आपको प्रयास करना चाहिए ssh: 192.168.1.*और ssh: ALLइसके बजाय।

  8. आप केवल विशिष्ट होस्ट करता है, साथ भी ऐसा ही अनुमति दे सकता है /etc/hosts.allowऔर /etc/hosts.deny6 में वर्णित है, लेकिन में /etc/hosts.allowनिम्न पंक्ति और हर मेजबान रिक्तियों से अलग करने देते हैं जोड़ें:

    sshd: {IP OF HOST TO ALLOW 1} {IP OF HOST TO ALLOW 2} {IP OF HOST TO ALLOW 3} {ETC.}
    
  9. केवल विशिष्ट उपयोगकर्ताओं को अपने SSH सर्वर तक पहुँचने की अनुमति दें। यह फ़ाइल को संपादित करके किया जाता है /etc/ssh/sshd_config निम्नलिखित लाइन के लिए देखो और सुनिश्चित करें कि वहाँ उसके सामने कोई # है। यदि यह मौजूद नहीं है, तो इसे बनाएं। उदाहरण के लिए, यदि आप जॉन, टॉम और मेरी को केवल अनुमति देना चाहते हैं, तो इस पंक्ति को जोड़ें / संपादित करें:

    AllowUsers john tom mary
    

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

    DenyUsers john tom mary
    
  10. आने वाले कनेक्शन के लिए केवल प्रोटोकॉल SSH2 की अनुमति दें। एसएसएच प्रोटोकॉल के दो संस्करण हैं। SSH1 सुरक्षा मुद्दों के अधीन है इसलिए SSH 2 का उपयोग करने की अनुशंसा की जाती है। इसे फ़ाइल को संपादित करके मजबूर किया जा सकता है /etc/ssh/sshd_config निम्नलिखित लाइन के लिए देखो और सुनिश्चित करें कि वहाँ उसके सामने कोई # है। यदि यह मौजूद नहीं है, तो इसे बनाएं।

    Protocol 2,1
    

    1 निकालें, तो लाइन होगी

    Protocol 2
    
  11. उन उपयोगकर्ताओं को लॉगिन करने की अनुमति न दें जिनके पास कोई पासवर्ड सेट नहीं है। इसे फ़ाइल को संपादित करके मजबूर किया जा सकता है /etc/ssh/sshd_config निम्नलिखित लाइन के लिए देखो और सुनिश्चित करें कि वहाँ उसके सामने कोई # है। यदि यह मौजूद नहीं है, तो इसे बनाएं।

    PermitEmptyPasswords no
    
  12. और हालांकि सरल और शायद कई मामलों में महत्वपूर्ण साबित होने के लिए अनावश्यक, अपने सॉफ़्टवेयर को अद्यतित रखें। अपने स्थापित पैकेज / सॉफ्टवेयर को नियमित रूप से अपडेट करें।


= SSH कॉन्फ़िग फ़ाइल को संपादित करने के बाद, परिवर्तन लागू करने के लिए डेमॉन को पुनः आरंभ करना न भूलें। निष्पादित करके डेमन को पुनः प्रारंभ करें:

sudo /etc/init.d/ssh restart

या

sudo /etc/init.d/sshd restart

आप किस लिनक्स का उपयोग कर रहे हैं इसके आधार पर।


2
sudo service ssh restartउबंटू पर।
ulidtko

@ulidtko इस प्रश्न को एक अधिक सामान्य प्रश्न के साथ मिला दिया गया था, इसलिए मैंने अपने उत्तर को अधिक सामान्य और विभिन्न वितरणों के लिए उपयुक्त बनाया। यह लगभग सभी वितरणों पर काम करेगा, लेकिन आप सही हैं।
ब्लडफिलिया

@BloodPhilia इतने विस्तृत और सुलभ उत्तर के लिए बहुत बहुत धन्यवाद! आपके बिंदुओं पर कुछ और सवाल: 1. केवल अनुमतियों को प्रतिबंधित करने के लिए उपयोगकर्ताओं को लाभ उठाने का क्या फायदा है? कहते हैं, 'उपयोगकर्ता' के रूप में लॉग इन करके मैंने केवल अपने / घर के बाहर की चीजों तक पहुंच पढ़ी है, लेकिन एक्सेस [उबंटू डिफ़ॉल्ट के अनुसार, मुझे लगता है] नहीं लिखा है। क्या यह जेलिंग से बेहतर / बुरा है? 2. सामान्य रूप से प्रमाणीकरण लॉग कहाँ स्थित हैं? मैं एक बार थोड़ी देर में उन्हें मैन्युअल रूप से / grep के माध्यम से जांचने में सक्षम होना चाहता हूं।
ev-br

@BloodPhilia 4. यदि मैं sshd को एक सर्वर पर एक गैर-मानक पोर्ट के लिए सुनता हूं, जैसे कि 1234, तो इस सर्वर से क्लाइंट पर लिनक्स कमांड लाइन से कनेक्ट करने का तरीका क्या है? मेरा मतलब है, क्या एक मानक ssh कमांड को किसी प्रकार के स्विच की आवश्यकता होती है?
ev-br

1
@ulidtko: कल का नवाब के साथ, sudo restart ssh
हैलो'१

7

कुछ सुझाव:

  1. कुंजी आधारित प्रमाणीकरण का उपयोग करें, जो पासवर्ड की तुलना में अधिक सुरक्षित है
  2. केवल SSH 2
  3. रूट लॉगिन अक्षम करें
  4. पैरानॉयड के लिए, पोर्ट को मानक पोर्ट 22 से बदल दें
  5. सुविधा के लिए, अपने आईपी को डीएनएस नाम से मैप करने के लिए एक उपकरण का उपयोग करें, जैसे डायंडन्स या इसके ilk। आप एक ही आईपी के साथ लंबे समय तक जा सकते हैं, लेकिन यह कि एक बार आपकी यात्रा और इसकी आवश्यकता है, तो आप पाएंगे कि आपको एक नया जारी किया गया है।
  6. बेशक, केवल अपने फायरवॉल के माध्यम से एसएसएच (पोर्ट 22, या यदि आप चुनते हैं तो एक गैर-मानक) के लिए आवश्यक पोर्ट की अनुमति दें।

1
पुन: 5: यदि आपके घर के बाहर मशीन पर ई-मेल खाता है, तो आप समय-समय पर अपने घर की मशीन से उस पते पर एक संदेश भेजने के लिए क्रॉन जॉब सेट कर सकते हैं। आपका होम IP हेडर में होगा। DNS जितना सुविधाजनक नहीं है, लेकिन उपयोग करने योग्य है।
२१:१४ बजे गैरीजोन

आप अपने आईएसपी से भी संपर्क कर सकते हैं और एक स्थिर आईपी पते के लिए कीमत पूछ सकते हैं। यह अब तक सभी का सबसे सरल समाधान है, लेकिन आमतौर पर एक गतिशील डीएनएस की तुलना में अधिक महंगा है
स्टीन शूट

2

मुख्य जोखिम यह भूल रहा है कि आप एक ssh सर्वर चला रहे हैं और एक खाते पर एक कमजोर पासवर्ड डाल रहे हैं। वहाँ वहाँ बाहर हमलावरों कि योजनाबद्ध तरीके से आम खाता नाम (जैसे की कोशिश कर रहे हैं webmasterऔर bob) और कमज़ोर पासवर्ड। आप पासवर्ड लॉगिन मना कर इस खतरे को समाप्त कर सकते हैं (डाल PasswordAuthentication noमें sshd_config, और या तो भी डाल UsePAM Nossh के लिए या पीएएम सेटिंग्स में अक्षम पासवर्ड प्रमाणीकरण)। एक मध्यवर्ती उपाय ssh logins को उपयोगकर्ताओं के श्वेतसूची में AllowUsersया उसके साथ प्रतिबंधित करना AllowGroupsहै sshd_config

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

मशीन पर ssh क्लाइंट का उपयोग करने के लिए न्यूनतम आवश्यकता यह है कि आपको विश्वास हो कि ssh संचार का सक्रिय अपहरण नहीं होगा (क्लाइंट मशीन पर चल रहा है, तो यह एक आदमी के बीच का हमला संभव है - आपको लगता है आप एक प्राचीन ssh क्लाइंट में कमांड टाइप कर रहे हैं, लेकिन क्लाइंट वास्तव में आपके प्रमाणीकरण डेटा को ईमानदारी से प्रसारित कर रहा है, लेकिन बाद में संचार में ट्रोजन हॉर्स सम्मिलित कर रहा है)। यह विश्वास करने की तुलना में एक कमजोर आवश्यकता है कि एक पासवर्ड स्नूपर नहीं होगा (आमतौर पर एक keylogger के माध्यम से प्रदर्शन किया जाता है, लेकिन अन्य कम स्वचालित तरीके हैं जैसे कि कंधे सर्फिंग)। यदि आपके पास न्यूनतम विश्वास है, लेकिन फिर भी स्नूपर्स से डरते हैं, तो आप एक-बार पासवर्ड का उपयोग कर सकते हैं (ओपनएसएसएच अपने पीओएस समर्थन के माध्यम से उनका समर्थन करता है)।

बेशक, किसी भी अन्य प्रोग्राम के रूप में जो आपके नियंत्रण के बाहर मशीनों के साथ बातचीत करता है (न केवल नेटवर्क सर्वर बल्कि क्लाइंट भी), आपको सुरक्षा अपडेट के साथ रखना चाहिए।


2

मेरे दिमाग में तीन बातें आईं:

  1. यदि आप डिफ़ॉल्ट पोर्ट 22 खोलते हैं तो बहुत जल्द इसका पता लग जाएगा और आपका पीसी ब्रूट बल के हमलों से निबट जाएगा। मेरा सुझाव है कि आप किसी अन्य पोर्ट को सुनने के लिए sshd को कॉन्फ़िगर करें या अपने फ़ायरवॉल पर पोर्ट मैपिंग करें। हालांकि यह एक जादू की गोली नहीं है, यह सुनिश्चित करेगा कि आप कम से कम एक ही सीपीयू चक्र को बचाएंगे।

    पोर्ट 12345

  2. पासवर्ड प्रमाणीकरण को स्पष्ट रूप से अक्षम करें और केवल कुंजियों का उपयोग करें। कोई भी कुंजी आपके द्वारा याद किए जाने वाले सबसे जटिल पासवर्ड से बेहतर होगी।

    PasswordAuthentication सं

  3. भले ही उबंटू में डिफ़ॉल्ट रूप से रूट उपयोगकर्ता अक्षम हो, लेकिन रूट लॉगिन को स्पष्ट रूप से अक्षम करें

    PermitRootLogin नहीं

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