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

नोट : यह ट्यूटोरियल मानता है कि एसएसएच सर्वर उबंटू 14.04 चला रहा है, और क्लाइंट मशीन एक लिनक्स है।

प्रारंभ करना - एसएसएच स्थापित करें

सबसे पहले, आपको अपने सिस्टम को अपडेट करने और अपने सिस्टम में आवश्यक पैकेज इंस्टॉल करने की आवश्यकता है।

सिस्टम को अद्यतन करने और सर्वर मशीन पर एसएसएच सर्वर स्थापित करने के लिए, निम्न आदेश चलाएं:

 sudo apt-get अद्यतन sudo apt-get openssh-server स्थापित करें 

क्लाइंट मशीन पर एसएसएच क्लाइंट स्थापित करने के लिए, निम्न आदेश चलाएं:

 sudo apt-install openssh-client स्थापित करें 

पासवर्ड-कम लॉगिन के लिए एसएसएच कॉन्फ़िगर करें

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

अपनी क्लाइंट मशीन पर, निम्न आदेश के साथ एसएसएच कुंजी उत्पन्न करें:

 सीडी ~ /। एसएसएच एसएसएच-कीजेन -टी आरएसए 

बस प्रत्येक प्रॉम्प्ट पर एंटर कुंजी दबाएं। यह दो फाइलें उत्पन्न करता है: id_rsa.pub (सार्वजनिक कुंजी) और id_rsa (निजी कुंजी)।

यह कुछ ऐसा दिखता है जो निम्न जैसा दिखता है:

अपने सर्वर पर, निम्न फ़ोल्डर बनाएं (यदि यह अस्तित्व में नहीं है):

 mkdir -p ~ / .ssh / 

अपनी क्लाइंट मशीन पर वापस, निम्न आदेश का उपयोग करके "id_rsa.pub" फ़ाइल को अपने सर्वर पर कॉपी करें:

 scp -P "yourport" ~ / .ssh / id_rsa.pub उपयोगकर्ता नाम @ serverip: ~ / .ssh 

अपने एसएसएच सर्वर का उपयोग कर रहे पोर्ट नंबर पर "yourport" बदलें (डिफ़ॉल्ट 22 है) और "सर्वरिप" सर्वर के आईपी पते पर बदलें।

अपनी सर्वर मशीन पर, फ़ाइल नाम और सेटअप अनुमतियों को बदलें।

 बिल्ली ~ / .ssh / id_rsa.pub >> ~ / .ssh / अधिकृत_keys chmod 700 .ssh chmod 600 .ssh / valid_keys rm .ssh / id_rsa.pub 

यह जांचने के लिए कि कुंजी-आधारित प्रमाणीकरण विधि काम करती है, क्लाइंट मशीन से अपने एसएसएच सर्वर से कनेक्ट करने का प्रयास करें:

 ssh -P "yourport" उपयोगकर्ता नाम @ serverip 

यदि आप पासवर्ड दर्ज किए बिना कनेक्ट करने में सक्षम हैं, तो कुंजी-आधारित प्रमाणीकरण विधि काम करती है।

सुरक्षित एसएसएच विन्यास फाइल

"/ Etc / ssh / sshd_config" फ़ाइल एसएसएच के लिए सिस्टम-व्यापी कॉन्फ़िगरेशन फ़ाइल है जो आपको एक एसएसएच सर्वर की सुरक्षा में सुधार के लिए विभिन्न विकल्पों को सेट करने की अनुमति देती है। कॉन्फ़िगरेशन फ़ाइल में डिफ़ॉल्ट कॉन्फ़िगरेशन बहुत असुरक्षित है, इसलिए आपको इसे पहले संपादित करना होगा और सुरक्षा को बेहतर बनाने के लिए उचित विकल्प सेट करना होगा।

"/ Etc / ssh / sshd_config" फ़ाइल को संपादित करने के लिए, चलाएं

 सूडो नैनो / आदि / एसएसएच / sshd_config 

एसएसएच श्रवण बंदरगाह बदलें

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

डिफ़ॉल्ट पोर्ट को 2200 में बदलने के लिए, बदलें:

 पोर्ट 22 

सेवा मेरे

 पोर्ट 2200 

केवल प्रोटोकॉल 2 का उपयोग करें

प्रोटोकॉल के संस्करण 1 में सुरक्षा भेद्यताएं होती हैं। प्रोटोकॉल 2 उबंटू पर डिफ़ॉल्ट प्रविष्टि है।

नीचे दिखाए गए रेखा को बदलें:

 प्रोटोकॉल 2 

उपयोगकर्ताओं तक पहुंच सीमित करें

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

"User1" और "user2" को अनुमति देने के लिए, निम्न पंक्ति जोड़ें:

 AllowUsers उपयोगकर्ता 1 उपयोगकर्ता 2 

"Baduser1" और "baduser2" से इनकार करने के लिए निम्न पंक्ति जोड़ें:

 DenyUsers baduser1 baduser2 

रूट लॉगिन अक्षम करें

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

रूट लॉगिन अक्षम करने के लिए, लाइन बदलें

 बिना पासवर्ड के PermitRootLogin 

सेवा मेरे

 PermitRootLogin संख्या 

अंतिम लॉगिन छुपाएं

जब आप उपयोगकर्ता लॉग इन करते हैं तो आखिरी बार लॉग इन करने वाले आप छुपा सकते हैं।

इसके लिए, रेखा बदलें

 प्रिंटलास्टलॉग हां 

सेवा मेरे

 PrintLastLog संख्या 

लॉग इन करने के लिए इंटरफ़ेस को प्रतिबंधित करें

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

 # लिस्टेन एड्रेस :: 

सेवा मेरे

 AddAddress 192.168.1.20 सुनो 

पासवर्ड प्रमाणीकरण अक्षम करें

यदि आपका उपयोगकर्ता कमजोर पासवर्ड का उपयोग करता है तो पासवर्ड प्रमाणीकरण का उपयोग करना एक बड़ा सुरक्षा जोखिम है। "Ssh कुंजी" का उपयोग करने की अनुशंसा की जाती है। "एसएसएच कुंजी" में 600 से अधिक यादृच्छिक वर्ण हो सकते हैं और तोड़ना मुश्किल हो सकता है।

इसके लिए, रेखा बदलें

 # पासवर्ड प्रमाणीकरण हां 

सेवा मेरे

 पासवर्ड प्रमाणीकरण संख्या 

.hhosts फ़ाइलों को अक्षम करें

.rhosts फ़ाइलें निर्दिष्ट करती हैं कि कौन से उपयोगकर्ता स्थानीय मशीन पर पासवर्ड के बिना आर-कमांड (आरएसएस, आरसीपी, rlogin, आदि) तक पहुंच सकते हैं। डिफ़ॉल्ट रूप से एक .rhosts फ़ाइल अक्षम है; यदि नहीं, तो नीचे दिखाए गए अनुसार लाइनों को बदलें।

 IgnoreRhosts हाँ Rhosts प्रमाणीकरण कोई आरएसए प्रमाणीकरण हाँ 

होस्ट-आधारित प्रमाणीकरण अक्षम करें

एसएसएच का होस्ट-आधारित प्रमाणीकरण .hhosts प्रमाणीकरण से अधिक सुरक्षित है। हालांकि, यह अनुशंसा नहीं की जाती है कि होस्ट एक-दूसरे पर भरोसा करें। डिफ़ल्ट रूप में यह विकल्प अक्षम है।

यदि नहीं, तो नीचे दिखाए गए लाइन को बदलें।

 Hostbased प्रमाणीकरण संख्या 

लॉगिन अनुग्रह टाइमआउट सेट करें

"LoginGraceTime" निर्दिष्ट करता है कि एक कनेक्शन अनुरोध के बाद सर्वर डिस्कनेक्ट करने से पहले प्रतीक्षा करेगा। इसे 60 सेकंड तक कम करने की अनुशंसा की जाती है।

इसके लिए, रेखा बदलें

 लॉगिन ग्रेसटाइम 120 

सेवा मेरे

 लॉगिन ग्रेसटाइम 60 

अधिकतम स्टार्टअप कनेक्शन सेट करें

एसएसएच डिमन के लिए समवर्ती कनेक्शन की उचित अधिकतम संख्या स्थापित करना ब्रूट-फोर्स अटैक के खिलाफ सहायक हो सकता है।

इसके लिए, रेखा बदलें

 # मैक्स स्टार्टअप 10:30:60 

सेवा मेरे

 मैक्सस्टार्टअप 2 

अग्रेषण अक्षम करें

पोर्ट अग्रेषण तकनीक का उपयोग हमलावरों द्वारा सिस्टम में लॉग इन करने के लिए एक एसएसएच सत्र के माध्यम से सुरंग नेटवर्क कनेक्शन में किया जाता है। यह विकल्प अक्षम करने की अनुशंसा की जाती है।

इसके लिए, रेखा बदलें

 एक्स 11 फॉरवर्डिंग हां 

सेवा मेरे

 एक्स 11 फॉरवर्डिंग नंबर 

अधिक जानकारी लॉग इन करें

डिफ़ॉल्ट रूप से, एसएसएच सबकुछ लॉग करता है। अगर आप असफल लॉगिन प्रयासों की तरह अधिक जानकारी लॉग करना चाहते हैं। आप इसका मूल्य "VERBOSE" में बदल सकते हैं।

इसके लिए, रेखा बदलें

 LogLevel जानकारी 

सेवा मेरे

 LogLevel VERBOSE 

खाली पासवर्ड अक्षम करें

अपने सर्वर पर खाली पासवर्ड वाले उपयोगकर्ताओं से इनकार करना आवश्यक है। डिफ़ॉल्ट रूप से PermitEmptyPasswords उबंटू में अक्षम है।

यदि नहीं, तो नीचे दिखाए गए लाइन को बदलें।

 PermitEmptyPasswords संख्या 

निष्क्रिय टाइमआउट अंतराल सेट करें

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

इसके लिए, निम्नलिखित पंक्तियां जोड़ें।

 ClientAliveInterval 300 ClientAliveCountMax 0 

सख्त मोड

यह असुरक्षित होम निर्देशिका और कुंजी फ़ाइल अनुमतियों के उपयोग को रोक देगा। डिफ़ॉल्ट रूप से, यह विकल्प सक्षम है।

यदि नहीं, तो निम्न पंक्ति बदलें।

 सख्त मोड हाँ 

अब / etc / ssh / sshd_config फ़ाइल को सेव करें और बाहर निकलें और एसएसएच सर्वर को पुनरारंभ करें।

 सुडो सेवा एसएसएच पुनरारंभ करें 

टीसीपी रैपर का उपयोग कर सुरक्षित एसएसएच

एक टीसीपी रैपर इंटरनेट पर नेटवर्क पहुंच फ़िल्टर करने के लिए उपयोग की जाने वाली नेटवर्क सेवाओं पर मेजबान-आधारित पहुंच नियंत्रण प्रदान करता है। एसएसएच को केवल 192.168.1.2 और 172.16.23.12 से अनुमति देने के लिए अपनी "/etc/hosts.allow" फ़ाइल संपादित करें।

 सुडो नैनो /etc/hosts.allow 

निम्नलिखित पंक्ति जोड़ें:

 एसएसडीडी: 1 9 2.168.1.2 172.16.23.12 

Iptables का उपयोग कर सुरक्षित एसएसएच

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

एसएसएच कनेक्शन को केवल 192.168.1.2 से अनुमति देने के लिए निम्न आदेश चलाएं:

 sudo iptables -A INPUT -p tcp -m स्थिति --स्टेट नया - स्रोत 1 9 2.168.1.2 - 2200 -j ACCEPT निर्यात करें 

निम्न आदेश चलाकर अन्य सभी होस्टों से एसएसएच कनेक्शन अक्षम करें:

 सूडो iptables- एक इनपुट- टी टीसीपी - 2200 -j डीआरओपीपोर्ट 

अब निम्न आदेशों का उपयोग करके अपने नए नियमों को सहेजें:

 sudo iptables-save> /etc/iptables/rules.v4 

निष्कर्ष

उपर्युक्त निर्देश आपके एसएसएच सर्वर को सुरक्षित करने के लिए बहुत शक्तिशाली तकनीक हैं। इस पोस्ट में अधिकांश जानकारी शामिल हैं जो अधिकांश उपयोगकर्ताओं को एक एसएसएच सर्वर के लिए आवश्यकता होगी। यदि आपके कोई प्रश्न हैं तो नीचे टिप्पणी करने के लिए स्वतंत्र महसूस करें।

संदर्भ: एसएसएच उबंटू