अद्यतन खींचो, धक्का मत करो
जैसा कि आप पैमाने पर हैं, यह आपके सभी उत्पादों के लिए पुश अपडेट करने के लिए अक्षम होने जा रहा है ।
- आपको हर एक ग्राहक को ट्रैक करना होगा , जिनके पास प्रत्येक अलग फ़ायरवॉल कॉन्फ़िगरेशन हो सकता है।
- आपको ग्राहक के फ़ायरवॉल के माध्यम से आने वाले कनेक्शन बनाने होंगे, जिसके लिए पोर्ट-फ़ॉरवर्डिंग या इसी तरह के कुछ अन्य तंत्र की आवश्यकता होगी। यह आपके ग्राहकों के लिए सुरक्षा जोखिम है
इसके बजाय, अपने उत्पादों को समय-समय पर अपने अपडेट्स को 'पुल' करें, और फिर आप बढ़ते हुए अतिरिक्त क्षमता सर्वर-साइड जोड़ सकते हैं।
कैसे?
जैसा कि आपने सुझाया था, यह समस्या पहले ही हल हो चुकी है। यहाँ कई दृष्टिकोण हैं जिनके बारे में मैं सोच सकता हूँ।
- एप्ट का उपयोग करना : कस्टम पीपीए और स्रोतों की सूची के साथ अंतर्निहित एप्ट प्रणाली का उपयोग करें। मैं पीपीए कैसे सेटअप करूं?
- Con: जब तक आप लॉन्चपैड जैसी सार्वजनिक होस्टिंग सेवा का उपयोग नहीं करते हैं, तब तक अपना उपयुक्त PPA + पैकेजिंग सिस्टम स्थापित करना दिल के बेहोश होने के लिए नहीं है।
- ssh का उपयोग करना : प्रत्येक उत्पाद के लिए SSH सार्वजनिक कुंजी उत्पन्न करें, और फिर उस डिवाइस की कुंजी को अपने अपडेट सर्वर में जोड़ें। उसके बाद, बस आपके सॉफ्टवेयर
rsync
/ scp
फाइलों की आवश्यकता है।
- Con: आपके द्वारा भेजे गए प्रत्येक उत्पाद के लिए सभी सार्वजनिक कुंजियों को ट्रैक (और बैकअप!) करना है।
- प्रो : एक कच्चे डाउनलोड की तुलना में अधिक सुरक्षित है, क्योंकि केवल उन डिवाइस जो अपडेट तक पहुंच सकते हैं, वे सार्वजनिक कुंजी स्थापित होंगे।
कच्ची डाउनलोड + हस्ताक्षर जाँच :
- कहीं हस्ताक्षरित अद्यतन फ़ाइल पोस्ट करें (Amazon S3, FTP सर्वर, आदि)
- आपका उत्पाद समय-समय पर अद्यतन फ़ाइल के लिए जाँच करता है, और फिर हस्ताक्षर को डाउनलोड / सत्यापित करता है।
- Con : इस बात पर निर्भर करता है कि आप इसे कैसे तैनात करते हैं, फाइलें सार्वजनिक रूप से सुलभ हो सकती हैं (जो आपके उत्पाद को रिवर्स इंजीनियर और हैक करने में आसान बना सकती हैं)
ansible : सिस्टम कॉन्फ़िगरेशन को प्रबंधित करने के लिए Ansible एक बढ़िया उपकरण है। यह कठपुतली / रसोइये के दायरे में है, लेकिन एजेंट रहित है (अजगर का उपयोग करता है) और इसे बेकार माना जाता है। यदि आपके सॉफ़्टवेयर को परिनियोजित करने के लिए जटिल बैश स्क्रिप्ट की आवश्यकता होती है, तो मैं आपके अपडेट को करने के लिए इसे कम जटिल बनाने के लिए इस तरह से एक उपकरण का उपयोग करूँगा।
बेशक, ऐसा करने के अन्य तरीके हैं .. लेकिन यह मुझे एक महत्वपूर्ण बिंदु पर लाता है।
अपने अपडेट पर हस्ताक्षर / सत्यापन करें!
कोई फर्क नहीं पड़ता कि आप क्या करते हैं, यह जरूरी है कि आपके पास यह सुनिश्चित करने के लिए एक तंत्र है कि आपके अपडेट के साथ छेड़छाड़ नहीं की गई है। दुर्भावनापूर्ण उपयोगकर्ता आपके अपडेट सर्वर को उपरोक्त कॉन्फ़िगरेशन में से किसी में भी प्रतिरूपित कर सकता है। यदि आप अपने अद्यतन को मान्य नहीं करते हैं, तो आपका बॉक्स हैक करना और प्राप्त करना बहुत आसान है।
इसका एक अच्छा तरीका यह है कि आप अपनी अपडेट फाइलों पर हस्ताक्षर करें। आपको एक प्रमाणपत्र बनाए रखना होगा (या किसी को ऐसा करने के लिए भुगतान करना होगा), लेकिन इससे पहले कि आप उन्हें छेड़छाड़ किए गए अपडेट को अस्वीकार कर सकें, आप अपने प्रत्येक डिवाइस पर अपने फिंगरप्रिंट को स्थापित करने में सक्षम होंगे।
शारीरिक सुरक्षा
बेशक, अगर किसी के पास ग्राहक की तैनाती के लिए भौतिक पहुंच है, तो वे आसानी से सर्वर पर कब्जा कर सकते हैं। लेकिन कम से कम वे अन्य तैनाती पर हमला नहीं कर सकते! भौतिक सुरक्षा आपके ग्राहक की ज़िम्मेदारी है।
यदि आप एक पल के लिए कल्पना करते हैं कि अगर आप अपडेट के लिए एक बड़े OpenVPN नेटवर्क का उपयोग करते हैं तो क्या होगा ... वे तब वीपीएन पर हर उदाहरण पर हमला करने के लिए समझौता किए गए सर्वर का उपयोग कर सकते हैं
सुरक्षा
आप जो कुछ भी करते हैं, शुरुआत से ही सुरक्षा का निर्माण किया जाना चाहिए । यहाँ कोनों को न काटें - यदि आप ऐसा करते हैं तो आपको अंत में पछतावा होगा।
पूरी तरह से इस अद्यतन प्रणाली को सुरक्षित करना इस पद के दायरे से बाहर है, और मैं दृढ़ता से एक सलाहकार को काम पर रखने की सलाह देता हूं यदि आप या आपकी टीम का कोई व्यक्ति इस क्षेत्र में जानकार नहीं है। यह हर पैसे के लायक है।