डॉकर और शोरवेल


17

मैं साधारण स्टैंडअलोन फ़ायरवॉल के रूप में अपने सर्वर पर Shorewall का उपयोग कर रहा हूं और साथ ही डॉकर का उपयोग करना चाहूंगा ।

डॉकटर कंटेनर और उसके पोर्ट पुनर्निर्देशन डॉकटर का उपयोग करके अपने स्वयं के iptables नियम / श्रृंखलाएं निर्धारित की जाती हैं, जिन्हें यदि शोरवेल को फिर से शुरू किया गया तो मार दिया जाएगा। तो कंटेनर अप्राप्य हो जाएगा ।

किसी को बचाने के लिए किसी को बचाने के लिए प्रबंधित करता है या एक छोटे से पुनः आरंभ करने पर या किसी और को हल है?

यह सभी देखें:

जवाबों:


19

निम्नलिखित कॉन्फ़िगरेशन परिवर्तन को डॉकर और शोरवेल मेजबान के बीच यातायात प्रवाह सुनिश्चित करना चाहिए। Shorewall 4.5.21.9 पर परीक्षण किया गया, लेकिन हाल के अधिकांश संस्करणों पर लागू होना चाहिए:

/etc/shorewall/shorewall.conf

सुनिश्चित करें कि आईपी अग्रेषण सक्षम है (अधिकांश कॉन्फिगर आइटम हाँ / नहीं हैं, लेकिन यह "ऑन" है):

IP_FORWARDING=On

/ Etc / shorewall / Masq

अपने निजी डॉकर नेटवर्क के लिए मास्किंगडिंग (NAT) सक्षम करें (यदि आप एक अलग नेटवर्क का उपयोग करते हैं, यानी आप docker को लॉन्च करते हैं --bip=#.#.#.#/#, तो उसी के अनुसार)। eth0बाहरी कनेक्टिविटी के साथ होस्ट मशीन पर किसी भी इंटरफ़ेस में बदलाव करें:

#INTERFACE:DEST         SOURCE
eth0                    172.17.0.0/16

/ Etc / shorewall / इंटरफेस

इंटरफ़ेस प्रविष्टि जोड़ें ताकि Shorewall जानता हो कि कौन सा इंटरफ़ेस dockक्षेत्र से संबंधित है:

#ZONE           INTERFACE               OPTIONS
dock            docker0

/ Etc / shorewall / जोनों

एक नया क्षेत्र बनाएं; ध्यान दें, dockerबहुत लंबा है और "अमान्य क्षेत्र नाम" त्रुटि का कारण होगा।

#ZONE   INTERFACE
dock    ipv4

/ Etc / shorewall / नीति

आप शायद डॉकटर कंटेनरों को मेजबान मशीन और इंटरनेट से बात करने की अनुमति देना चाहते हैं , इसलिए यह एक अच्छा प्रारंभिक बिंदु है:

#SOURCE         DEST            POLICY
# ...(other policies)...
dock            all             ACCEPT
# ...(other policies, catch-all)...

तुम भी एक ऐसी ही आवश्यकता हो सकती है ACCEPTसे यातायात के लिए नीति fwको dockअगर आप पहले से ही यह नहीं खुला था के साथ, fwकरने के लिए all

आप इसे आवश्यकतानुसार नीति या नियमों की फाइलों में कस सकते हैं । उदाहरण के लिए, उपरोक्त स्पष्ट रूप से आपके डॉकर कंटेनरों तक पहुंचने के लिए बाहरी यातायात की अनुमति नहीं देता है; उसके लिए अपने अन्य क्षेत्रों / नीतियों / नियमों की जाँच करें।


1
IP_FORWARDING=Yesऔर IP_FORWARDING=Trueसाथ ही काम करते हैं। मेरे पास कई प्रोडक्शन राउटर हैं, लेकिन आपका जवाब मेरे मुकाबले बहुत स्पष्ट है। अच्छा कार्य।
आरोन सी। डी। ब्रुइन

मेरी अज्ञानता को माफ़ करें - जब मैं दिए गए नियमों को जोड़ने के बाद shorewall को पुनः आरंभ करता हूं, तो मुझे एक चेतावनी मिलती है कि गोदी एक "EMPTY INTERFACE" है ... और वास्तव में, उपरोक्त पढ़ते हुए, यह मेरे लिए स्पष्ट नहीं है कि कैसे shorewall कनेक्शन के बीच संबंध का अनुमान लगा सकता है 172.17 पते और क्षेत्र 'डॉक'। क्या मुझे कुछ स्पष्ट याद आ रहा है कि शोरवेल कैसे काम करता है?
जॉन क्लेन्स

इसके बारे में क्षमा करें, मैं इंटरफ़ेस फ़ाइल में एक परिवर्तन याद कर रहा हूं। मैंने उत्तर संपादित किया है, नया अनुभाग देखें /etc/shorewall/interfaces
आलसी

धन्यवाद। यह अच्छी तरह से shorewall 5 (जो डॉकटर-जागरूक है) के साथ काम कर रहा है, मेजबान को इसके कंटेनरों में शामिल होने के लिए।
Drasill

मास्क सेटिंग्स बहुत महत्वपूर्ण हैं, अन्यथा एक डॉक-कंटेनर बाहरी आईपी का उपयोग करके दूसरे कंटेनर तक नहीं पहुंच पाएगा - यह अवरुद्ध हो जाएगा
यूजेन मेयर

6

चूंकि डॉकर ने अपने नेटवर्क आइसोलेशन फीचर को पेश किया, इसलिए यहां बताए गए अन्य समाधान अब पर्याप्त नहीं हैं यदि आप कस्टम नेटवर्क का उपयोग करना चाहते हैं। Shorewall 5.0.6 डॉकर नेटवर्क सहित डॉकर के लिए समर्थन का परिचय देता है। इस:

  • Shorewall और docker को किसी भी क्रम में शुरू / बंद / पुनः आरंभ करने की अनुमति देता है
  • एक्सटेंशन स्क्रिप्ट को बनाए रखने की आवश्यकता से बचा जाता है

2

बस यह मेरे बॉक्स पर लगा। सुनिश्चित करें कि /etc/shorewall.conf है:

IP_FORWARDING=Yes

डॉकर अग्रेषण पर निर्भर करता है, और मैंने कहा कि 'कठपुतली' इसे मेरे सभी सर्वरों पर 'नहीं' पर सेट करता है।

अपडेट: आपको संभवतः अपने WAN इंटरफ़ेस से डॉकटर से आने वाले ट्रैफ़िक को भी छेड़ना होगा।

संपादित करें /etc/shorewall/masqऔर आपको इसके समान एक पंक्ति की आवश्यकता होगी:

br0 172.17.0.0/12

इस मामले में, मेरा वान इंटरफ़ेस वास्तव में br0 (एक पुल) है, लेकिन तुम्हारा शायद eth0 जैसा कुछ होगा। ( ifconfigअपने इंटरफेस और उनके आईपी पते देखने के लिए उपयोग करें )। मेरी मशीन पर docker 172.17.0.0/24 का उपयोग करता है जो कि RFC1918 निजी पता श्रेणी है। यह अन्य प्रणालियों पर भिन्न हो सकता है, लेकिन आप ifconfigइंटरफ़ेस को देखने के लिए एक बार फिर से उपयोग करके रेंज देख सकते हैं docker0


2

आप यह सुनिश्चित कर सकते हैं कि डॉकर नियम विस्तार लिपियों को बनाकर एक शॉर्टवॉल रिस्टार्ट से बच जाता है जो DOCKERपुनरारंभ होने से पहले श्रृंखला को बचाते हैं , और फिर बाद में इसे फिर से बहाल करते हैं। मैंने यह करने के लिए एक उदाहरण के साथ एक पोस्ट डाला है , हालांकि मुझे यकीन है कि यह एकमात्र संभव विधि से बहुत दूर है।


0

डॉकटर सेवा को चल रहे कंटेनरों को प्रभावित किए बिना फिर से शुरू किया जा सकता है, और डॉक विशिष्ट नियमों को फिर से लोड करने के लिए शोरवेल पुनरारंभ के बाद चलाया जा सकता है। जाहिर तौर पर कुछ ही समय ऐसा होगा, जहां कंटेनर (ओं) को नेटवर्किंग बाधित है।

यह कम से कम मेरे कुछ आर्कलिनक्स इंस्टाल पर सच है।


0

रिफ्रेश एक्शन से आईबॉल को शुद्ध नहीं किया जाता है, इसलिए यदि आप नियमों या नीतियों को रिफ्रेश करना चाहते हैं, तो आप रिस्टार्ट के बजाय रिफ्रेश रन कर सकते हैं:

sudo shorewall refresh

जाहिर है, समस्या अभी भी बनी हुई है अगर आपको वास्तव में शोरवेल को पुनरारंभ करने की आवश्यकता है। फिर, आपको डॉकटर को पुनरारंभ करना होगा और अपने कंटेनरों को फिर से ऊपर करना होगा।


0

एक संभावित विकल्प डॉकर को - नेट = होस्ट विकल्प के साथ चलाना है, ताकि आईपी अग्रेषण और एनएटी के बिना कंटेनरीकृत एप्लिकेशन एक्सेस होस्ट नेटवर्क की अनुमति मिल सके।

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