10 Gb / s पर स्ट्रीम एन्क्रिप्शन? हां। समानांतर में

पिछले कुछ दशकों में, आईटी उद्योग ने अपने विकास में एक बड़ी सफलता हासिल की है - बहुत सारी नई प्रौद्योगिकियां, सेवाएं, प्रोग्रामिंग भाषाएं आदि सामने आई हैं। लेकिन सबसे महत्वपूर्ण बात यह है कि आईटी प्रौद्योगिकी उपयोगकर्ताओं की संख्या एक विशाल पैमाने पर बढ़ी है। यह ट्रैफ़िक की मात्रा पर विशेष रूप से ध्यान देने योग्य बन गया - Google, फेसबुक, ट्विटर जैसी बड़ी सेवाएं ट्रैफ़िक की पेटाबाइट्स। इसी समय, हर कोई जानता है कि उनके पास किस तरह के डेटा केंद्र हैं। हालाँकि, मैं अब क्लाउड प्रौद्योगिकियों और NoSQL समाधानों के बारे में बात नहीं करने जा रहा हूं। मैं इस पूरी स्थिति को दूसरी तरफ से देखना चाहता हूं, अर्थात् सुरक्षा के दृष्टिकोण से।

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


इस समय, आप यह सोचना शुरू करते हैं कि इस डरावनी स्थिति से खुद को कैसे बचाया जाए, और कुछ आईटी परामर्श के बहादुर लोग आपको बताते हैं: हर जगह एक घुसपैठ पहचान प्रणाली, फ़ायरवॉल, आईपीएस और एंटीवायरस स्थापित करें। उचित प्रश्न के लिए, "इनमें से कितने टुकड़ों की हमें ज़रूरत है?", वे आपको ट्रैफ़िक के साथ आपके तार की मोटाई के आधार पर 10/20/100/500 नंबर कहते हैं।
और यह वह जगह है जहां सवाल उठता है, जिसके बारे में मैं बात करना चाहता हूं: इसे बचाने के लिए यातायात के प्रसंस्करण को कैसे समानांतर किया जाए? यह प्रश्न कई कारणों से बहुत महत्वपूर्ण है:

1. सुरक्षा उस नींव का एक अभिन्न हिस्सा है जिस पर आपका सिस्टम / सेवा / कुछ भी आधारित होना चाहिए।
2. सुरक्षा तंत्र बहुत संसाधन-गहन हैं (होम कंप्यूटर पर कैसपर्सकी याद रखें)।
3. सिक्योरिटी मैकेनिज्म को कैशिंग, एक्जीक्यूशन प्रीडिक्शन आदि जैसी चीजों की मदद से किसी भी तरह से मुश्किल से बढ़ाया जा सकता है।

एक ओर, हमारे जीवन को बेहतर बनाने के लिए, हम सुरक्षात्मक उपकरणों की उत्पादकता को बढ़ाने के लिए नए तरीकों के साथ आ सकते हैं। दूसरी ओर, हम थोड़ा बहुत फिर से बना सकते हैं और सुरक्षा सुविधाओं को छोड़ सकते हैं, और उन्हें सुधारने के बजाय, सुरक्षा सुविधाओं के साथ वितरित ट्रैफ़िक प्रसंस्करण को व्यवस्थित करने के तरीके के साथ आ सकते हैं।

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

• आप आसानी से और आसानी से सुरक्षा सेटिंग्स को फिर से कॉन्फ़िगर करना चाहते हैं (फ़ायरवॉल के नियमों को बदलें, वीपीएन आदि में आईपी पते जोड़ें);
• आप सुरक्षा उपकरण के अन्य उदाहरण को सावधानी से जोड़ना चाहते हैं;
• आपके पास एक या, इससे भी बदतर, सुरक्षात्मक उपकरण गिरने के कई उदाहरण हैं।

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

क्रॉसबीम एक प्लेटफॉर्म है जो सुरक्षा सुविधाओं के साथ एंड-टू-एंड ट्रैफिक प्रोसेसिंग के लिए तैयार है। यह प्रदान करता है:
• शक्तिशाली हार्डवेयर कॉन्फ़िगरेशन;
• यातायात के वितरण और संतुलन के लिए तंत्र;
• अपने स्वयं के अनुप्रयोगों को विकसित करने के लिए उपकरण।
छवि
मंच में निम्नलिखित घटक होते हैं:

1. हार्डवेयर
1) चेसिस
2) बिजली की आपूर्ति और वेंटिलेशन
3) मॉड्यूल:
मैं। नेटवर्क (NPM - नेटवर्क प्रोसेसिंग मॉड्यूल)
ii। अनुप्रयोग (APM - अनुप्रयोग प्रसंस्करण मॉड्यूल)
iii। नियंत्रण (सीपीएम - नियंत्रण प्रसंस्करण मॉड्यूल)

2. सॉफ्टवेयर
1) XOS ऑपरेटिंग सिस्टम
2) वर्चुअल एप्लिकेशन प्रोसेसर - VAP (वर्चुअल एप्लिकेशन प्रोसेसर)
3) अनुप्रयोग

यातायात प्रसंस्करण प्रक्रिया को निम्नानुसार दर्शाया जा सकता है:

छवि

इनकमिंग ट्रैफ़िक नेटवर्क मॉड्यूल पोर्ट (NPM) पर आता है, जो इसे एप्लिकेशन मॉड्यूल (APM) के बीच वितरित करता है। संक्षेप में, यह निम्नानुसार किया जाता है:
1. NPM IP पैकेट हेडर को पार्स करता है।

2. शीर्ष लेख को हेडर से निकाला जाता है:
एक। स्रोत आईपी पता
ख। गंतव्य आईपी
सी। स्रोत टीसीपी पोर्ट
घ। गंतव्य टीसीपी पोर्ट

और एक नलिका में बनते हैं। सभी पैकेटों में समान ट्यूपल होते हैं जिन्हें ट्रैफ़िक प्रवाह कहा जाता है।

3. तथाकथित टपल में खोज की जाती है। सक्रिय नेटवर्क प्रवाह की तालिका (AFT - सक्रिय प्रवाह तालिका)। खोज परिणाम ट्रैफ़िक को संभालने के लिए डिज़ाइन किया गया एक एपीएम नंबर है।

4. यदि खोज सफल रही, तो पैकेट को उपयुक्त एपीएम में भेजा जाता है।

5. यदि खोज सफल नहीं थी, तो एनपीएम सीपीएम की ओर मुड़ जाता है, जो पूरे प्लेटफॉर्म के कॉन्फ़िगरेशन को संग्रहीत करता है, जिससे यह एएफटी में एक नई प्रविष्टि जोड़ता है।
इस तरह के एक एल्गोरिथ्म हमें पहली बार में उठाए गए प्रश्न को हल करने की अनुमति देता है: इसकी सुरक्षा के लिए यातायात के प्रसंस्करण को कैसे समानांतर किया जाए। उसी समय, ध्यान दें कि ट्रैफ़िक वितरण की यह विधि लोड को संतुलित करने के लिए पर्याप्त चयनात्मक है, लेकिन साथ ही यह कई कंप्यूटिंग नोड्स में उपयोगकर्ता सत्रों को तेज करने की अनुमति नहीं देता है।

इसके अलावा, प्लेटफ़ॉर्म टूल हमें इसकी अनुमति देते हैं:
• आसानी से और अपुष्ट सुरक्षा सेटिंग्स, के रूप में यह एक बार एक स्थान पर किया जाता है और सभी उदाहरणों पर लागू होता है;
• सुरक्षात्मक उपकरणों के एक या अधिक उदाहरणों के गिरने की स्थिति में, स्वचालित रूप से सुरक्षात्मक उपकरणों (एपीएम) के अन्य उदाहरणों पर लोड को फिर से वितरित करना।

सामान्य तौर पर, अच्छी कार्यक्षमता के साथ लोहे का एक बहुत ही दिलचस्प टुकड़ा।

जब वह हमारे पास आई, तो हमने फैसला किया कि इस तरह की चीज के लिए बेकार रहना बेकार है और इसके लिए विशेष रूप से एक क्रिप्टोग्राफिक गेटवे विकसित किया है। हमारी समझ में, यह एक ऐसा कार्यक्रम है, जिसे हमारे डेटा सेंटर के सामने रखा गया है और:
• डेटा सेंटर में जाने वाले ट्रैफ़िक के लिए पैकेट को डिक्रिप्ट करता है, जिससे सर्वर को संसाधन-गहन कंप्यूटिंग से उतारना पड़ता है
• डेटा सेंटर से आने वाले ट्रैफ़िक के लिए पैकेट को एन्क्रिप्ट करता है, जिससे ग्राहकों को जानकारी का सुरक्षित हस्तांतरण सुनिश्चित होता है
स्पष्टता के लिए, मैं एक आरेख दूंगा

छवि

यह प्रवेश द्वार निम्नलिखित कार्य करता है:
• एपीएम द्वारा आने वाले यातायात पैकेट वितरित करता है;
• GOST 28147-89 के एल्गोरिथ्म के अनुसार प्रत्येक पैकेट की सामग्री को एन्क्रिप्ट करता है;
• पैकेट को भेजता है जहां यह जा रहा था;
• विपरीत दिशा में जा रहे पैकेट के लिए, यह वही करता है, केवल सामग्री को डिक्रिप्ट कर रहा है।
उसी समय, प्रत्येक क्लाइंट (वास्तव में, प्रत्येक आईपी पते के लिए) की अपनी कुंजी होनी चाहिए।

हमने सामान्य CentOS पर विकास शुरू किया, क्योंकि APM पर जो कताई होती है, वह स्ट्रिप डाउन और पैचेड आरएचईएल से ज्यादा कुछ नहीं है। CentOS के तहत हमारे क्रिप्टो गेटवे को लिखा और डिबेट किया, हमने क्रॉसबीम को हस्तांतरण शुरू कर दिया। एसडीके, प्रलेखन और क्रॉसबीम के डेवलपर्स के साथ संचार होने के बाद, हमने इस पर लगभग आधा साल बिताया। हस्तांतरण का सार है कि एप्लिकेशन को प्लेटफॉर्म के साथ संचार करने के लिए एक इंटरफ़ेस लिखना है और ट्रैफ़िक के पुनर्वितरण के लिए संभावनाओं को ध्यान में रखना है।
पहली समस्या जिसका हमें सामना करना पड़ा है। एपीएम पर कोई gdb नहीं है, इसलिए, हमें नहीं पता था कि पहली बार में कैसे डिबग किया जाए। लेकिन कड़ी मेहनत और सावधानी से एपीएम को देखते हुए, हमने एक COM पोर्ट देखा। फिर समाधान बहुत जल्दी आया - COM पोर्ट के माध्यम से दूरस्थ डिबगिंग। हम लिनक्स एपीएम छवि के लिए कर्नेल पैरामीटर सेट करते हैं, जिसमें kdb के माध्यम से डिबगिंग शामिल है - यह काम किया है। वैसे, आप हमारे सहयोगियों (http://habrahabr.ru/company/neobit/blog/141067) से डिबगिंग के बारे में पढ़ सकते हैं
दूसरी समस्या प्रोसेसर कोर पर भार का समान वितरण था। प्रारंभ में, क्रिप्टो-गेटवे एक कर्नेल मॉड्यूल था जो नेटफिल्टर सबसिस्टम में एक हुक सेट करता था। जब हमने ट्रैफ़िक भेजना शुरू किया, तो हमने देखा कि एपीएम पर उपलब्ध 16 कोर में से एक 99% भरी हुई है, जबकि बाकी बेकार हैं। एक ही समय में, पैकेट नुकसान केवल निर्दयी थे। इसी के साथ जुड़ा था। लिनक्स कर्नेल में नेटफिल्टर हुक हैंडलर के लिए कॉल नेटवर्क इंटरफेस सॉफ्टवेयर इंटरप्ट के माध्यम से किया जाता है। आप यह देखने के लिए / खरीद / बाधित कर सकते हैं कि क्या यह आपके सिस्टम का मामला है।

छवि

इस समस्या को हल करने के लिए 2 विकल्प हैं:

1. कर्नेल पैरामीटर SMP_AFFINITY को कॉन्फ़िगर करना।

2. CONFIG_HOTPLUG_CPU पैरामीटर के साथ लिनक्स कर्नेल का पुनर्निर्माण करें (चूंकि कर्नेल संस्करण 2.6.24.3)।

पहले मामले में, एक बिट मास्क फ़ाइल / proc / irq / <इंटरप्ट नंबर> / smp_affinity को लिखा जाता है , जिसमें इकाइयां इस रुकावट को संसाधित करने में शामिल कर्नेल के अनुरूप होती हैं। हालांकि, ज्यादातर मामलों में, यह समाधान केवल आपको एक कोर से दूसरे में लोड को फिर से विभाजित करने की अनुमति देता है। यानी smp_affinity को मास्क 4 (000100) लिखते समय, तीसरे कोर पर इंटरप्ट को संसाधित किया जाता है। हालांकि, जब मुखौटा 7 (000111) की रिकॉर्डिंग की जाती है, तो केवल पहले कोर पर इंटरप्ट प्रोसेसिंग की जाती है। इस प्रकार, यह समाधान केवल बहुत सीमित हार्डवेयर सेट के लिए लागू है। दूसरा विकल्प अधिक सार्वभौमिक है, लेकिन यह हमेशा लागू नहीं होता है - कई निर्माता अपने हार्डवेयर के लिए लिनक्स कर्नेल को दृढ़ता से संशोधित करते हैं, पुनर्निर्माण के लिए स्रोत कोड प्रदान किए बिना। और उनके बीच क्रॉसबीम। मुझे क्रॉसबीम डेवलपर्स से थोड़े गुप्त ज्ञान को लागू करना था - उन्होंने क्रॉसबीम के अनुरूप एक ड्राइवर लिखा, जो कि लिनक्स कर्नेल में पैकेज आने से पहले ही ट्रैफ़िक की प्रारंभिक प्रक्रिया करता था।
नतीजतन, हम एक प्रदर्शन को प्राप्त करने में कामयाब रहे, जिसने हमें 0.95 Gb / s की गति से GOST 28147-89 के अनुसार स्ट्रीमिंग एन्क्रिप्शन को बहुत आश्चर्यचकित किया। एक एपीएम पर। और यह कई चीजों के कारण प्राप्त किया जाता है: पहला, नेटवर्क ट्रैफिक के प्रसंस्करण को अधिकतम करके, दूसरा, कोर भर में लोड वितरित करके, और तीसरा, शक्तिशाली हार्डवेयर प्लेटफॉर्म के कारण।
यदि हम ट्रैफ़िक को समानांतर करने की संभावनाओं को याद करते हैं, तो हम कह सकते हैं कि एन्क्रिप्शन गति एपीएम के अतिरिक्त के साथ लगभग रैखिक रूप से बढ़ जाती है। यही है, यदि आप 3 एपीएम में हमारे अधिकतम कॉन्फ़िगरेशन पर एप्लिकेशन चलाते हैं, तो आप इसे लगभग 3 जीबी / एस की गति से एन्क्रिप्ट कर सकते हैं। यदि आप अमीर हैं, तो आप सबसे अच्छे मॉडल खरीद सकते हैं और 10 जीबी / एस तक बना सकते हैं। बुरा नहीं है, है ना?
वैसे, ये आंकड़े प्रयोगात्मक रूप से प्राप्त होते हैं, और सैद्धांतिक नहीं, जैसा कि अधिकांश निर्माता करते हैं। हमने एक साथ एक स्टैंड लगाया जिसमें 5 Gb / s का भार उत्पन्न हुआ। HTTP सर्वर जिसके लिए हमने पैकेजों को डिक्रिप्ट किया, हमने nginx लिया, इसकी सेटिंग्स, लिनक्स नेटवर्क स्टैक की सेटिंग्स, और nginx को 5 Gb / s की गति से HTML-static देने के लिए मजबूर किया।

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

Source: https://habr.com/ru/post/In144565/


All Articles