मुझे यह सुनिश्चित करने के लिए क्या उपाय करना चाहिए / लेना चाहिए कि मेरे SSH सर्वर के चारों ओर की सुरक्षा पूरी तरह से अभेद्य है?
यह शुरू से ही सामुदायिक विकी होगा, ताकि लोग यह देख सकें कि लोग अपने सर्वर को सुरक्षित करने के लिए क्या करते हैं।
मुझे यह सुनिश्चित करने के लिए क्या उपाय करना चाहिए / लेना चाहिए कि मेरे SSH सर्वर के चारों ओर की सुरक्षा पूरी तरह से अभेद्य है?
यह शुरू से ही सामुदायिक विकी होगा, ताकि लोग यह देख सकें कि लोग अपने सर्वर को सुरक्षित करने के लिए क्या करते हैं।
जवाबों:
पासवर्ड के बजाय प्रमाणीकरण के लिए सार्वजनिक / निजी कुंजी जोड़े का उपयोग करें।
सर्वर तक पहुँचने के लिए आवश्यक हर कंप्यूटर के लिए एक पासफ़्रेज़-संरक्षित SSH कुंजी बनाएँ:
ssh-keygen
अनुमत कंप्यूटर से सार्वजनिक-कुंजी SSH पहुँच की अनुमति दें:
~/.ssh/id_rsa.pub
प्रत्येक कंप्यूटर से सामग्री ~/.ssh/authorized_keys
को सर्वर पर अलग-अलग लाइनों में कॉपी करें, या ssh-copy-id [server IP address]
प्रत्येक कंप्यूटर पर चलाएं जिस पर आप पहुंच प्रदान कर रहे हैं (आपको प्रॉम्प्ट पर सर्वर पासवर्ड दर्ज करना होगा)।
पासवर्ड SSH को अक्षम करें:
खोलें /etc/ssh/sshd_config
, जो रेखा कहती है, उसे ढूंढें #PasswordAuthentication yes
और उसे बदल दें PasswordAuthentication no
। परिवर्तन लागू करने के लिए SSH सर्वर डेमॉन को पुनरारंभ करें ( sudo service ssh restart
)।
अब, सर्वर में SSH का एकमात्र संभव तरीका एक पंक्ति से मेल खाने वाली कुंजी का उपयोग करना है ~/.ssh/authorized_keys
। इस पद्धति का उपयोग करते हुए, मैं जानवर बल के हमलों की परवाह नहीं करता, क्योंकि अगर वे मेरे पासवर्ड का अनुमान लगाते हैं, तो भी इसे अस्वीकार कर दिया जाएगा। आज की तकनीक के साथ सार्वजनिक / निजी कुंजी जोड़ी को भंग करना असंभव है।
मै सुझाव दूंगा:
Brute बल लॉगिन प्रयासों को रोकने के लिए fail2ban का उपयोग करना ।
SSH के माध्यम से रूट के रूप में लॉगिंग को अक्षम करना। इसका मतलब है कि एक हमलावर को उपयोगकर्ता नाम और पासवर्ड दोनों का पता लगाना पड़ता है और हमले को और अधिक कठिन बना देता है।
PermitRootLogin no
अपने में जोड़ें /etc/ssh/sshd_config
।
उन उपयोगकर्ताओं को सीमित करना जो सर्वर पर SSH कर सकते हैं। या तो समूह या केवल विशिष्ट उपयोगकर्ताओं द्वारा।
सर्वर पर SSH कौन कर सकता है, इसे जोड़ें AllowGroups group1 group2
या AllowUsers user1 user2
सीमित करें।
sshd
मशीन से बाहर अपने आप को लॉक करने से बचने के लिए, अपने एसडीएस को पुनरारंभ करने से पहले हमेशा अपने कॉन्फ़िगरेशन को सही करें। देखें इस ब्लॉग जानकारी के लिए - बस चलाने के sshd -T
मुख्य पुन: प्रारंभ करने से पहले एक config परिवर्तन के बाद sshd
। इसके अलावा, SSH सत्र को मशीन पर तब खोलें जब आप कॉन्फिगरेशन को बदलते हैं, और इसे तब तक बंद न करें जब तक कि आपने कॉन्फ़िगर किए गए कॉन्फिगरेशन का उल्लेख नहीं किया है और हो सकता है कि उसने SSH लॉगिन का परीक्षण किया हो।
अन्य उत्तर सुरक्षा प्रदान करते हैं, लेकिन एक चीज है जो आप कर सकते हैं जो आपके लॉग को शांत कर देगा, और यह संभावना कम कर देगा कि आप अपने खाते से लॉक हो जाएंगे:
सर्वर को पोर्ट 22 से दूसरे में ले जाएं। या तो अपने प्रवेश द्वार पर, या सर्वर पर।
यह सुरक्षा में वृद्धि नहीं करता है, लेकिन इसका मतलब यह है कि सभी यादृच्छिक इंटरनेट स्कैनर आपको लॉग इन फ़ाइलों को अव्यवस्थित नहीं करेंगे।
HOTP या TOTP के साथ दो कारक प्रमाणीकरण सक्षम करें । यह 13.10 बजे से उपलब्ध है।
इसमें पासवर्ड प्रमाणीकरण पर सार्वजनिक कुंजी प्रमाणीकरण का उपयोग करना शामिल है जैसा कि यहां एक अन्य उत्तर में है, लेकिन उपयोगकर्ता को यह भी साबित करने की आवश्यकता है कि वह अपनी निजी कुंजी के अलावा अपना दूसरा-कारक-उपकरण रखता है।
सारांश:
sudo apt-get install libpam-google-authenticator
क्या प्रत्येक उपयोगकर्ता google-authenticator
कमांड चलाता है , जो उत्पन्न ~/.google-authenticator
करता है और उन्हें अपने दो कारक डिवाइस (जैसे Google प्रमाणक एंड्रॉइड ऐप) कॉन्फ़िगर करने में मदद करता है।
संपादित करें /etc/ssh/sshd_config
और सेट करें:
ChallengeResponseAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive
भागो sudo service ssh reload
में अपने परिवर्तन लेने के लिए /etc/ssh/sshd_config
।
संपादित करें /etc/pam.d/sshd
और पंक्ति बदलें:
@include common-auth
साथ में:
auth required pam_google_authenticator.so
विभिन्न विन्यास विकल्पों पर अधिक जानकारी पिछले वर्ष से मेरा ब्लॉग पोस्ट है: उबंटू पर बेहतर दो कारक ssh प्रमाणीकरण ।
Sshd ब्लॉक क्लाइंट IP बनाएं जो सही लॉगिन जानकारी " DenyHsts " की आपूर्ति करने में विफल रहे हैं, इस काम को काफी प्रभावी ढंग से कर सकते हैं। मैंने इसे अपने सभी लिनक्स बॉक्सों पर स्थापित किया है जो किसी तरह से महान बाहर से पहुंच योग्य हैं।
यह सुनिश्चित करेगा कि SSHD पर बल-हमला प्रभावी नहीं होगा, लेकिन याद रखें (!) इस तरह से आप अपने आप को लॉक कर सकते हैं यदि आप पासवर्ड भूल जाते हैं। यह एक दूरस्थ सर्वर पर एक समस्या हो सकती है, जिसकी आपको एक्सेस नहीं है।
यहां एक आसान काम है: ufw ("सीधी फ़ायरवॉल") स्थापित करें और इसका उपयोग आने वाले कनेक्शनों को सीमित करने के लिए करें।
कमांड प्रॉम्प्ट से, टाइप करें:
$ sudo ufw limit OpenSSH
यदि ufw स्थापित नहीं है, तो इसे करें और पुनः प्रयास करें:
$ sudo aptitude install ufw
कई हमलावर आपके SSH सर्वर का उपयोग ब्रूट-फोर्स पासवर्ड के लिए करने का प्रयास करेंगे। यह एक ही आईपी पते से हर 30 सेकंड में केवल 6 कनेक्शन की अनुमति देगा।
अगर मुझे कुछ अतिरिक्त सुरक्षा चाहिए या कुछ कॉर्पोरेट नेटवर्क के अंदर गहरी SSH सर्वर तक पहुँचने की आवश्यकता है, तो मैं एक अज्ञात सेवा का उपयोग करके एक अज्ञात सॉफ्टवेयर टोर का उपयोग करके सेटअप कर सकता हूं ।
localhost
।/etc/tor/torrc
। सेट HiddenServiceDir /var/lib/tor/ssh
और HiddenServicePort 22 127.0.0.1:22
।var/lib/tor/ssh/hostname
। जैसा नाम है d6frsudqtx123vxf.onion
। यह छिपी हुई सेवा का पता है।$HOME/.ssh/config
कुछ लाइनें खोलें और जोड़ें:
Host myhost
HostName d6frsudqtx123vxf.onion
ProxyCommand socat STDIO SOCKS4A:127.0.0.1:%h:%p,socksport=9050
इसके अलावा मुझे अपने स्थानीय मेजबान पर टोर की जरूरत है। यदि यह स्थापित है तो मैं प्रवेश कर सकता हूं ssh myhost
और एसएसएच टोर के माध्यम से एक कनेक्शन खोलता है। दूसरी तरफ SSH सर्वर केवल लोकलहोस्ट पर अपना पोर्ट खोलता है। तो कोई भी इसे "सामान्य इंटरनेट" के माध्यम से जोड़ सकता है।
इस विषय पर डेबियन प्रशासन लेख है। यह मूल SSH सर्वर कॉन्फ़िगरेशन को कवर करता है और फ़ायरवॉल नियम भी। यह SSH सर्वर को कड़ा करने के लिए भी रुचि का हो सकता है।
वहाँ लेख देखें: SSH को सुरक्षित रखना ।
SSH सख्त करने के लिए मेरा दृष्टिकोण है ... जटिल। निम्नलिखित आइटम मेरे सर्वर के किनारे-सबसे सीमा (सर्वर) से स्वयं को सर्वर पर कैसे करते हैं, इसके संदर्भ में हैं।
ब्लॉकलिस्ट में ज्ञात सेवा स्कैनर और हस्ताक्षर के साथ आईडीएस / आईपीएस के माध्यम से यातायात के सीमा-स्तर को छानना। मैं अपनी सीमा फ़ायरवॉल के माध्यम से स्नॉर्ट के साथ इसे प्राप्त करता हूं (यह मेरा दृष्टिकोण है, एक pfSense उपकरण)। कभी-कभी, मैं ऐसा नहीं कर सकता, जैसे कि मेरे VPSes के साथ।
SSH पोर्ट के फ़ायरवॉल / नेटवर्क फ़िल्टरिंग। मैं स्पष्ट रूप से केवल कुछ सिस्टम को अपने SSH सर्वरों तक पहुँचने की अनुमति देता हूँ। यह या तो मेरे नेटवर्क की सीमा पर एक pfSense फ़ायरवॉल के माध्यम से किया जाता है, या प्रत्येक सर्वर पर फ़ायरवॉल स्पष्ट रूप से कॉन्फ़िगर किया जा रहा है। ऐसे मामले हैं जहां मैं ऐसा नहीं कर सकता, हालांकि (जो लगभग कभी भी ऐसा नहीं होता है, केवल निजी पेन-परीक्षण या सुरक्षा परीक्षण प्रयोगशाला वातावरण को छोड़कर जहां फायरवॉल परीक्षण चीजों की मदद नहीं करेगा)।
मेरे pfSense, या एक सीमा फ़ायरवॉल के साथ संयोजन के रूप में आंतरिक नेटवर्क नैट-आईएनजी और इंटरनेट और सिस्टम से अलग, वीपीएन-ओनली एक्सेस टू सर्वर्स । सर्वरों को प्राप्त करने के लिए अपने नेटवर्क में वीपीएन प्राप्त करें, क्योंकि इस तरह का कोई इंटरनेट-फेसिंग पोर्ट नहीं है। यह निश्चित रूप से मेरे सभी VPSes के लिए काम नहीं करता है, लेकिन # 2 के साथ संयोजन के रूप में, मैं उस सर्वर में वीपीएन करके एक VPS 'गेटवे' हो सकता है, और फिर इसे अन्य बॉक्स के लिए IPs की अनुमति देता है। इस तरह, मुझे पता है कि एसएसएच इन - मेरे एक बॉक्स जो कि वीपीएन है, क्या कर सकता है या नहीं कर सकता है। (या, pfSense के पीछे मेरे होम नेटवर्क में, मेरा वीपीएन कनेक्शन, और मैं वीपीएन एक्सेस के साथ अकेला हूं)।
जहाँ # 3 करने योग्य नहीं है, fail2ban, 4 विफल प्रयासों के बाद ब्लॉक करने के लिए कॉन्फ़िगर किया गया है और एक घंटे या उससे अधिक के लिए IP को ब्लॉक करना है जो लोगों पर लगातार क्रूरता के साथ हमला कर रहा है, उनके खिलाफ एक सभ्य सुरक्षा है - बस असफल फ़ायरबैन पर असफल एम 2 के साथ, और meh। हालांकि असफल 2 विन्यास कॉन्फ़िगर करना एक दर्द है ...
SSH पोर्ट को बदलकर पोर्ट ऑबफैक्शन। हालांकि, यह बिना किसी अतिरिक्त सुरक्षा उपाय के करने के लिए एक अच्छा विचार नहीं है - "सुरक्षा के माध्यम से अस्पष्टता" का मंत्र पहले ही कई मामलों में खंडन किया गया है और विवादित है। मैंने इसे आईडीएस / आईपीएस और नेटवर्क फ़िल्टरिंग के संयोजन में किया है, लेकिन यह अभी भी बहुत खराब है।
MANDATORY टू-फैक्टर ऑथेंटिकेशन, डू सिक्योरिटी के टू-फैक्टर ऑथेंटिकेशन सॉल्यूशंस के जरिए । मेरे हर एसएसएच सर्वर में से प्रत्येक ने डुओ को इस पर कॉन्फ़िगर किया है, जैसे कि इसमें प्रवेश करने के लिए, 2FA संकेत होते हैं, और मुझे प्रत्येक पहुंच की पुष्टि करनी होगी। (यह अंतिम उपयोगी विशेषता है - क्योंकि भले ही किसी के पास मेरा पासफ़्रेज़ हो या उसमें विराम हो, वे Duo Poo Plugins को पा नहीं सकते हैं)। यह अनाधिकृत उपयोग से मेरे SSH सर्वर पर सबसे बड़ी सुरक्षा में से एक है - प्रत्येक उपयोगकर्ता लॉगिन MUST Duo में एक कॉन्फ़िगर किए गए उपयोगकर्ता के लिए वापस टाई करता है, और चूंकि मेरे पास प्रतिबंधात्मक सेट है, इसलिए सिस्टम में कोई नया उपयोगकर्ता पंजीकृत नहीं किया जा सकता है।
SSH को सुरक्षित करने के लिए मेरे दो-सेंट। या, कम से कम, दृष्टिकोण पर मेरे विचार।
आप Google प्रमाणक का उपयोग करने के बजाय RedHat से FreeOTP ऐप की जांच कर सकते हैं। कभी-कभी ऐप को अपडेट करते समय, वे आपको लॉक कर देते हैं! ;-)
यदि आप Yubikey या eToken PASS या NG जैसे अन्य हार्डवेयर टोकन का उपयोग करना चाहते हैं या यदि आपके पास कई उपयोगकर्ता या कई सर्वर हैं, तो आप एक ओपनसोर्स टू फैक्टर ऑथेंटिकेशन बैकएंड का उपयोग करना चाह सकते हैं।
हाल ही में मैंने इस बारे में एक howto लिखा था ।
मैंने हाल ही में ऐसा करने पर एक छोटा ट्यूटोरियल लिखा है। असल में, आपको PKI का उपयोग करने की आवश्यकता है और मेरा ट्यूटोरियल यह भी दिखाता है कि अधिक सुरक्षा के लिए टू-फैक्टर प्रमाणीकरण का उपयोग कैसे करें। यहां तक कि अगर आप उन चीजों में से किसी का उपयोग नहीं करते हैं, तो कमजोर सिफर स्वीट्स और अन्य मूल बातें हटाकर सर्वर को सुरक्षित करने के बारे में कुछ tidbits भी है। https://joscor.com/blog/hardening-openssh-server-ubuntu-14-04/
बड़ी संख्या में उपयोगकर्ता / प्रमाणपत्र LDAP एकीकरण पर विचार करते हैं। बड़े संगठन LDAP का उपयोग उपयोगकर्ता क्रेडेंशियल्स और बैज या फोब्स पर संग्रहीत प्रमाणपत्रों के लिए एक रिपॉजिटरी के रूप में करते हैं, चाहे प्रमाण पत्र प्रमाणीकरण या ईमेल पर हस्ताक्षर करने के लिए उपयोग किए जाते हैं। उदाहरणों में OpenLDAP, OpenDJ, सक्रिय निर्देशिका, Oracle Universal निर्देशिका, IBM Directory Server, snareWorks शामिल हैं ...
कंप्यूटर और समूहों को LDAP में केंद्रीय क्रेडेंशियल प्रबंधन देने में भी प्रबंधित किया जा सकता है। इस तरह से मदद डेस्क के पास बड़ी आबादी से निपटने के लिए वन स्टॉप शॉप हो सकती है।
यहाँ सेंटोस एकीकरण का लिंक दिया गया है: http://itdavid.blogspot.com/2013/11/howto-configure-openssh-to-fetch-public.html
आप जियोआईपी डेटाबेस का उपयोग करके मूल देश के आधार पर भी ब्लॉक कर सकते हैं।
मूल रूप से यदि आप अमेरिका में रहते हैं तो रूस में किसी को आपके एसएसएच से जुड़ने का कोई कारण नहीं है, इसलिए वे स्वचालित रूप से अवरुद्ध हो जाएंगे।
स्क्रिप्ट यहां देखी जा सकती है: https://www.axllent.org/docs/view/ssh-geoip/
आप इसमें IPPables कमांड को जोड़ सकते हैं (मैंने अपनी बूंदों के लिए) उन IP से / के लिए सभी ट्रैफ़िक को ऑटो ड्रॉप कर दिया।