सैकड़ों विफल ssh लॉगिन


81

हर रात मैं अपने रेडहैट 4 सर्वर पर विफल ssh लॉगिन के सैकड़ों, कभी-कभी हजारों मिलता हूं। दूरस्थ साइटों से फ़ायरवॉल कारणों के लिए, मुझे मानक पोर्ट पर चलने की आवश्यकता है। क्या मुझे इसे ब्लॉक करने के लिए कुछ भी करना चाहिए। मुझे लगता है कि कई एक ही आईपी पते से आते हैं। क्या इसे थोड़ी देर बाद रोकना नहीं चाहिए?

जवाबों:


67

आप SSH पोर्ट के लिए आने वाले कनेक्शन को सीमित करने के लिए iptables का उपयोग कर सकते हैं। आपको टर्नकी समाधान देने के लिए मुझे आपके संपूर्ण iptables कॉन्फ़िगरेशन को देखना होगा, लेकिन आप मूल रूप से नियमों को जोड़ने की बात कर रहे हैं:

iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP 
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource -j ACCEPT 

ये नियम मानते हैं कि आप तालिका में पहले से स्थापित कनेक्शन स्वीकार कर रहे हैं (ताकि केवल नए कनेक्शन ही इन नियमों को प्रभावित करेंगे)। नए एसएसएच कनेक्शन इन नियमों को प्रभावित करेंगे और चिह्नित किए जाएंगे। 60 सेकंड में, एक एकल आईपी पते से 5 प्रयासों के परिणामस्वरूप उस आईपी से नए आवक कनेक्शन हटा दिए जाएंगे।

इसने मेरे लिए अच्छा काम किया है।

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


1
मुझे यह समाधान पसंद है और मैं आज रात इसे प्राप्त करने की योजना बना रहा हूं, एक बार मुझे आज की आग लग जाती है।
मैटमैकेनाइट

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

1
@ इवान के "पोर्ट नॉकिंग" सुझाव के लिए +1। कुछ जानकारी: linux.die.net/man/1/knockd । लेकिन इसे मैन पेज तरीके से न करें (यानी, iptables नियमों को जोड़ना / हटाना), बल्कि इसके बजाय -m conditioniptables मैच का उपयोग करें।
पेपोलुआन

2
क्या आपको इन नियमों में --dport 22 की आवश्यकता नहीं है ताकि वे केवल ssh ट्रैफ़िक के लिए लागू हों?
क्लेमे

2
@ क्राइम - हां। यह विश्वास करना मुश्किल है कि यहां 2 1/2 साल हो गए हैं और किसी ने गौर नहीं किया है! अच्छी पकड़।
इवान एंडरसन

39

fail2ban प्रयासों में बहुत अधिक विफल लॉग के साथ IP पतों को अवरुद्ध करके इसके साथ मदद कर सकता है।


11
मैं उपकरण / स्क्रिप्ट्स पढ़ना पसंद नहीं करता हूं और लॉग्स को जारी करना और sysadmin उपयोगकर्ता की ओर से आदेश जारी करना
asdmin

2
@ सादीन, हाँ, खासकर जब उनके पास इतना अच्छा ट्रैक रिकॉर्ड है ...
maxschlepzig

25

यदि आप कर सकते हैं तो मैं SSH के लिए एक गैर-मानक पोर्ट का उपयोग करने की सलाह दूंगा (अर्थात। बंदरगाह 10222), लेकिन जब से आपने उल्लेख किया है कि आप ऐसा नहीं कर सकते हैं मैं कुछ ऐसी DenyHosts का उपयोग करने की सलाह दूंगा।

http://denyhosts.sourceforge.net/

महान पैकेज, स्थापित करने और कॉन्फ़िगर करने में आसान।


6
मुझे नहीं पता कि लोग इसे क्यों बढ़ाते हैं; SSH एक मानक पोर्ट 22 पर है। इसका मतलब है कि जब आप एक विदेशी नेटवर्क पर होते हैं, तो आप उन पर भरोसा नहीं कर रहे हैं जो आउटबाउंड फ़ायरवॉल के माध्यम से एक गैर-मानक पोर्ट खोल रहे हैं। इस समस्या का वास्तविक समाधान ऊपर प्रलेखित है, या तो अपने इनबाउंड फ़ायरवॉल के माध्यम से दोहराए जाने वाले कनेक्शन की संख्या को प्रतिबंधित करें, या स्विच-ऑफ लॉग इन करें।
एंड्रयू टेलर

1
ओपनएसएसएच 6.7 tcpwrappers समर्थन को गिराता है , जो कि डेनिहोस्ट उपयोग करता है।
Zoredache

15

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

यदि आपके पास एक ही सिस्टम पर एक वेब सर्वर है, तो आप ज्ञात सिस्टम के लिए इनबाउंड ट्रैफिक को प्रतिबंधित करने के लिए php और tcp रैपर का उपयोग कर सकते हैं, साथ ही आपको इंटरनेट पर मनमाने सिस्टम से खुद को एक्सेस करने की अनुमति देने के लिए बैक-डोर कुंजी देते हैं।

यहाँ आप इसे कैसे करते हैं:

/etc/hosts.deny में सभी ssh कनेक्शन को अस्वीकार करें:

# /etc/hosts.deny fragment
sshd:  all

IP द्वारा /etc/hosts.allow में ज्ञात सिस्टम को अनुमति दें, साथ ही अस्थायी पहुँच के लिए फ़ाइल जोड़ें:

# /etc/hosts.allow fragment
sshd:  10.0.10.2     # some system
sshd:  172.99.99.99  # some other system
sshd:  /etc/hosts.allow.temporary-sshd-access

अपने वेब सर्वर में एक php फ़ाइल बनाएँ और इसे एक गैर-स्पष्ट नाम दें जैसे my-sshd-access.php:

<?php
function get_ip()
{
    return getenv("REMOTE_ADDR"); 
}

?>

<?php
$out='/etc/hosts.allow.temporary-sshd-access';
$log='/var/log/sshd-access-addition-log';

print "Was:";
readfile($out);
print "<br>";
$ip=get_ip();
$fp=fopen($out,"w");
fputs($fp,$ip);
fclose($fp);

$lfp=fopen($log,"a");
fputs($lfp,$ip);
fputs($lfp,"n");
fclose($lfp);

print "Wrote: ";
readfile($out);
?>

Php कोड को माफ़ करें - मैंने इसे कहीं और से स्वाइप किया था, इसलिए यह संभवत: पूरे झुंड को साफ करने के लिए खड़ा हो सकता है। यह सब उसे /etc/hosts.allow.temporary-sshd-access फ़ाइल तक पहुँचने वाले सिस्टम का IP पता जोड़ता है, जो sshd (रीडिंग / कनेक्शन के समय /etc/hosts.allow द्वारा इसके शामिल होने के कारण) के लिए पढ़ा जाता है। ।

अब जब आप वेब पर कुछ मनमाना सिस्टम में हैं और इस सिस्टम को ssh करना चाहते हैं, तो पहले एक वेब ब्राउजर का इस्तेमाल करें और इस फाइल को हिट करें (या wget या equ लैस का इस्तेमाल करें):

$ wget http://your.system.name/my-sshd-access.php

अब आपको अपने सिस्टम में ssh करने में सक्षम होना चाहिए। यदि यह कहीं है तो आप अक्सर इसमें से ssh'ing हो जाएगा, यह /etc/hosts.allow.temporary-sshd-access फ़ाइल की सामग्री को पढ़ने के लिए तुच्छ होगा और स्थायी रूप से / etc / Host में IP पता जोड़ देगा। अनुमति।


इसे सुरक्षित बनाने के लिए, इस पृष्ठ को https पर चलाएँ।
रॉबर्ट मुंटेनू

यदि आप स्क्रिप्ट को बदलते हैं, तो यह "अनुमत अस्थायी आईपी पते" फ़ाइल की सामग्री को आउटपुट नहीं करता है, तो सूंघने के लिए एक स्निफर के लिए कुछ भी नहीं होगा। फिर आप इसे https के बजाय http पर चला सकते हैं।
बैरी ब्राउन

"अनुमत अस्थायी IP पता" हमेशा आवश्यक (यानी आपका) है। मुझे नहीं लगता कि यह एक तरह से या किसी अन्य के लिए मायने रखता है। Https का अर्थ है कि अनुरोधित URL एन्क्रिप्ट किया गया है जिसका अर्थ है कि तार से इसे सूँघना तुच्छ नहीं है।
डेविड मैकिन्टोश

यदि आप ऐसे नेटवर्क पर काम नहीं करते हैं जो HTTP कनेक्शनों को सम्‍मिलित करता है, लेकिन इंटरनेट पर आपका सीधा मार्ग एक अलग ईग्रेस के माध्यम से है।
एंड्रयू टेलर

OpenSSH 6.7 tcpwrappers समर्थन को गिराता है , जो कि आपके उत्तर में उपयोग किया जा रहा है।
Zoredache


8

अपने आप को एक एहसान करो और पासवर्ड लॉगिन को अक्षम करें। विशेष रूप से प्रमाणीकरण कुंजियों का उपयोग करें (उदाहरण के लिए google ssh-keygen - उदाहरण: http://www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/document/html/SSH-with-Keys-HOWTO-4 । html ) आपका सर्वर अधिक सुरक्षित होगा, आप इसे और अधिक आराम से कनेक्ट करेंगे (ssh-Agent, ssh-add, keychain की जांच करें) और आप ssh brute बल के हमलों का शिकार नहीं होंगे।


2

एक और समाधान सिर्फ दूसरे बंदरगाह पर एसएचएस ले जाना है। ये कीड़े बहुत बेवकूफ हैं।


3
मूल पोस्टर ने कहा कि उन्हें मानक बंदरगाह पर चलने की आवश्यकता है।
kbyrd

1
क्षमा करें, मुझे प्रश्नों को और अधिक ध्यान से पढ़ना चाहिए :)
जुआन

1
मुझे सहमत होना होगा ... मेरे पास मेरा एसएसएच "वैकल्पिक" पोर्ट पर चल रहा है और यह लॉग में अंतर करता है। कीड़े ईंट के रूप में स्मार्ट होते हैं, इसलिए यह गूंगा स्वचालन स्क्रिप्ट के खिलाफ अच्छी तरह से काम करता है; मानव हमलावरों के खिलाफ इतना अच्छा नहीं है। फिर भी, लॉग्स में मौन की धन्य ध्वनि है ...
एवरी पायने

.. यह नहीं है कि बॉट्स "बेवकूफ" हैं, यह है कि वे कम-लटकते फलों की तलाश के लिए डिज़ाइन किए गए हैं। तो SSH पोर्ट को स्थानांतरित करना आपके मैदान से दूर फल की तरह है।
एलब्रोबिस

2

एक अन्य विकल्प यह हो सकता है कि सभी ssh कनेक्शन को एक प्रमाण पत्र द्वारा सत्यापित किया जाए और पूरी तरह से पासवर्ड के साथ दूर किया जाए।

मैं Denyhosts का उपयोग करने के लिए उपयोग करता हूं, लेकिन मैंने पाया कि मैं केवल एक मुट्ठी भर स्थानों से नियमित रूप से दूर से कनेक्ट कर रहा था, इसलिए मैंने सभी पोर्ट 22 कनेक्शनों को कहीं और से छोड़कर अवरुद्ध कर दिया था, और पोर्ट नॉकिंग का उपयोग करता हूं इसलिए मुझे अपने लैपटॉप के साथ कहीं से भी कनेक्ट कर सकता है अगर मुझे करना है ।


1

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

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


1

ईमानदारी से, अगर आपको SSH (और पोर्ट 22 पर) चलाना है, तो आप इनसे बच नहीं सकते। यदि आपको पासवर्ड स्वीकार करना चाहिए, तो आप और भी खराब स्थिति में होंगे।

आपका सबसे अच्छा शर्त है SSH लॉग को बाहर करने के लिए अपने लॉग विश्लेषण सॉफ़्टवेयर को कॉन्फ़िगर करना। फिर केवल SSH लॉग को देखने के लिए एक अलग उदाहरण चलाएँ, और असफल प्रयासों को फ़िल्टर करने के लिए घोषित का उपयोग करें। तुम भी कई असफल प्रयासों के साथ आईपी पते से सफल लॉगिन के लिए देखने के लिए स्क्रिप्ट लिख सकते हैं।

अपने SSH सर्वर की जांच करने से लोगों को रोकने का कोई तरीका नहीं है। Denyhosts, fail2ban, और iptables उदाहरण एक बिंदु तक काम करेंगे, लेकिन गलती से वैध उपयोगकर्ताओं को अवरुद्ध करने के अतिरिक्त खतरे के साथ। सबसे अच्छा तरीका यह है कि आप इसे चूसें और लॉग-एनालिसिस प्रक्रिया को स्वचालित करने की कोशिश करें ताकि आपको इसके बारे में सोचना पड़े।


0

जब आप कहते हैं कि आप अपने रेड हैट सर्वर पर अटैक्स में असफल लॉग इन कर रहे हैं, तो यह किस प्रकार का फ़ायरवॉल है, जो पीछे बैठा है और कितने लोगों को इसमें shh करने की आवश्यकता है। मेरा सुझाव है कि यदि आप अपने वास्तविक सर्वर के पास कहीं भी पहुंचने से पहले फ़ायरवॉल पर प्रयासों को सीमित करना चाहते हैं।

यदि आप ऐसे IP पतों की श्रेणी को प्रतिबंधित कर सकते हैं, जिनकी वैध रूप से पहुंच की आवश्यकता है, तो आपको आग की दीवार पर एक पहुंच सूची स्थापित करने में सक्षम होना चाहिए। यदि आप फ़ायरवॉल पर ट्रैफ़िक को प्रतिबंधित कर सकते हैं, तो मैं आपको सुझाव दूंगा कि आप नेटवर्क घुसपैठ सिस्टम को देखें, क्योंकि ऐसा लगता है कि आपका सर्वर किसी चीज़ से लक्षित हो रहा है।


0

अधिकांश वेबहोस्ट्स APF + BFD का उपयोग SSH लॉग-इन विफल आईपी-ब्लॉक के लिए करते हैं। आजकल CSF (कॉन्फ़िगेरवर फ़ायरवॉल) है जिसमें LFD नामक एक उपकरण शामिल है जो एक ही काम करता है, और अधिक, कुछ देशों से ब्लॉक आईपी सहित आप अपने सर्वर (जैसे कोरिया, चीन आदि) तक पहुंच नहीं चाहते हैं, जहां मेरे एसएसबी के 99% जांच होती है से उत्पन्न होने लगते हैं)।



0

क्या आपको एक से अधिक होस्ट में इस समस्या का समाधान करने की आवश्यकता है, आप OSSEC की जांच कर सकते हैं: http://www.ossec.net/main/ossec-altecture

यह आपको कई एजेंटों को एक केंद्रीकृत स्थान से कॉन्फ़िगर करने की अनुमति देगा स्वचालित रूप से जानवर-बल के हमलों का जवाब देने के लिए (किसी भी अन्य पैटर्न के साथ आप लॉग से निकाल सकते हैं)।

सॉफ्टवेयर का बहुत अच्छा टुकड़ा :)


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