Ubuntu सर्वर को bruteforce ssh हमलों से कैसे सुरक्षित करें?


21

मेरे पास मेरे पासवर्ड सुरक्षित हैं, लेकिन मैंने लोगों को एक सर्वर के परफ्यूम के बारे में शिकायत करते हुए सुना है जब एक क्रूर हमला हो रहा है। मैं ऐसे हमलों से अपने ubuntu 10.10 सर्वर को कैसे सुरक्षित कर सकता हूं? क्या इसके लिए कोई एप्रोर्मर प्रोफाइल है? या इसे संबोधित करने का कोई और तरीका?

जवाबों:


19

अलग-अलग उपाय हैं। RSA प्रमाणीकरण का सबसे अच्छा उपयोग कर रहा है जो उपयोगकर्ताओं को प्रमाणित करने के लिए सार्वजनिक / निजी कुंजी का उपयोग करता है।

विभिन्न तरीकों (RSA प्रमाणीकरण शामिल) के लिए इस महान मैनुअल की जाँच करें: http://www.la-samhna.de/library/brutessn.html

मैं अपने सर्वर पर 3 जी समाधान का उपयोग कर रहा हूं क्योंकि मैं इसे अपने गैर-तकनीकी उपयोगकर्ताओं के लिए जटिल नहीं बनाना चाहता: iptablesप्रति मिनट कनेक्शन की संख्या को सीमित करने के लिए उपयोग करना जो क्रूर हमलों को अक्षम और अप्रभावी बनाता है।

यहाँ समाधान मैं उपयोग कर रहा हूँ:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j LOG --log-prefix "SSH_brute_force "
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP

जैसा कि यहां बताया गया है : यह 60 सेकंड की अवधि के भीतर किसी भी आईपी पते से तीन पोर्ट 22 कनेक्शन की अनुमति देगा, और कनेक्शन को फिर से कनेक्शन की अनुमति देने से पहले 60 सेकंड के बाद के कनेक्शन के प्रयासों की आवश्यकता होगी। पैकेट को मिलान करते समय --rttl विकल्प डेटाग्राम के TTL को भी ध्यान में रखता है, ताकि स्पूफ किए गए स्रोत पते के खिलाफ कम करने का प्रयास किया जा सके।

जैसा कि उल्लेखित मार्गदर्शिका में कहा गया है, विश्वसनीय उपयोगकर्ताओं को इन नियमों से अलग करने के लिए एक सफेद सूची का उपयोग करना बेहतर है:

iptables -N SSH_WHITELIST

फिर विश्वसनीय होस्ट जोड़ें:

iptables -A SSH_WHITELIST -s $TRUSTED_HOST -m recent --remove --name SSH -j ACCEPT

और उसके बाद नियम बनाएं:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_WHITELIST
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j ULOG --ulog-prefix SSH_brute_force
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP

पासवर्ड प्रमाणीकरण बंद करने के बारे में, यदि मैं अपनी सार्वजनिक कुंजी को ढीला करता हूं तो मैं सर्वर पर कैसे लॉगिन कर सकता हूं? (मैं एक सर्वर के लिए एक phisical का उपयोग नहीं है, यह एक VPS है)
Dziamid

सार्वजनिक कुंजी को आप चाहते हैं हर जगह प्रकाशित किया जा सकता है। आप इसके बारे में चिंता न करें। आप इसे कहीं रख सकते हैं कि आप सुनिश्चित हैं कि आप इसे सार्वजनिक स्थानों पर भी नहीं भूलेंगे।
पेद्रम


क्या पूछे जाने पर अपनी सार्वजनिक कुंजी प्रकट करने के लिए सर्वर स्थापित करने का कोई तरीका है?
डेज़ियामिड

1
Ssh का उपयोग करना, मुझे नहीं लगता है। यदि आपके पास एक वेब सर्वर स्थापित है जैसे कि अपाचे तो आप वेब का उपयोग करके कुंजी साझा कर सकते हैं।
Pedram

8

मुझे अपने सर्वर पर प्रति दिन 1 से 2 की दर से ब्रूट-बल ssh हमले मिलते हैं। मैंने denyhosts (ubuntu पैकेज: denyhosts) स्थापित किया है । यह उस उद्देश्य के लिए एक बहुत ही सरल लेकिन प्रभावी उपकरण है: अनिवार्य रूप से यह समय-समय पर अपने लॉग को जानवर-बल के हमलों का पता लगाने के लिए स्कैन करता है और आईपी डालता है जहां से ये हमले आपके /etc/hosts.deny फ़ाइल में उत्पन्न होते हैं। आप उन्हें फिर से नहीं सुनेंगे और आपका लोड काफी कम हो जाना चाहिए। यह अपनी कॉन्फिग फ़ाइल /etc/denyhosts.conf के माध्यम से समस्याओं को ट्विक करने के लिए बहुत ही कॉन्फ़िगर करने योग्य है जैसे कि एक गलत तरीके से कितने दुरुपयोग की कोशिश करता है आदि।

अपने पारदर्शी कामकाज के कारण आप आसानी से देख सकते हैं कि क्या हो रहा है (ईमेल नोटिफिकेशन: 'अहा, एक और खतरनाक हमला हुआ!') और आपके उपयोगकर्ताओं द्वारा बार-बार पासवर्ड गलत करने के कारण गलतियाँ हुईं।

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

इसके अलावा, iptables में सीमित नई-कनेक्शन दर एक बेहतर विकल्प हो सकती है, फिर hosts.deny के माध्यम से पहुंच को अस्वीकार कर सकती है। तो, असफल 2 पर भी एक नज़र है। लेकिन अगर आप जानते हैं कि ssh brute-force आपकी मुख्य चिंता है (इसे निर्धारित करने के लिए मैन्युअल रूप से /var/log/auth.log के माध्यम से देखें), इस बहुत ही आसान और कम प्रभाव वाले उपकरण के साथ जाएं।


1
मेरा /var/log/auth.log हाल ही में काफी बढ़ रहा है। क्या इस तरह से प्रवेश करना Mar 27 10:28:43 smartfood sshd[17017]: Failed password for root from 218.15.136.38 port 33119 ssh2 Mar 27 10:28:47 smartfood sshd[17019]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.15.136.38 user=rootकिसी हमले का संकेत है?
डेजीमिड

1
खैर, इसका मतलब है कि आईपी 218.15.136.38 पर किसी ने रूट के रूप में लॉगिन करने की कोशिश की। आप हो सकते थे, लेकिन संभवत: इसलिए नहीं क्योंकि टूल्स.whois.net/whoisbyip का उपयोग करते हुए , मैं देख सकता हूं कि यह आईपी चीन में पंजीकृत है, जो मिन्स्क से काफी दूर है ;; । Moral: ssh (PermitRootLogin no / in / etc / ssh / sshd_config) के माध्यम से रूट लॉगिन को अक्षम करें क्योंकि इस पर छोड़ने का कोई अच्छा कारण नहीं है। और फिर denyhosts या fail2ban पर विचार करें। यह भी सुनिश्चित करें कि आपके पास पोर्ट 22 के माध्यम से केवल आवश्यक उपयोग करने के लिए एक फ़ायरवॉल है और आपको जो कुछ भी चाहिए (लेकिन अधिक नहीं)
DrSAR

6
  1. Sshd पोर्ट को कुछ अमानक में बदलें
  2. पोर्ट-नॉकिंग सिस्टम knockdको लागू करने के लिए उपयोग करें
  3. लगातार SSH प्रयासों को सीमित करने के लिए iptables ' recentऔर hashlimitमाचिस का उपयोग करें
  4. पासवर्ड का उपयोग न करें, बल्कि इसके बजाय SSH कुंजियों का उपयोग करें

3
-1 पहली सलाह के लिए, वास्तव में कोई वास्तविक सुरक्षा वृद्धि के लिए चीजों को जटिल नहीं करता है
स्टैबर्ट रॉबर्ट

यदि आप ssh कुंजियों का उपयोग करते हैं और ssh के माध्यम से पासवर्ड प्रमाणीकरण बंद करते हैं, तो क्या मुझे वास्तव में 1,2,3 की आवश्यकता है?
डज़ियामिड

4
@steabert यह स्क्रिप्ट किडिज़ के खिलाफ मदद करता है जो सिर्फ पोर्ट 22 के माध्यम से अपने तरीके से bruteforce करने की कोशिश करते हैं। यह मेरा अनुभव है: जब मैं इसे सेट कर रहा था, तो कोई इंटरनेट-फेसिंग सर्वर को bruteforcing करता रहता है, जिससे सिस्टम मुझे चेतावनी के बाद चेतावनी भेजता है। मैंने बंदरगाह को स्थानांतरित कर दिया, और चेतावनी थम गई।
पेपोलुआन

@Dziamid ssh कुंजियाँ आपके सिस्टम में किसी को तोड़ने से रोकती हैं। लेकिन यह उन्हें पोर्ट 22 से कनेक्ट करने की कोशिश करने से नहीं रोकता है।
पेपोलुआन

3
@Dziamid नहीं, सही नहीं है। अन्य प्रमाणीकरण विधियां (RSAAuthentication, PubkeyAuthentication, #KerberosAuthentication आदि) सभी अभी भी पोर्ट 22 के माध्यम से संपर्क करते हैं।
DrSAR

3

सबसे पहले आपको पासवर्ड का उपयोग नहीं करने पर विचार करना चाहिए और इसके बजाय कुंजियों का उपयोग करना चाहिए। पासवर्ड का उपयोग करने की कोई आवश्यकता नहीं है। यदि यह आपके लिए काम करता है, तो आप OpenSSH- सर्वर को पासवर्ड लॉगिन पर प्रतिक्रिया नहीं करने के लिए कॉन्फ़िगर कर सकते हैं।

https://help.ubuntu.com/10.04/serverguide/C/openssh-server.html

Fail2ban का उपयोग करना, एक विकल्प भी हो सकता है।

https://help.ubuntu.com/community/Fail2ban


यदि मैं इसकी सार्वजनिक कुंजी को ढीला कर देता हूं तो मैं सर्वर से कैसे जुड़ सकता हूं?
डेजीमिड

1
केवल कंसोल या डायरेक्ट एक्सेस के माध्यम से। मुझे पूरा यकीन है कि अगर आप सर्वर को संचालित करने में सक्षम हैं तो आप अपनी चाबी नहीं खोएंगे।
ddeimeke

0

नेटवर्क पर सर्वर कितना व्यापक रूप से उजागर होता है? शायद आप नेटवर्क व्यवस्थापक से बात कर सकते हैं और जांच सकते हैं कि क्या सर्वर तक नेटवर्क पहुंच की निगरानी और प्रतिबंधित करना संभव है। भले ही खाता लॉगिन सुरक्षित हो, लेकिन ऐसा लगता है कि सर्वर सरल DoS / DDoS हमले से पीड़ित हो सकता है।


0

Fail2ban का एक विकल्प CSF है: कॉन्फ़िगर्सवर सुरक्षा और फ़ायरवॉल

यह LFD के साथ आता है: एक लॉगिन विफलता डेमन जो विभिन्न सेवाओं पर कई विफल लॉगिन प्रयासों का पता लगा सकता है, और आपत्तिजनक आईपी पते (अस्थायी या स्थायी रूप से) को अवरुद्ध कर देगा।

इसके पास कुछ अन्य विकल्प हैं जो बाढ़ के हमलों के खिलाफ मदद कर सकते हैं, और संभवतः घुसपैठ का पता लगा सकते हैं।

नुकसान:

  • LFD को अपना काम करने के लिए आपको अपने फ़ायरवॉल के रूप में CSF का उपयोग करना चाहिए। इसलिए यदि आपके पास एक मौजूदा फ़ायरवॉल है, तो आपको इसे CSF से बदलना होगा, और अपने कॉन्फ़िगरेशन को पोर्ट करना होगा।
  • यह उबंटू के लिए पैक नहीं किया गया है। आपको configserver.com से ऑटो-अपडेट पर भरोसा करना होगा, या स्वचालित अपडेट को अक्षम करना होगा।
  • मैंने सुना है कि यह काफी लोकप्रिय है, इसलिए स्मार्ट घुसपैठियों को पता चल जाएगा कि घुसपैठ का पता लगाने से पहले उन्हें कैसे निष्क्रिय किया जाए!

0

क्या आप दुनिया में SSH सेवा की अनुमति देने का इरादा रखते हैं? या सिर्फ विशेष स्थानों पर टीम के सदस्यों के लिए? मेरा जवाब आपकी चुनौती की गंभीरता पर थोड़ा निर्भर करता है।

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

  1. में / etc / ssh / sshd_config सुनिश्चित करें कि आपने SSH कुंजी को छोड़कर कभी भी रूट लॉगिन की अनुमति नहीं दी है।

मेरे सिस्टम में, मुझे यह सेटिंग मिल गई है

PermitRootLogin without-password

लेकिन मेरे पास नए उबंटू में है

PermitRootLogin prohibit-password

यदि आप "man sshd_config" पढ़ते हैं, तो मुझे लगता है कि इसका मतलब है कि यह नया "निषेध-पासवर्ड" एक ही बात है और निश्चित रूप से अर्थ में अधिक स्पष्ट है। यह कुछ लिनक्स सिस्टम पर डिफ़ॉल्ट नहीं है, लेकिन शायद होना चाहिए।

अब, आपकी समस्या के बारे में। क्या आपका सिस्टम सर्वर केवल कुछ उपयोगकर्ताओं को विशेष स्थानों पर है? यह करो!

  1. /etc/hosts.deny संपादित करें और डालें

    सब - सब

फिर /etc/hosts.allow को संपादित करें और आईपी नंबर या एक सीमा को सूचीबद्ध करें जो एसएसएच का उपयोग करने की अनुमति देना चाहते हैं। इस संकेतन में थोड़ी गड़बड़ है क्योंकि यदि आप 111.222.65.101 के माध्यम से आईपी नंबर जैसे सभी सिस्टम को 111.222.65.255 के माध्यम से अनुमति देना चाहते हैं, तो आप hosts.allow में इस तरह से प्रवेश करते हैं।

ALL: 127.0.0.1
sshd: 111.222.65.
sshdfwd-X11: 111.222.65.

यह एक क्रूर, शक्तिशाली समाधान है। यदि आपके उपयोगकर्ताओं को आईपी रेंज द्वारा गणना की जा सकती है, तो करें!

आईपी ​​टेबल बनने से पहले यह समाधान मौजूद था, यह (मुझे लगता है) प्रशासन के लिए बहुत आसान है, लेकिन आईपी तालिकाओं के समाधान के रूप में यह उतना अच्छा नहीं है क्योंकि आईपी टेबल रूटीन दुश्मनों को होस्टसेलो और मेजबानों द्वारा संचालित कार्यक्रमों की तुलना में जल्द ही हाजिर करेंगे। ।मना। लेकिन यह एक निश्चित आग है, बहुत सारी समस्याओं को बंद करने का सरल तरीका, न केवल एसएसएच से।

आपके द्वारा बनाई गई समस्या पर ध्यान दें। यदि आप एफ़टीपी सर्वर, वेब सर्वर या व्हाट्सएप खोलना चाहते हैं, तो आपको मेजबानों की अनुमति में प्रविष्टियां करनी होंगी।

आप iptables और फ़ायरवॉल के साथ फ़िडलिंग करके एक ही मूल उद्देश्य प्राप्त कर सकते हैं। एक मायने में, यह एक पसंदीदा समाधान है क्योंकि आप बाहरी सीमा पर दुश्मनों को रोक रहे हैं। उबंटू में "ufw" (सीधी फ़ायरवॉल) और "मैन ufw" के बहुत सारे उदाहरण हैं। मैं इसके माध्यम से उतारा करने के लिए एक अच्छा जीयूआई होगा, मुझे हर समय ऐसा करने की ज़रूरत नहीं है। हो सकता है कि अन्य लोग हमें बता सकते हैं कि क्या अब कोई है।

  1. यहां अन्य पोस्ट में आपके उपयोगकर्ताओं के लिए SSH सार्वजनिक कुंजी का उपयोग करने का सुझाव दिया गया है। यह निश्चित रूप से आपके उपयोगकर्ताओं के लिए जटिलता और हताशा की कीमत पर मदद करेगा। हमारी प्रयोगशाला में, 15 कंप्यूटर हैं। उपयोगकर्ता कंप्यूटर के बीच जाते हैं। SSH कुंजी प्रमाणीकरण की आवश्यकता एक बड़ी परेशानी का कारण होगी क्योंकि लोग एक कंप्यूटर से दूसरे कंप्यूटर पर जाते हैं।

निराशा का एक और स्रोत तब होगा जब कुछ उपयोगकर्ता विभिन्न सर्वरों के लिए अलग-अलग ssh कुंजी जमा करते हैं। क्योंकि मेरे पास लगभग 12 विभिन्न परियोजनाओं के लिए SSH कुंजियाँ हैं, अब ssh विफल हो गया है क्योंकि मेरे पास बहुत अधिक सार्वजनिक कुंजियाँ हैं (आवश्यक है कि "ssh -o PubkeyAuthentication = false" या .ssh / config फ़ाइल में प्रविष्टि का निर्माण। यह PITA है)

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

हमारे सेंटोस लिनक्स सिस्टम में, मैंने देखा कि उन्होंने डेनिहोस्ट्स पैकेज को गिरा दिया और केवल असफल 2 नोट की पेशकश की। मुझे डेनिहोस्ट पसंद आया क्योंकि इसने परेशान उपयोगकर्ताओं / आईपी श्रेणियों की सूची बनाई और फिर होस्टेसडेन में, उस सूची को नोट किया गया। हमने इसके बजाय विफलता 2ban स्थापित किया और यह ठीक है। मेरी समझ यह है कि आप सर्वर के बाहरी किनारे पर इन खराब उपयोगकर्ताओं को रोकेंगे, इसलिए आईपी टेबल आधारित अवरोधक, जैसे कि फेल 2 बीएन, वास्तव में बेहतर हैं। शत्रु अतीत के शस्त्रों को प्राप्त करने के बाद डेनहॉस्ट माध्यमिक स्तर पर काम करते हैं, जिन्हें बाद में sshd डेमॉन द्वारा अस्वीकार कर दिया जाता है।

इन दोनों कार्यक्रमों में, उपयोगकर्ताओं को जेल से बाहर निकलने के लिए थोड़ा थकाऊ होना चाहिए, यदि वे अपना पासवर्ड भूल जाते हैं और लॉग इन करने के लिए कुछ प्रयास करते हैं। लोगों से लॉग इन करते समय उन्हें वापस प्राप्त करना थोड़ा मुश्किल होता है। आपने अनुमान लगाया होगा कि एक बिंदु और क्लिक GUI होगा जहाँ आप बस बिंदु कर सकते हैं और लोगों को वापस जाने दे सकते हैं, लेकिन यह ऐसा नहीं है। मुझे केवल हर कुछ महीनों में ऐसा करना है और समय के बीच कैसे भूलना है, इसलिए मैंने अपने वेब पेज http://pj.freefacademy.org/blog/?p=301 पर अपने लिए निर्देश लिखे हैं।

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