पैकेट की अवस्थाओं के बारे में आईपाइबेट का कंवर्टर मॉड्यूल कब बताता है?
इसे पहले राज्यों को संग्रहीत करने की आवश्यकता है। मेरे द्वारा उपयोग किए जाने वाले कुछ पुराने बीएसडी फ़ायरवॉल के साथ, मुझे लगता है कि इसका नाम IPFW था, मैं एक नियम रखता था जो कि "पैकेट छोड़ने की स्थिति का ट्रैक रखता है", और यह इंटरफेस के आउटबाउंड दिशा पर रखा गया था। फिर, इनबाउंड दिशा पर एक और नियम जो उन राज्यों के खिलाफ उनकी जाँच करता है जो नियम द्वारा आउटबाउंड दिशा पर बनाए गए थे। तो 2 नियम हुआ करते थे: (1) स्टेट्स टेबल को पॉप्युलेट करने के लिए, यह आउटबाउंड दिशा में था, और (2) स्टेट्स टेबल देखने के लिए, यह इनबाउंड दिशा में था।
लेकिन कंसट्रैक के साथ, मैं इसे इस नियम जैसे INPUT चेन पर लागू देखता हूं:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
इससे मुझे आश्चर्य होता है कि वास्तव में वह बयान क्या कर रहा है?
- क्या यह कह रहा है कि यह राज्यों के टेबल में अपनी जानकारी डालकर मैच करने वाले पैकेटों को ट्रैक करना शुरू कर देगा?
- या यह कह रहा है कि इसके पास पहले से ही राज्यों की जानकारी है, और यह इसके आधार पर इनबाउंड संदेशों के खिलाफ कार्य करने वाला है? (उदाहरण के लिए स्वीकार करें कि क्या वे पहले से स्वीकृत कनेक्शन के हैं?)। लेकिन, इस मामले में, राज्यों की तालिका कहां से आबाद हुई? यह कौन सा नियम है? या यह नियम-कम है और निहित है?
जवाब
नेटफिल्टर और कंटरट्रैक की परिचयात्मक प्रस्तुति
पहले नेटफिल्टर और जनरल नेटवर्किंग में पैकेट प्रवाह के बारे में अनिवार्य योजनाबद्ध:

नेटफिल्टर पैकेट फ़िल्टरिंग ढांचा है जो बाकी नेटवर्क स्टैक ("रूटिंग निर्णय" और अन्य सफेद गोल-धार वाले बॉक्स भागों द्वारा दर्शाया गया है) पर खुद को सम्मिलित करता है। नेटफिल्टर अन्य सबसिस्टम और "क्लाइंट" के लिए हुक और एपीआई प्रदान करता है। इन भागों में से हैं conntrack (कनेक्शन ट्रैकर) और iptables (या nftables )। नेटफिल्टर और कंवर्टर के बीच अलगाव काफी फजी है। आप बस कनेक्टट्रैक को नेटफिल्टर के एक एकीकृत भाग के रूप में मान सकते हैं।
योजनाबद्ध तरीके से एक पैकेट ट्रैवर्स के विभिन्न चरणों का वर्णन करते हुए आप देख सकते हैं कि कुछ बिंदु पर (कच्चे / PREROUTING और mangle / PREROUTING के बीच, या कच्चे / OUTPUT और mangle / OUTPUT के बीच) पैकेट ट्रैवर्स को जोड़ता है ।
इस बिंदु पर, कॉनट्रैक अपने लुकअप टेबल (कर्नेल मेमोरी में रखा गया एक मिनी लुकअप डेटाबेस) में खोज करेगा:
- यदि इस पैकेट की चारित्रिकताएं नहीं मिली हैं (और यदि कच्ची तालिका में UNTRACKED घोषित नहीं की गई है), तो एक नया कनवर्टर द्विदिश ट्यूपल प्रविष्टि (प्रोटोकॉल, फिर विशिष्ट परिवार और प्रोटोकॉल informations: प्रारंभिक स्रोत और पोर्ट, प्रारंभिक गंतव्य और पोर्ट, उत्तर स्रोत और पोर्ट,) उत्तर गंतव्य और बंदरगाह (वे दो अंतिम आमतौर पर रिवर्स होते हैं, जब तक कि एनएटी या कुछ अजीब प्रोटोकॉल शामिल नहीं होते हैं, जैसे आईसीओ के लिए प्रतिध्वनि उत्तर मिलान गूंज अनुरोध) प्रवाह का वर्णन करते हुए राज्य NEW के साथ बनाया गया है।
- यदि यह किसी भी दिशा में (किसी भी दिशा में) एक पिछली प्रविष्टि से मेल खाता है और इस प्रवाह की स्थिति के अनुकूल है, तो प्रवाह की स्थिति को बदल दिया जा सकता है (उदाहरण के लिए नया से बदलकर अगर यह पहले नहीं था)।
- यदि किसी विशिष्ट कारण से पैकेट अपनी विशेषताओं के बावजूद किसी मौजूदा प्रवाह से मेल नहीं खा सकता है (उदाहरण के लिए: एक देर से टीसीपी पैकेट जो पहले से ही सफलतापूर्वक एक रिट्रांसमिशन के बाद प्राप्त किया गया है, तो अनुक्रम और पृष्ठभूमि मूल्यों के संबंध में खिड़की से बाहर होना) पैकेट को INVALID टैग किया जाएगा।
- संबंधित जैसे कुछ अन्य मामले हैं: यह उन पैकेटों के बारे में है जो प्रवाह का हिस्सा नहीं हैं, लेकिन एक नए प्रवाह से संबंधित हैं जो अन्य मौजूदा (डेटाबेस में) प्रवाह के साथ जुड़ा हो सकता है। दो उदाहरण एक पैकेट प्राप्त करने से बनाई गई एक ICMP त्रुटि है (जैसे: UDP पोर्ट पहुंच योग्य नहीं) या जब कर्नेल मॉड्यूल की तरह एक विशेष प्रोटोकॉल सहायक
nf_conntrack_ftp
, जो कि कॉनट्रैक सबसिस्टम के लिए एक प्लगइन है , पता लगाता है कि एक पैकेट अलग डेटा प्रवाह से जुड़ा हुआ है। FTP कमांड के साथ PASV / EPSV या PORT / EPRT कमांड फ्लो पर (पोर्ट 21 पर) किया जाता है।
प्रश्न को संबोधित करते हुए
यह सब कहा जा रहा है, यहां आपकी दो गोलियों के जवाब हैं:
जैसे ही इसके मॉड्यूल (संभावित प्रासंगिक प्रोटोकॉल-विशिष्ट उप-मॉड्यूल सहित) लोड होते हैं , मुख्य नेटवर्क नेमस्पेस कॉनट्रैक कनेक्शन पर नज़र रखना शुरू कर देता है। गैर-आरंभिक नेटवर्क नेमस्पेस (कंटेनरों ...) के लिए यह भी आवश्यक है कि कुछ अन्य सबसिस्टम इसे संदर्भित करते हैं (जैसे कि ओपी के iptables के कॉनट्रैक मॉड्यूल या
conntrack
बाद में वर्णित कमांड का उपयोग करके )। यह डिफ़ॉल्ट है और एक पैकेट को विशेष रूप से UNTRACKED के रूप में चिह्नित किया जाना चाहिए, इससे पहले कि सबसट्रैक सबसिस्टम इस पैकेट को ट्रैक न करने के लिए देखता है। लिनक्स पर केवल कुछ ही मामले हैं जहां ट्रैकिंग की आवश्यकता नहीं होगी, लेकिन फिर स्टेटफुल फ़ायरवॉलिंग और स्टेटफुल / डायनेमिक NAT अब उपलब्ध नहीं होंगे (स्टेबल NAT जो पहले स्थान पर UNTRACKED का उपयोग करने की आवश्यकता हो सकती है, अभी भी हो सकता है) किया, लेकिन iptables के साथ नहीं । tc या nftables can)। से बचने के लिए conntrack कुछ पैकेट हैंडलिंग, इस तरह का iptables नियम का इस्तेमाल किया जा सकता है (जैसे: पोर्ट 80 / टीसीपी):iptables -t raw -A PREROUTING -p tcp --dport 80 -j CT --notrack iptables -t raw -A OUTPUT -p tcp --sport 80 -j CT --notrack
जब पैकेट फ़िल्टर / INPUT को ट्रेस करता है और इस नियम तक पहुँचता है:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Iptables के विशिष्ट कर्नेल मॉड्यूल
xt_conntrack
प्रश्नों conntrack सबसिस्टम (विभिन्न प्रासंगिक कर्नेल मॉड्यूल द्वारा नियंत्रितnf_conntrack*
) और उसके देखने डेटाबेस में इस पैकेट की स्थिति के बारे में पूछते हैं। यदि जवाब हैRELATED
याESTABLISHED
पैकेट मेल खाता है और ACCEPT के फैसले पर आगे बढ़ता है। वास्तव में परिणाम पहले से ही पैकेट में कैश्ड है पहली बार लुकअप किया गया था (आमतौर पर कॉनट्रैक द्वारा ) इसलिए यह एक सस्ता "लुकअप" है। इस प्रकार पहले से स्वीकार किए गए प्रवाह को संभालने के लिए एक सामान्य नियम है। उन प्रवाह को शुरू में स्पष्ट रूप से उल्लेख करने वाले नियमों में स्वीकार किया जा सकता है या बस नियमों का उल्लेख नहीं किया जा सकता है लेकिन इस सामान्य नियम के बाद रखा गया है (लेकिन ध्यान रखें कि INVALID राज्य, जो आमतौर पर ऐसा करने से पहले DROPed होना चाहिए)।-m conntrack --ctstate NEW
बुलेट जोड़ना: इनकमिंग पैकेट्स और आउटगोइंग पैकेट्स की हैंडलिंग PREROUTING और OUTPUT के बीच काफी सममित है (भले ही वे सममित न दिखें): PREROUTING के साथ ही OUTUTUT (और कुछ अन्य स्थानों पर, NAT पर विचार करते हुए ) राज्य के अपने पहले पैकेट को छोड़कर नए ट्रैक्टिंग वाले iptables की नेट टेबल पर) कंवर्टर के साथ काम करना । यह आपके द्वारा IPFW के बारे में लिखे गए विवरण से थोड़ा भिन्न हो सकता है। यदि कोई एप्लिकेशन चलाने वाला सर्वर आउटगोइंग फ्लो को भी प्रतिबंधित कर रहा है, तो यह सबसे अधिक संभावना है कि यह एक ही जेनेरिक iptables को फिल्टर / OUTPUT और फ़िल्टर / INPUT दोनों में नियम की आवश्यकता है , ताकि पहले से ही स्वीकार किए गए आने वाले ट्रैफ़िक के आउटगोइंग उत्तर पैकेट को पास किया जा सके।
अतिरिक्त जानकारी
कॉनट्रैक सबसिस्टम के लुकअप टेबल्स को कॉनट्रैक-टूल्स से इंटरैक्ट करने के लिए डेडिकेटेड टूल्स हैं ।
conntrack: कन्वेक्शन द्वारा हैंडल किए गए लुकअप टेबल की सामग्री को क्वेरी, डिलीट या अपडेट करने के लिए ।
कुछ उदाहरण।
आप सभी ट्रैक की गई प्रविष्टियों को सूचीबद्ध कर सकते हैं (जो अतिरिक्त फिल्टर के बिना बड़ी हो सकती हैं):
conntrack -L
यदि आपका सिस्टम NAT कर रहा है (उदाहरण के लिए एक निजी लैन के सामने एक राउटर, या वीएम और कंटेनर चलाना) तो आप उपयोग कर सकते हैं
--any-nat
,--src-nat
या--dst-nat
केवल सम्मान प्रदर्शित कर सकते हैं । सभी NAT, सभी स्रोत NAT (बहाना), या सभी गंतव्य NAT (आमतौर पर अग्रेषित पोर्ट के लिए):वास्तविक समय की निगरानी conntrack घटनाओं:
conntrack -E
conntrackd: एक डेमॉन जिसके दो मुख्य उद्देश्य (कॉनट्रैक) हैं प्रवाह लेखांकन और आँकड़े, या उच्च-उपलब्धता स्टेटफुल फ़ायरवॉल क्लस्टर स्टेट सिंक्रोनाइज़ेशन।
कनेक्शन ट्रैकिंग नेटफिल्टर का एक अलग कार्य है, और इसे IPTables के साथ कॉन्फ़िगर नहीं किया गया है।

चित्र में, conntrack
INPUT पथ में दो चरण हैं और एक OUTPUT पथ में है। ये चरण कनेक्शन ट्रैकिंग तालिका में ट्रैक किए गए मौजूदा कनेक्शन के साथ अलग-अलग पैकेटों को जोड़ते हैं, या तालिका में नए कनेक्शन ट्रैकिंग प्रविष्टियों को बनाते हैं।
Conntrack कार्यक्षमता एक लिनक्स कर्नेल मॉड्यूल है, और इसे अक्सर डिफ़ॉल्ट कॉन्फ़िगरेशन में कर्नेल में शामिल किया जाता है।
Conntrack आपरेशन net.netfilter.nf_conntrack
sysctl मानों को समायोजित करके ट्यून किया जा सकता है ।
आपका दूसरा विकल्प यह है कि क्या होता है। राज्य सूचना को Conntrack फ़ंक्शन द्वारा रिकॉर्ड किया जाता है, और IPTables नियम केवल जानकारी के लिए Conntrack तालिका को सुरक्षित करता है।