डेटाबेस सुरक्षा एक व्यापक विषय है जो पूर्व-खाली माप से अवांछित आगंतुकों को बाहर रखने तक फैला हुआ है। यहां तक कि अगर आप अपने MongoDB सर्वर को पूरी तरह से सुरक्षित करने में सक्षम होंगे, तब भी आप जानना चाहेंगे कि क्या किसी ने आपके सिस्टम में सेंध लगाने का प्रयास किया है। और अगर वे आपकी सुरक्षा को भंग करने और MongoDB फिरौती हैक स्थापित करने का प्रबंधन करते हैं, तो आपको पोस्टमार्टम के लिए या नए निवारक उपाय करने के लिए एक ऑडिट ट्रेल की आवश्यकता होगी। एक ऑडिट लॉग आपको लॉग इन करने का प्रयास करने वाले किसी भी व्यक्ति पर नज़र रखने और यह देखने में सक्षम करेगा कि उन्होंने आपके सिस्टम में क्या किया।
MongoDB एंटरप्राइज़ संस्करण में ऑडिट लॉग को सक्षम करने की क्षमता है, लेकिन सामुदायिक संस्करण में इस कार्यक्षमता का अभाव है। Percona ने MongoDB के लिए अपने MongoDB व्युत्पन्न Percona सर्वर में अपनी ऑडिट लॉगिंग कार्यक्षमता बनाई। MongoDB और Percona दृष्टिकोण एक दूसरे से भिन्न हैं और हम बताएंगे कि इन दोनों को कैसे कॉन्फ़िगर और उपयोग किया जाए।
MongoDB ऑडिट लॉगिंग
MongoDB ऑडिट लॉग सेट करना आसान है:JSON फ़ाइल में ऑडिट लॉगिंग को सक्षम करने के लिए, बस अपनी कॉन्फ़िग फ़ाइल में निम्न अनुभाग जोड़ें और MongoDB को पुनरारंभ करें:
auditLog:
destination: file
format: JSON
path: /var/lib/mongodb/auditLog.json
MongoDB गंतव्य के रूप में फ़ाइल, कंसोल और syslog का समर्थन करता है। फ़ाइल स्वरूपों के लिए दो विकल्प हैं:JSON और BSON। JSON में ऑडिट लॉग लाइनें इस तरह दिखती हैं:
{ "atype" : "authCheck", "ts" : { "$date" : "2017-02-15T22:20:08.322-0000" }, "local" : { "ip" : "127.0.0.1", "port" : 27017 }, "remote" : { "ip" : "127.0.0.1", "port" : 63357 }, "users" : [], "roles" : [], "param" : { "command" : "update", "ns" : "test.inserttest", "args" : { "update" : "preauth_case", "updates" : [ { "q" : { "createdByUserId" : -2 }, "u" : { "$set" : { "statusCode" : "Update" } }, "multi" : false, "upsert" : false } ], "ordered" : true } }, "result" : 0 }
उपरोक्त कॉन्फ़िगरेशन आपके सिस्टम के किसी भी उपयोगकर्ता द्वारा प्रत्येक क्रिया के लिए ऑडिट लॉग को सक्षम करेगा। यदि आपके पास उच्च संगामिति है तो यह आपके MongoDB क्लस्टर के प्रदर्शन को नाटकीय रूप से कम कर देगा। सौभाग्य से, उन ईवेंट को फ़िल्टर करने का विकल्प है जिन्हें लॉग किया जाना है।
ऑडिट लॉगिंग के लिए फ़िल्टर क्वेरी के प्रकार, उपयोगकर्ता/भूमिका पूछताछ या क्वेरी किए जा रहे संग्रह पर रखे जा सकते हैं। MongoDB पर ऑडिट लॉगिंग पर प्रलेखन कई उदाहरणों के साथ बहुत व्यापक और लंबा है। हम नीचे कुछ सबसे महत्वपूर्ण उदाहरण देंगे।
किसी विशिष्ट संग्रह के विरुद्ध प्रमाणीकरण:
filter: '{ atype: "authenticate", "param.db": "test" }'
कई प्रकार के ऑडिट के लिए लॉग इन करें:
filter: '{ atype: { $in [ "update", "delete" ]}, "param.db": "test" }'
किसी विशिष्ट संग्रह पर डालने/अपडेट/हटाने के लिए सभी प्रमाणीकरण जांच लॉग करें:
filter: '{ atype: "authCheck", "param.ns": "test.orders", "param.command": { $in: [ "find", "insert", "delete", "update", "findandmodify" ] } }'
जैसा कि आप देख सकते हैं कि फ़िल्टर काफी लचीले हो सकते हैं, और आप अपने ऑडिट ट्रेल के लिए आवश्यक संदेशों को फ़िल्टर करने में सक्षम होंगे।
मोंगोडीबी डीबीए बनें - मोंगोडीबी को प्रोडक्शन में लाना सीखें कि मोंगोडीबी को तैनात करने, मॉनिटर करने, प्रबंधित करने और स्केल करने के लिए आपको क्या जानने की जरूरत है मुफ्त में डाउनलोड करेंMongoDB ऑडिट लॉगिंग के लिए Percona सर्वर
MongoDB ऑडिट लॉगिंग के लिए Percona सर्वर JSON फ़ाइल तक सीमित है। अधिकांश उपयोगकर्ता केवल JSON फ़ाइलों में लॉग इन करेंगे, लेकिन यह स्पष्ट नहीं है कि Percona भविष्य में अन्य लॉगिंग सुविधाओं को जोड़ेगा या नहीं।
MongoDB के लिए Percona सर्वर के संस्करण के आधार पर, आपका कॉन्फ़िगरेशन भिन्न हो सकता है। लेखन के समय, सभी संस्करणों में निम्नलिखित सिंटैक्स होते हैं:
audit:
destination: file
format: JSON
path: /var/lib/mongodb/auditLog.json
हालाँकि इस कॉन्फ़िगरेशन अंतर को हाल ही में हल किया गया है, लेकिन अभी भी इसे जारी किया जाना है। रिलीज के बाद इसे फिर से MongoDB ऑडिटलॉग निर्देश का पालन करना चाहिए:
auditLog:
destination: file
format: JSON
path: /var/lib/mongodb/auditLog.json
Percona का प्रारूप थोड़ा अलग है:
{ "atype" : "authenticate", "ts" : { "$date" : { "$numberLong" : "1487206721903" } }, "local" : { "host" : "n3", "port" : 27017 }, "remote" : { "host" : "172.16.140.10", "port" : 50008 }, "users" : [ { "user" : "admin", "db" : "admin" } ], "params" : { "user" : "admin", "db" : "admin", "mechanism" : "SCRAM-SHA-1" }, "result" : 0 }
MongoDB सब कुछ लॉगिंग के विपरीत, Percona ने केवल महत्वपूर्ण कमांड को लॉग करना चुना। Percona ऑडिट प्लगइन के स्रोत से देखते हुए, निम्नलिखित प्रश्नों का समर्थन किया जाता है:प्रमाणीकरण, उपयोगकर्ताओं को बनाएं/अपडेट/हटाएं, भूमिकाएं जोड़ें/अपडेट करें/निकालें, डेटाबेस/इंडेक्स बनाएं/छोड़ें और अधिकांश महत्वपूर्ण व्यवस्थापक आदेश।
साथ ही MongoDB ऑडिट लॉग के लिए Percona सर्वर को फ़िल्टर करना MongoDB के समान मानक का पालन नहीं करता है। यह बिल्कुल स्पष्ट नहीं है कि सटीक फ़िल्टर सिंटैक्स और विकल्प क्या हैं क्योंकि Percona प्रलेखन इसके बारे में बहुत संक्षिप्त है।
बिना फ़िल्टर किए ऑडिटलॉग को सक्षम करने से आपको अपनी लॉग फ़ाइल में पर्याप्त से अधिक प्रविष्टियाँ मिलेंगी। यहां से आप फ़िल्टर को कम कर सकते हैं, क्योंकि यह लॉग प्रविष्टियों के JSON सिंटैक्स का अनुसरण करता है।
ऑडिट लॉग का उपयोग करना
अपने लिए इसे आसान बनाने के लिए, ऑडिट लॉग को लॉग एनालिसिस फ्रेमवर्क में फीड करना सबसे अच्छा हो सकता है। एक ईएलके स्टैक आपके विश्लेषण करने के लिए एक उत्कृष्ट वातावरण है और यह आपको अधिक विस्तृत स्तरों तक आसानी से ड्रिल करने में सक्षम बनाता है। फ़ील्ड मैपर का उपयोग करने से आप ELK के अंदर ऑडिट ट्रेल भी कर सकेंगे।
जैसा कि परिचय में वर्णित है, हम विभिन्न सुरक्षा उद्देश्यों के लिए ऑडिट लॉग का उपयोग कर सकते हैं। सबसे स्पष्ट बात यह है कि जब आपको पोस्टमार्टम के दौरान संदर्भ के रूप में इसकी आवश्यकता होती है। MongoDB ऑडिट लॉग वास्तव में क्या हुआ इसका विस्तृत अवलोकन प्रदान करता है। Percona ऑडिट लॉग में थोड़ी कम जानकारी होती है, लेकिन यह अधिकांश पोस्टमार्टम के लिए पर्याप्त होनी चाहिए। पोस्टमार्टम के लिए ऑडिट लॉग का उपयोग करना बहुत अच्छा है, हालांकि हम इस मुद्दे को पहले ही रोक देते।
ऑडिट लॉग का एक अन्य उद्देश्य रुझानों को होते हुए देखना है और आप एक निश्चित ऑडिट लॉग संदेश पर जाल बिछा सकते हैं। एक अच्छा उदाहरण (असफल) प्रमाणीकरण प्रयासों की दर की जांच करना होगा और यदि यह एक निश्चित सीमा से अधिक है, तो उस पर कार्रवाई करें। स्थिति के आधार पर, की गई कार्रवाई भिन्न हो सकती है। अनुरोध आने वाले आईपी पते को स्वचालित रूप से अवरुद्ध करने के लिए एक क्रिया हो सकती है, लेकिन दूसरे मामले में, आप उपयोगकर्ता से परामर्श कर सकते हैं कि पासवर्ड क्यों भूल गया था। यह वास्तव में उस मामले और परिवेश पर निर्भर करता है जिसमें आप काम कर रहे हैं।
एक अन्य उन्नत पूर्व-खाली माप होगा MongoDB को हनीपोट के रूप में उपयोग करना और अवांछित उपयोगकर्ताओं को पकड़ने के लिए ऑडिट लॉग का लाभ उठाना। बस MongoDB को बेनकाब करें और किसी को भी अपने MongoDB सर्वर से कनेक्ट करने दें। फिर ऑडिट लॉग का उपयोग यह पता लगाने के लिए करें कि उपयोगकर्ता क्या करेंगे यदि उन्हें अपनी सामान्य शक्तियों से परे चीजों को करने की अनुमति दी जाती है और यदि आवश्यक हो तो उन्हें ब्लॉक कर दें। ज़्यादातर इंसान कठिन रास्ते के बजाय आसान रास्ता अपनाते हैं, इसलिए हनीपोट एक हमले को टाल सकता है और हैकर अगले लक्ष्य की ओर बढ़ जाएगा।
निष्कर्ष
MongoDB एंटरप्राइज और MongoDB के लिए Percona सर्वर दोनों के लिए ऑडिट लॉग कैसे सेट करें, यह समझाने के अलावा, हमने यह भी बताया कि ऑडिट लॉग के अंदर लॉग किए गए डेटा के साथ आप संभावित रूप से क्या कर सकते हैं।
डिफ़ॉल्ट रूप से ClusterControl ऑडिट लॉग को सक्षम नहीं करेगा, लेकिन हमारे कॉन्फिग मैनेजर का उपयोग करके इसे क्लस्टर वाइड सक्षम करना अपेक्षाकृत आसान है। नया क्लस्टर परिनियोजित करने से पहले आप इसे कॉन्फ़िगरेशन टेम्प्लेट के अंदर भी सक्षम कर सकते हैं।
हैप्पी क्लस्टरिंग!