MySQL पर पाशविक बल के हमलों को रोकना?


9

मुझे MySQLd के लिए नेटवर्किंग चालू करने की आवश्यकता है, लेकिन हर बार जब मैं करता हूं, तो सर्वर को गुमनामी में मजबूर होना पड़ता है। कुछ औसत पासवर्ड अनुमान लगाने वाली स्क्रिप्ट सर्वर पर हथौड़ा मारना शुरू कर देती है, जिससे पोर्ट 3306 पर एक कनेक्शन खुल जाता है और हमेशा के लिए यादृच्छिक पासवर्ड की कोशिश करता है।

ऐसा होने से मैं कैसे रोक सकता हूँ?

SSH के लिए, मैं denyhosts का उपयोग करता हूं, जो अच्छी तरह से काम करता है। क्या MySQLd के साथ डेनिहोस्ट काम करने का एक तरीका है?

मैंने यह भी माना है कि पोर्ट MySQL बदल रहा है, लेकिन यह आदर्श से कम है और केवल एक स्टॉप-गैप समाधान है (क्या होगा अगर वे नए पोर्ट की खोज करते हैं?)

क्या किसी के पास कोई दूसरा विचार है?

यदि यह एक अलग बनाता है, तो मैं FreeBSD 6.x पर MySQL 5.x चला रहा हूं।

जवाबों:


9

मैं MySQL के लिए किसी भी डेनिहोस्ट जैसे सॉफ्टवेयर पैकेज के बारे में नहीं जानता, लेकिन मेरे पास कुछ समाधान हैं:

  • लॉगिन को विशिष्ट आईपी पते तक सीमित करें। सभी होस्ट सर्वर से कनेक्ट करने के लिए अनुमति देने के लिए% का उपयोग न करें।
  • और भी सुरक्षित, iptables सेट करें केवल अधिकृत IP पतों से 3306 तक पहुँच की अनुमति दें।
  • अपने ट्रैफ़िक को बॉक्स में ssh के साथ टनल करें फिर लोकलहोस्ट के माध्यम से कनेक्ट करें
  • Mysql एक्सेस लॉग का विश्लेषण करने और फ़ायरवॉल पर किसी भी जानवर बल प्रयासों को ब्लॉक करने के लिए Denyhosts या BFD स्क्रिप्ट को संशोधित करें

संपादित करें :

अपनी टिप्पणी का उत्तर देने के लिए, यह प्रयास करें :

iptables -A INPUT -p tcp -s 202.54.1.50 --sport 1024:65535 -d 202.54.1.20 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 202.54.1.20 --sport 3306 -d 202.54.1.50 --dport 1024

जहाँ .20 आपका MySQL है और .50 आईपी कनेक्ट करने वाला रिमोट है।


कुछ नोट: मैं केवल IP पतों के सेट पर 3306 पोर्ट की पहुंच कैसे प्रतिबंधित कर सकता हूं? बस MySQL उपयोगकर्ताओं को प्रतिबंधित करना काम नहीं करता है, क्योंकि दूरस्थ मशीनें तब भी कनेक्ट हो सकती हैं और पासवर्ड के लिए ब्रूट-फोर्स कर सकती हैं। SSH सुरंगें अंत-उपयोगकर्ता के लिए स्थापित करने के लिए कुछ हद तक अनजान लगती हैं ... क्या आपके पास ऐसा करने का एक IPTables उदाहरण है?
कीथ पामर जूनियर

2

1: पोर्ट को 3306 से बदलें। बेहतर सुरक्षा के कारण नहीं, बल्कि झूठे लॉगइन हमलों से निपटने के लिए सर्वर का भार उठाना

2: SSL प्रमाणपत्र बनाएं और इसे अपने MySQL सर्वर पर सक्षम करें (इसे वैसे भी अपने क्लाइंट-सर्वर कनेक्शन को एन्क्रिप्ट करना होगा)

3: एक या अधिक क्लाइंट सर्टिफिकेट बनाएं (सभी क्लाइंट्स के पास सर्टिफिकेट होना चाहिए और क्लाइंट-सॉफ्टवेयर को इसे इस्तेमाल करने के लिए कॉन्फ़िगर करना होगा)। यदि आपके ग्राहक हैं । नेट आपको क्लाइंट प्रमाणपत्र को pkcs12 प्रारूप में बदलने की आवश्यकता है, लेकिन यह आसानी से हो जाता है, इस गाइड को देखें ..

4: X509 क्लाइंट प्रमाण पत्र की आवश्यकता के लिए MySQL उपयोगकर्ता खाते को सेट करें, फिर एक हमलावर को लॉगिन क्रेडेंशियल्स और क्लाइंट प्रमाण पत्र की आवश्यकता होती है (आप क्लाइंट प्रमाणपत्र पर पासवर्ड भी डाल सकते हैं, फिर हमलावर को भी इसकी आवश्यकता है)।

मैंने इस गाइड का उपयोग प्रमाण पत्र और मुख्य फाइलें बनाने के लिए किया था लेकिन कई गाइड हैं।

मैं अपने एसएसएच कनेक्शन का उपयोग केवल प्रशासन के उद्देश्य के लिए अपने लिनक्स बॉक्स तक पहुंचने के लिए करना चाहता हूं, न कि क्लाइंट एक्सेस के लिए।


जवाब के लिए धन्यवाद। मैंने इस गाइड का उपयोग # 2, 3 और 4 करने के लिए किया: digitalocean.com/community/tutorials/…
ofri cofri

1

MySQL प्रॉक्सी का उपयोग करके, आप एक छोटी सी LUA स्क्रिप्ट लिख सकते हैं जो एक उपयोगकर्ता / पास संयोजन लेता है, लेकिन लॉगिन को संसाधित करने के लिए X सेकंड की प्रतीक्षा करता है यदि कनेक्शन अनुरोध एक अप्रयुक्त आईपी सीमा से आता है।

आप तीन असफल प्रयासों के बाद IP रेंज को ब्लैकलिस्ट करने के लिए LUA स्क्रिप्ट में थोड़ा अतिरिक्त तर्क जोड़ सकते हैं।

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


+1 अभी तक MySQL प्रॉक्सी के लिए एक और प्रयोग :)
एंडी

0

केवल सुरक्षित मेजबानों से mysqld पोर्ट पर एक्सीडेंट की अनुमति क्यों नहीं दी जाती?


मैंने इस पर विचार किया, लेकिन इसका मतलब है कि मुझे 1,000+ ग्राहकों के लिए आईपी पते में बदलाव की निगरानी करनी होगी। यह बट में एक विशाल दर्द होगा ... मैं वैसे भी यह कैसे कर सकता हूं? यह उन्हें MySQL के भीतर लॉक करने में मदद नहीं करता है, क्योंकि वे अभी भी MySQL सर्वर से कनेक्ट कर सकते हैं, बस वास्तव में किसी भी डेटाबेस का चयन नहीं करते ...
कीथ पामर जूनियर

1
ऊपर दिए गए डगर को उद्धृत करते हुए: "mysql एक्सेस लॉग का विश्लेषण करने और फ़ायरवॉल पर किसी भी ब्रूट बल के प्रयासों को अवरुद्ध करने के लिए Denyhosts या BFD स्क्रिप्ट को संशोधित करें" सबसे अच्छा विचार लगता है या कुछ हाइरोग्लिफ़िक पासवर्ड का उपयोग करें :)
गुणांक

0

हालांकि यह "वास्तविक" उत्तर नहीं है - मुझे नहीं पता कि आपको इसे बाहरी दुनिया में सीधे उजागर करने की आवश्यकता क्यों है।

क्या आप उस बॉक्स पर ssh को सक्षम नहीं कर सकते हैं, और db इंजन तक पहुँचने के लिए टनलिंग का उपयोग कर सकते हैं?

या इसे एक्सेस करने के लिए कोई अन्य वीपीएन समाधान (ओपनवैप्न दिमाग में आता है)।


0

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


-1 अस्पष्टता से सुरक्षा के लिए
thepocketwade

@thepocketwade - जिसके कारण मैंने कहा कि यह समस्या का वास्तविक समाधान नहीं है। लेकिन यह अभी भी मददगार हो सकता है।
एरिक पेट्रोलेजे

0

मेरा मानना ​​है कि कनेक्शन को फ़ायरवॉल किया जाना चाहिए: तेज और अच्छा। Iptables के लिए बहुत सारे ट्यूटोरियल हैं और जो कुछ भी :)

इसके अलावा आप क्लाइंट होस्ट पर एक क्रोनजॉब स्थापित कर सकते हैं जो फ़ायरवॉल को ज्ञात होस्ट्स को ब्लॉक करने से रोकने के लिए एक सर्वर पर चलेंगे।


0

सुरंगों के लिए ssh का उपयोग करना सबसे अच्छा होगा, लेकिन आप den2hosts के बजाय fail2ban का उपयोग करने का प्रयास कर सकते हैं, क्योंकि मुझे लगता है कि इसका उद्देश्य अधिक अलग-अलग ऐपणों की निगरानी करना है, इसलिए इसे mysql लॉग को जोड़ने में समस्या नहीं होनी चाहिए।


0

अपने my.cnf-ini [mysqld] अनुभाग पर विचार करने के लिए सुझाव

max_connect_errors=10  # to limit hacker/cracker attempts to guess a password.

90 सेकंड में सैकड़ों प्रयासों से बचने के लिए। 10 प्रयासों में उन्हें काट दें।

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

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