डॉकर कंटेनर के नेटवर्क एक्सेस को प्रतिबंधित करना


14

मैं एक एसएफटीपी केवल डॉकर कंटेनर बनाने की प्रक्रिया में हूं , जिसका उपयोग कई लोग अपने स्वयं के chrootएड एनवायरनमेंट में फाइलों को अपलोड करने और प्रबंधित करने के एकमात्र उद्देश्य के लिए करेंगे ।

कागज पर, यह बहुत सुरक्षित है: मैं bashलॉगिन के हर रूप को अक्षम कर दूंगा , और मैं इसमें कोई अन्य प्रक्रिया नहीं चलाऊंगा। हालाँकि मैं इसे थोड़ा और सख्त करना चाहूंगा:

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

चीजों को स्पष्ट करने के लिए: मुझे पता है कि बाहरी दुनिया को मेरे कंटेनर तक पहुंचने से कैसे रोका जाए - मैं आने वाले iptablesनियमों को स्थापित कर सकता हूं , और मैं अपने docker रन कमांड में केवल SFTP पोर्ट को उजागर कर सकता हूं।

हालाँकि, मैं कंटेनर के अंदर भागते समय निम्न कमांड (उदाहरण के रूप में) को विफल करना चाहूंगा :

curl google.com

मेरा इरादा क्षति की मात्रा को कम करना है जो एक हैक किए गए कंटेनर कर सकता है (स्पैम ईमेल भेजने के लिए उपयोग नहीं किया जा सकता है, आदि)।


कुछ लंबित सुविधा अनुरोध हैं जो इस प्रकार के सामान के साथ मदद कर सकते हैं। # 6743 जो आपको कंटेनर के शुरू होने से पहले होस्ट पर iptables नियम बनाने देगा, और # 6982 जो कंटेनर के शुरू होने पर आपको iptables नियम जोड़ने देगा।
पैट्रिक

डॉकटर आपको कंटेनर के नेटवर्क इंटरफेस पर पूर्ण नियंत्रण देता है; देखें कि डॉकटर एक कंटेनर को कैसे नेटवर्क करता है । उदाहरण के लिए, --net=noneध्वज को स्थापित docker runकरने से सभी बाहरी नेटवर्क एडेप्टर अक्षम हो जाएंगे, जिससे आप अपना स्वयं का नेटवर्क जोड़ सकते हैं और नेटवर्क ट्रैफ़िक नियमों को अनुकूलित कर सकते हैं।
10

जवाबों:


4

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


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

iptables -A FORWARD -s lo.cal.sub.net -d con.tai.ner.ip -j ACCEPT
iptables -A FORWARD -s con.tai.ner.ip -d lo.cal.sub.net -j ACCEPT
iptables -A FORWARD -s ! lo.cal.sub.net -d con.tai.ner.ip -p tcp --dport sftp -j ACCEPT
iptables -A FORWARD -s con.tai.ner.ip -d ! lo.cal.sub.net -p tcp --sport sftp -j ACCEPT
iptables -A FORWARD -s con.tai.ner.ip -m state --state related,established -j ACCEPT
iptables -A FORWARD -s con.tai.ner.ip -j DROP

पहले दो नियम मेजबान और कंटेनर के बीच पहुंच के लिए हैं। तीसरा नियम कहता है (मोटे तौर पर) कि SFTP के लिए होस्ट सबनेट का नेतृत्व करने वाला कुछ भी हमारे द्वारा ठीक नहीं है; चौथा आउटबाउंड नियम है जो मूल रूप से तीसरे से जुड़वा है; पांचवां नियम एक कैच-ऑल है (यदि संबंधित अन्य पोर्ट उपयोग किए गए हैं), हालांकि इसकी आवश्यकता नहीं होनी चाहिए, आप शायद इसे हटा सकते हैं; अंतिम नियम वह जादू है जो मेजबान सबनेट के अलावा किसी अन्य चीज तक पहुंच को रोकता है। क्योंकि पहुँच पहले कुछ नियमों में दी गई है, यह कभी भी ट्रिगर नहीं होगा जब तक कि पूर्ववर्ती नियमों में से कोई भी लागू नहीं होता है, उस स्थिति में हम कह रहे हैं "हमें परवाह नहीं है कि आप क्या चाहते हैं, आप उस चीज से मेल नहीं खाते जिसके लिए आप स्वीकृत हैं।" इसलिए आप यहां से वहां नहीं पहुंच सकते हैं ”। बाहर से आने वाले ट्रैफिक को 3rd और 4th नियमों से संतुष्ट किया जाएगा।


दिलचस्प गिरावट, यह देखते हुए कि कंटेनर की सामग्री में पूर्ण विश्वास के बिना कंटेनर के अंदर यह प्रदर्शन करने का कोई तरीका नहीं है
एवरी पायने

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

(आह) मैं वास्तव में सिर्फ 6 घंटे की नींद के दौरान अपने जवाब दोबारा नहीं लिखूंगा। मैंने दिए गए उत्तर में संशोधन किया है।
एवेनी पायने

डॉकर (डिफ़ॉल्ट सबसे समर्थित कॉन्फ़िगरेशन मान रहा है) अपने यूजरस्पेस tcp प्रॉक्सी के माध्यम से होस्ट पर कंटेनर पोर्ट प्रकाशित करता है, इसलिए मुझे यकीन नहीं है कि अगर अग्रेषण श्रृंखला sftp सेवा से संबंधित नियमों के लिए भी प्रासंगिक है।
तरणाय कालमन

लगता है कि मुझे एक परीक्षण वातावरण स्थापित करना होगा और डॉकर को बाहर करना होगा, और देखना होगा कि इसमें क्या शामिल है। ऐसा लगता है कि आप सुझाव दे रहे हैं कि नियमों को आगे से इनपुट में स्थानांतरित किया जाना चाहिए।
एवरी पायने

1

यह वास्तव में एक विशेष समस्या नहीं है। ऐसे कुछ तरीके हैं जिनसे आप इसे हल कर सकते हैं।

  1. iptablesइनबाउंड और संबंधित / स्थापित ट्रैफ़िक को अनुमति देने के लिए राज्य संबंधी नियमों का उपयोग करें और फिर सब कुछ ब्लॉक करें।

  2. ProFTPD जैसी केवल एक सेवा का उपयोग करें जो शेल को चलाने में असमर्थ है।

सामान्य तौर पर, यदि आप अपने उपयोगकर्ताओं को शेल प्राप्त करने की अनुमति नहीं देते हैं और उन्हें कंटेनर के भीतर से प्रोग्राम चलाने की अनुमति नहीं देते हैं, तो आपको इसके बारे में चिंता करने की आवश्यकता नहीं है।


1.) डॉकर डिफ़ॉल्ट रूप से अपने आप ही कुछ नियम निर्धारित करता है, और उन्हें जोड़कर कुछ भी नहीं करेगा क्योंकि पहले से ही कैच-ऑलिश नियम है, और प्रीपेडिंग मौजूदा कार्यक्षमता (जैसे लिंक) को तोड़ देगा यदि कोई सावधान नहीं है, तो यह वह तुच्छ नहीं है। 2.) प्रश्न का उत्तर नहीं देता है। और ओपी ने पहले ही इसे ऐसे ही सेट कर दिया। साथ ही, मेरे उपयोग का मामला अलग है।
तर्ने कल्मान 23

0

यह सिर्फ एक त्वरित मंथन है, और मैंने अभी तक इसका परीक्षण नहीं किया है। आप इसे उत्पादन में ले जाने से पहले लैब में पशु चिकित्सक से मिलवाना चाहेंगे।

गैर-SSH (SFTP) और वेब पोर्ट पर आउटबाउंड ट्रैफ़िक को रोकने के लिए, आप IPTABLES या किसी अन्य Layer4 फ़ायरवॉल के माध्यम से DROP या REJECT ट्रैफ़िक के माध्यम से पॉलिसी लागू करना चाह सकते हैं, डॉक कंटेनरों द्वारा उपयोग किए गए सेगमेंट से 0.0.0.0/0 तक के लिए उपयोग किए गए गंतव्य को छोड़कर पोर्ट TCP22 है।

जाने-अनजाने स्थानों-पर-वेब समस्या को हल करने के लिए, आप एक फ़िल्टरिंग / कैशिंग प्रॉक्सी का एक उदाहरण, जैसे स्क्वीड या ब्लूकैट, जो इंटरफ़ेस docker0 पर सुन रहा है और जिसका उपयोग कर रहा है, का एक उदाहरण स्थापित करने का प्रयास करना चाहते हो सकता है होस्ट का इंटरनेट से बाहर निकलने का मार्ग। वहां से, आप कई मानदंडों के आधार पर नीति लागू कर सकते हैं, साथ ही स्थैतिक सामग्री को कैच करके नेटवर्क उपयोग को बचा सकते हैं। आप प्रॉक्सी का उपयोग लागू करने के लिए होस्ट मशीन पर NAT (मुझे लगता है कि IPTABLES और Masquerade इसे लिनक्स में प्रदान करते हैं) का उपयोग करना चाहते हैं (मैंने इसे अपनी प्रतिक्रिया में वर्णित किया कि मैं केवल HTTP को प्रॉक्सी करना चाहता हूं लेकिन मुझे यकीन नहीं है कि क्या करना है HTTPS ट्रैफिक के साथ करते हैं )। इसका तात्पर्य पहली बार वेब पर जाने का एक कारण है जो आपकी कंपनी की नीतियों के पालन में है।

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

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