Ssh के खिलाफ क्रूर बल हमलों को रोकना?


49

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

यह एक FreeBSD बॉक्स पर है, लेकिन मुझे लगता है कि यह कहीं भी लागू होगा।

जवाबों:


25

यहाँ रेनर विचमन द्वारा उस विषय पर एक अच्छी पोस्ट है

यह पेशेवरों और इसे करने के लिए शोध के तरीकों पर विचार करता है:

  • मजबूत पासवर्ड
  • आरएसए प्रमाणीकरण
  • हमले को रोकने के लिए 'iptables' का उपयोग करना
  • हमलों को ब्लॉक करने के लिए sshd लॉग का उपयोग करना
  • हमलों को ब्लॉक करने के लिए tcp_wrappers का उपयोग करना
  • बंदरगाह की दस्तक

39

मैं fail2ban का उपयोग करता हूं जो कि एक विन्यास योग्य समय के लिए कई असफल प्रयासों के बाद एक आईपी को लॉक कर देगा।

यह सुनिश्चित करने के लिए पासवर्ड शक्ति परीक्षण ( जॉन (जॉन द रिपर का उपयोग करके ) के साथ गठबंधन करें कि यह सुनिश्चित करने के लिए कि ब्रूट-फोर्स हमले सफल नहीं होंगे।


4
Fail2ban उत्कृष्ट है। मॉनीटर / var / log / maillog को मॉनिटर करना और इसे प्राप्त करना सरल था, मेरे मेल सर्वर से लगातार स्पैमर्स को प्रतिबंधित करने के लिए इसे प्राप्त करें
डेव चेनी

Fail2ban को iptables श्रृंखला के साथ जोड़ा जा सकता है जो TARPITलक्ष्य पर tcp ट्रैफ़िक भेजता है , यदि आप बुरा महसूस कर रहे हैं (xtables-addons से)।
तोबू

24

ओन्स छोटी सी चीज जो आप कर सकते हैं वह है DenyHosts जैसे कुछ का उपयोग करें:

http://denyhosts.sourceforge.net/

यह SSH अपहर्ताओं को रोकने के लिए अंतर्निहित hosts.allow / hosts.deny का उपयोग करता है।


16
  • उपयोग किए गए पोर्ट को बदलें (जैसा कि ट्रेंट उल्लेख किया गया है)
  • पासवर्ड के बजाय एन्क्रिप्शन कुंजी की आवश्यकता हैhttp://novosial.org/openssh/publickey-auth/
  • ब्लैकलिस्ट हमलावर ips
  • श्वेतसूची उपयोगकर्ताओं को आकस्मिक ब्लैक लिस्टिंग को रोकने के लिए जाना जाता है। (जैसा कि सैमुएला ने उल्लेख किया है)

15

इन हमलों से बचने के सबसे आसान तरीकों में से एक बंदरगाह को बदलना है जो sshd सुनता है


1
यदि, निश्चित रूप से, आप सिस्टम इसे खड़ा कर सकते हैं।
सी। रोस।

13
अस्पष्टता के माध्यम से सुरक्षा, हर बार प्रभावी।
क्रिस बैलेन्स

1
मुझे पोर्ट को बदलने में कोई दिक्कत नहीं होगी, लेकिन मैंने सीखा है कि ज्यादातर फायरवॉल (मेरे खुद के अलावा) आम (80,22, 443, आदि) के अलावा सभी पोर्ट को बंद कर देते हैं। अगर मैं उन फायरवॉल के पीछे हूं तो मुझे अपने घर का सर्वर उस गैर-मानक पोर्ट पर नहीं मिल सकता है। मेरे लिए वह एक रास्ता नहीं है।
शोक

@ फिर उस पोर्ट को बाहर करने के लिए हमारे फ़ायरवॉल को बदलें?
रोरी

@ रो मैं खुद के अलावा अन्य फायरवॉल के बारे में बात कर रहा हूं। उदाहरण के लिए अगर मैं स्टारबक्स से अपने घर की मशीन में एसएस करना चाहता हूं, तो उनका फ़ायरवॉल आउटगोइंग पोर्ट को ब्लॉक कर देता है। मैं उसे बदल नहीं सकता। (मैंने सिर्फ एक उदाहरण के रूप में स्टारबक्स का इस्तेमाल किया। मुझे पता नहीं है कि वे वास्तव में किस पोर्ट को ब्लॉक करते हैं या नहीं)।
शोक

12

जैसा कि क्रिस बताते हैं, पासवर्ड के बजाय एन्क्रिप्शन कुंजी का उपयोग करें।

इसमें जोड़ें:

  • जहां संभव हो, एक श्वेतसूची का उपयोग करें।

कितने लोगों या स्थानों (अस्थायी आईपी के साथ) क्या आपको वास्तव में अपने सार्वजनिक ssh कनेक्शन तक पहुँचने की आवश्यकता है?

आपके द्वारा बनाए जा रहे सार्वजनिक ssh होस्ट की संख्या के आधार पर और क्या आप अपने सामान्य कनेक्शन मानदंड को कम कर सकते हैं, तो कुछ बाहरी होस्ट तक पहुँच को सीमित करने के लिए यह एक सरल, मुख्य विन्यास हो सकता है।

यदि यह आपके लिए काम करता है, तो यह वास्तव में आपके प्रशासन को सरल बना सकता है।


2
जब तक आप लॉक आउट नहीं करना चाहते हैं, तब तक श्वेत सूची बनाना बहुत महत्वपूर्ण है।
रियानर

2
लगातार सफेद करने के लिए +1।
क्रिस बैलेन्स

3
+1 सबसे अच्छा जवाब देने के लिए। वे दो चीजें केवल उचित कदम हैं, और वे वास्तव में बहुत प्रभावी हैं। या तो अकेले सार्थक है, और दोनों एक साथ और अधिक। अश्लीलता के माध्यम से सुरक्षा की वकालत करने वाले अन्य उत्तरों पर बू!
-09

11

अन्य अच्छे सुझावों के अलावा, एक बहुत ही आसान काम है रेट-इनकमिंग कनेक्शन। प्रति आईपी प्रति मिनट 3 कनेक्शन की सीमा:

iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

मुझे कुछ गलतफहमी हो सकती है, लेकिन कई मुख्यधारा के ब्राउज़र एक समय में 4-6 कनेक्शनों के बीच जुड़ते हैं - भले ही HTTP मानक इसे 2 पर सेट करता है
जोशुआ एनफील्ड

1
हाँ, यह एक समस्या होगी यदि आप पोर्ट-लिमिट 80 को रेट करने की कोशिश कर रहे हैं। आप अपने वेब-ब्राउज़र के साथ ssh से कनेक्ट नहीं हो रहे हैं, और ssh सत्र लंबे समय तक रहने वाले सत्र हैं जो राज्य बनाए रखते हैं, न कि अल्पकालिक स्टेटलेस सत्र जैसे एचटीटीपी। Ssh सत्रों को समांतर बनाने से कोई मतलब नहीं है। यह कहना नहीं है कि ssh के कुछ आला उपयोग नहीं है कि यह टूट जाएगा, लेकिन यह दुर्लभ है।
शर्बत

यह समाधान इतना अच्छा नहीं है अगर, मेरी तरह, आप ssh के माध्यम से तोड़फोड़ की सेवा कर रहे हैं। एक एकल SVN क्वेरी त्वरित उत्तराधिकार में बड़ी संख्या में कनेक्शन बना सकती है। यदि वह सेवा प्रदान करता है, तो आप दूसरे पोर्ट पर दूसरी sshd सेवा का उपयोग कर सकते हैं, या श्वेतसूची में ज्ञात IPs। मैं अपने वैध उपयोगकर्ताओं को दंडित किए बिना, पहली बार के आसपास स्पष्ट हमलों को पकड़ने के लिए असफल 2 चैनल या sshdfilter का उपयोग करने के बारे में सोच रहा हूं।
धान

इस विकल्प को भी जानकर अच्छा लगा ...
ZEE

6

Sshd_config में "AllowUsers" विकल्प का उपयोग केवल यह सुनिश्चित करने के लिए करें कि उपयोगकर्ताओं का एक छोटा समूह बिल्कुल लॉग इन कर सकता है। अन्य सभी अस्वीकृत हो जाएंगे, भले ही उनका उपयोगकर्ता नाम और पासवर्ड सही हो।

आप किसी विशेष होस्ट से उपयोगकर्ताओं को लॉगिन करने के लिए भी प्रतिबंधित कर सकते हैं ।

जैसे,

AllowUsers user1 user2@host.example.com

यह खोज-स्थान को कम कर देगा और उन पुराने उपयोगकर्ताओं से बचना होगा जो गलती से इधर-उधर बिछा दिए गए या सक्षम हो गए हैं (हालाँकि ये निश्चित रूप से वैसे भी अक्षम होने चाहिए, यह SSH- आधारित प्रविष्टि के लिए उपयोग होने से रोकने का एक आसान तरीका है)।

यह पूरी तरह से जानवर के बल के हमलों को नहीं रोकता है, लेकिन जोखिम को कम करने में मदद करता है।


3

पीएफ के साथ कुछ इस तरह का उपयोग करें:

तालिका <ssh-जानवर> जारी रहती
लेबल ssh_brute से जल्दी लॉग में ब्लॉक
मिलाना राज्य \ ($ ext_if) बंदरगाह ssh करने के लिए $ ext_if आद्य टीसीपी पर में पारित
(अधिकतम-src-कॉन-दर 3/10, फ्लश वैश्विक ओवरलोड)


2

पोर्ट-नॉकिंग इस तरह की चीज़ को बाहर रखने का एक बहुत ही ठोस तरीका है। कभी-कभी थोड़े से झगड़े, कभी-कभी गुस्सा करते हैं, लेकिन यह निश्चित रूप से इस मुद्दे को दूर कर देता है।


मैंने यह कोशिश की है और उपयोगकर्ताओं को यह कष्टप्रद लगता है। यदि यह केवल एक या दो लोग हैं, तो यह एक अच्छा विकल्प हो सकता है, और लगभग बल-बल के हमलों को खत्म कर देगा
ब्रेंट

2

संदर्भ महत्वपूर्ण है, लेकिन मैं ऐसा कुछ सुझाऊंगा:

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

2

करने के लिए इसके अलावा sherbang की दर को सीमित सुझाव , देरी की लंबाई महत्वपूर्ण है। 3 लॉगिन प्रयासों के समूहों के बीच देरी को 2 मिनट से 20 मिनट तक बढ़ाकर, अलग-अलग आईपी पते की संख्या जो लॉगिन करने के तीन से अधिक प्रयासों को गिराती है, मेरी एक मशीन पर दो सप्ताह-लंबी अवधि की तुलना, 44 प्रयासों से 3 तक उन तीन पतों में से कोई भी 11 घंटे से अधिक समय तक प्रयास नहीं करता था।

बहुत किस्सा है, लेकिन मेरे लिए एक बहुत कुछ पठनीय बन गया है ...


1

मुझे इसकी परवाह नहीं है। उन्हें बंदरगाह पर बेल्ट से दूर जाने दें, वे एक प्रमुख शक्ति को भंग करने के लिए नहीं जा रहे हैं।


-1 कभी DoS हमलों के बारे में सुना है?
क्रिस बैलेन्स

8
हाँ, क्योंकि SSH एकमात्र सेवा है जो शस्त्र बल के हमलों के लिए अतिसंवेदनशील है। यदि आपको इंटरनेट पर पोर्ट खुला मिला है, तो इसका उपयोग आपकी मशीन को विस्मरण करने के लिए किया जा सकता है। आप शायद अजीब बंदरगाहों पर अपने HTTP सर्वर भी रखा, और बंदरगाह के पीछे दस्तक, "Dos हमलों से बचने" ...
Womble

1

OSSEC स्थापित करें। यह न केवल बार-बार लॉगिन के लिए मॉनिटर करता है, यह आक्रामक आईपी के लिए iptables के साथ एक अस्थायी ब्लॉक में प्रवेश करेगा। और अंत में यह आपको विवरण बताते हुए एक रिपोर्ट भेजेगा। यह सब कुछ लॉग करता है, जो अच्छा है। एक बार में लॉग इन करने के लिए सोमोन ने 8000 से अधिक लॉगिन नामों की कोशिश की। मैंने लॉग को पार्स कर दिया और एक अच्छी उपयोगकर्ता सूची प्राप्त कर ली;)

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