सवाल सैकड़ों असफल एसएसएच लॉगिन


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


76
2018-06-02 16:18


मूल




जवाब:


आप एसएसएच पोर्ट में नए आने वाले कनेक्शन को रेट-सीमित करने के लिए 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" से प्राथमिकता देता हूं क्योंकि कोई अतिरिक्त सॉफ़्टवेयर स्थापित नहीं किया जाता है, और कर्नेल-मोड में पूरी तरह से होता है। यह "fail2ban" जैसी पार्सिंग लॉग फ़ाइलों को संभाल नहीं पाता है, लेकिन यदि आपकी समस्या केवल एसएसएच के साथ है, तो मैं कुछ उपयोगकर्ता-मोड का उपयोग नहीं करता जिसके लिए सॉफ़्टवेयर स्थापना की आवश्यकता होती है और यह अधिक जटिल होती है।


63
2018-06-02 16:25



मुझे इस समाधान को पसंद है और मैं आज रात की आग लगने के बाद, इसे आज रात में रखने की योजना बना रहा हूं। - MattMcKnight
यह हमलों को धीमा कर देता है और मैं इसकी अनुशंसा करता हूं, लेकिन वहां वहां स्कैनिंग बॉटनेट्स को वितरित किया जाता है, यह एक पैनसिया नहीं है। आपके खिलाफ वितरित स्कैन चलाने वाले बॉटनेट से अभी भी अमान्य लॉगऑन होंगे। जब आप अंदर जाना चाहते हैं तो एसएसएच बंदरगाह को दूरस्थ रूप से लाने के लिए कुछ प्रकार की "पोर्ट नॉकिंग" योजना से कम, आप इसके बारे में बहुत कुछ नहीं कर सकते हैं। - Evan Anderson
@ इवान के "पोर्ट दस्तक" सुझाव के लिए +1। कुछ जानकारी: linux.die.net/man/1/knockd । लेकिन इसे मैन पेज तरीके से न करें (यानी, iptables नियमों को जोड़ना / हटाना), लेकिन इसके बजाय उपयोग करें -m condition iptables इसके बजाय मैच। - pepoluan
आपको इन नियमों में 22 की आवश्यकता नहीं है ताकि वे केवल एसएसएच यातायात के लिए लागू हों? - clime
@clime - हाँ। विश्वास करना मुश्किल है कि यह 2 1/2 साल रहा है और कोई भी ध्यान नहीं दिया! अच्छी पकड़। - Evan Anderson


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


38
2018-06-02 16:20



मुझे sysadmin उपयोगकर्ता की तरफ से लॉग और अंक कमांड पढ़ने वाले टूल / स्क्रिप्ट पसंद नहीं हैं - asdmin
@asdmin, हाँ, खासकर जब वे इस तरह के एक अच्छा ट्रैक रिकॉर्ड है ... - maxschlepzig


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

http://denyhosts.sourceforge.net/

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


25
2018-06-02 17:16



मुझे नहीं पता कि लोग इसे क्यों उखाड़ फेंकते हैं; एसएसएच एक मानक बंदरगाह 22 पर है। इसका मतलब है कि जब आप एक विदेशी नेटवर्क पर होते हैं, तो आप आउटबाउंड फ़ायरवॉल के माध्यम से गैर मानक पोर्ट खोलने पर उन पर भरोसा नहीं कर रहे हैं। इस समस्या का असली समाधान उपरोक्त दस्तावेज है, या तो अपने इनबाउंड फ़ायरवॉल के माध्यम से दोहराए गए कनेक्शन की संख्या को प्रतिबंधित करें, या स्विच-ऑफ पासवर्ड लॉग इन करें। - Andrew Taylor
ओपनएसएसएच 6.7 बूंदें tcpwrappers समर्थन, जो denyhosts उपयोग करता है। - Zoredache


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

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

यहां बताया गया है कि आप इसे कैसे करते हैं:

/etc/hosts.deny में सभी एसएसएच कनेक्शन से इनकार करें:

# /etc/hosts.deny fragment
sshd:  all

ज्ञात सिस्टम को आईपी द्वारा /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 फ़ाइल तक पहुंचने वाले सिस्टम का आईपी पता जोड़ता है, जिसे एसएसडीडी द्वारा पढ़ा जाता है (कनेक्शन / समय पर /etc/hosts.allow द्वारा इसके समावेशन के कारण) ।

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

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

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


15
2018-06-02 17:07



इसे सुरक्षित बनाने के लिए, इस पृष्ठ को https पर चलाएं। - Robert Munteanu
यदि आप स्क्रिप्ट बदलते हैं तो यह "अनुमत अस्थायी आईपी पता" फ़ाइल की सामग्री को आउटपुट नहीं करता है, तो स्नीफ के लिए स्निफर के लिए कुछ भी नहीं होगा। फिर आप इसे https के बजाय http पर चला सकते हैं। - Barry Brown
"अनुमत अस्थायी आईपी पता" हमेशा अनुरोधकर्ता (यानी आपका) होता है। मुझे नहीं लगता कि यह एक तरह से या किसी अन्य मायने रखता है। एचटीपीएस का मतलब है कि अनुरोधित यूआरएल एन्क्रिप्ट किया गया है जिसका अर्थ यह है कि तार से इसे छीनना मुश्किल नहीं है। - David Mackintosh
यह काम नहीं करेगा यदि आप ऐसे नेटवर्क पर हैं जो HTTP कनेक्शन को प्रॉक्सी करता है लेकिन इंटरनेट पर आपका सीधा मार्ग एक अलग बहिष्कार के माध्यम से होता है। - Andrew Taylor
ओपनएसएसएच 6.7 बूंदें tcpwrappers समर्थन, जो आपके उत्तर में उपयोग किया जा रहा है। - Zoredache


आप देखना चाहते हैं denyhosts भी।

एफवाईआई: ओपनएसएसएच 6.7 बूँदें tcpwrappers समर्थन, जिसका मतलब है कि डेनिहोस्ट शायद नए इंस्टॉलेशन के लिए समाधान नहीं है।


9
2018-06-02 16:23





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


8
2017-08-17 22:08





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


2
2018-06-02 16:28



मूल पोस्टर ने कहा कि उसे मानक बंदरगाह पर दौड़ने की जरूरत है। - kbyrd
क्षमा करें, मुझे प्रश्नों को और सावधानी से पढ़ना चाहिए :) - disserman
मुझे सहमत होना है ... मेरे पास "एसएसएच" वैकल्पिक "बंदरगाहों" पर चल रहा है और यह लॉग में एक बड़ा अंतर बनाता है। कीड़े एक ईंट के रूप में स्मार्ट के बारे में हैं, इसलिए यह गूंगा स्वचालन स्क्रिप्ट के खिलाफ अच्छी तरह से काम करता है; मानव हमलावरों के खिलाफ इतना अच्छा नहीं है। फिर भी, लॉग की सुन्दर आवाज़ है शांति उनमे... - Avery Payne


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

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


2
2018-06-03 00:51