iptables: NEW, ESTABLISHED और RELATED पैकेट में अंतर


46

एक सर्वर पर एक फ़ायरवॉल का हिस्सा:

iptables -A INPUT -p tcp --dport 22 -m state NEW --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 100 --hitcount 10 -j DROP

जब मैं ऑनलाइन खोज करता हूं तो मुझे हमेशा नया दिखता है उस नियम में इस्तेमाल किया जा रहा है, लेकिन मुझे यह समझने में कठिन समय हो रहा है कि क्यों स्थापित और संबंधित का उपयोग नहीं किया जाता है।

ऐशे ही :

iptables -A INPUT -p tcp --dport 22 -m state NEW,ESTABLISHED,RELATED --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -m recent --update --seconds 100 --hitcount 10 -j DROP

जब कोई नया पैकेट ESTABLISHED और संबंधित में बदलता है तो क्या कोई मुझे समझा सकता है?

जवाबों:


46

रिसीवर द्वारा उठाए जाने से पहले एक नए पैकेट पर एक टेलीफ़ोन कॉल पर विचार करें। एक स्थापित पैकेट उनका है, "हैलो।" और एक संबंधित पैकेट होगा यदि आप उन्हें ई-मेल के बारे में बताने के लिए बुला रहे थे तो आप उन्हें भेजने वाले थे। (ई-मेल संबंधित हो रहा है।)

यदि मेरा सादृश्य इतना महान नहीं है, तो मुझे लगता है कि आदमी पृष्ठों को अच्छी तरह से संभालता है:

नया - जिसका अर्थ है कि पैकेट ने एक नया कनेक्शन शुरू किया है, या अन्यथा एक ऐसे कनेक्शन से जुड़ा है, जिसने दोनों दिशाओं में पैकेट नहीं देखा है, और

स्थापित - जिसका अर्थ है कि पैकेट एक कनेक्शन से जुड़ा है, जिसमें दोनों दिशाओं में पैकेट देखे गए हैं,

संबंधित - मतलब है कि पैकेट एक नया कनेक्शन शुरू कर रहा है, लेकिन एक मौजूदा कनेक्शन से जुड़ा हुआ है, जैसे कि एफ़टीपी डेटा ट्रांसफर, या आईसीएमपी त्रुटि।

iptables (8) - लिनक्स मैन पेज


9
जिज्ञासा से बाहर, क्या आप जानते हैं कि यह कैसे संबंधित पैकेट निर्धारित करता है? क्या कुछ तंत्र है जो अनुप्रयोग iptables को संकेत करने के लिए उपयोग कर सकते हैं कि एक कनेक्शन एक संबंधित कनेक्शन होगा, या क्या यह पूरी तरह से iptables के राज्य का हिस्सा है?
मैथ्यू शारले

9
इसे कर्नेल मॉड्यूल की एक श्रृंखला द्वारा नियंत्रित किया जाता है, जिसे ip_conntrack_ * कहा जाता है, प्रत्येक एक विशेष प्रोटोकॉल के लिए लिखा जाता है जो असंबंधित कनेक्शन (जैसे कि FTP) का उपयोग करता है। आपके प्रश्न का उत्तर देने के लिए, मुझे लगता है कि आपको अपने आवेदन के लिए एक समान मॉड्यूल लोड करने की आवश्यकता होगी।
काइल स्मिथ

4
ठीक है धन्यवाद। लेकिन नए नियम के साथ इसमें वापस जाना, क्या यह संभव नहीं है कि यह देखने के लिए एक पैकेट बनाया जा सकता है कि यह पहले से ही स्थापित है और क्या नियम से अवरुद्ध नहीं है?
क्रिश

2
@ क्रिस: यह नकली आउटगोइंग पैकेट के लिए बहुत कठिन है, इसलिए उत्तर में मैन पेज के शब्दों द्वारा, मैं नहीं देखता कि कैसे। आप सही हैं कि एक पैकेट को नकली बनाना संभव है जो दिखता है कि यह एक खुले कनेक्शन के लिए बाध्य है, लेकिन यहां तक ​​कि एक फ़ायरवॉल के बिना, टीसीपी स्टैक बस पैकेट को फर्श पर छोड़ देगा अगर यह पहले से ही एक खुले कनेक्शन के बारे में नहीं जानता था प्रेषक। यदि यह एक राउटर पर फ़ायरवॉल पर है, तो राउटर से गुजरते हुए SYN/ ACK/ RST/ आदि पैकेटों का निरीक्षण करके इस स्थिति को बनाए रखना संभव है , और मुझे उम्मीद है कि iptables ऐसा करेगा।
मैथ्यू शार्ले

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

14

सर्वर और क्लाइंट दोनों के लिए प्रतिबंधात्मक INPUTऔर खुला होना OUTPUT, अर्थात:

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

और सक्रिय मोड में FTP के उदाहरण पर iptables- एक्सटेंशन (8) से:

1. नया

नए पैकेट ने एक नया कनेक्शन शुरू किया है या अन्यथा एक ऐसे कनेक्शन के साथ जुड़ा हुआ है जिसने दोनों दिशाओं में पैकेट नहीं देखा है।

पोर्ट पर क्लाइंट 50000(कोई भी यादृच्छिक अनपेक्षित पोर्ट) पोर्ट पर FTP सर्वर से कनेक्ट 21होता है, इस आवक कनेक्शन को स्वीकार करने के लिए सर्वर को कम से कम इसकी आवश्यकता होगी:

iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT

2. स्थापित

ESTABLISHED पैकेट एक कनेक्शन से जुड़ा होता है, जिसमें दोनों दिशाओं में पैकेट देखे जाते हैं।

अब क्लाइंट की ओर से, उसने पोर्ट पर सर्वर के लिए एक आउटगोइंग कनेक्शन को 21स्थानीय पोर्ट का उपयोग करके खोला 50000और उसे निम्नलिखित iptables की आवश्यकता server (21)है client (50000):

sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

3. संबंधित

संबंधित पैकेट एक नया कनेक्शन शुरू कर रहा है, लेकिन मौजूदा कनेक्शन से जुड़ा है, जैसे कि एफ़टीपी डेटा ट्रांसफर या आईसीएमपी त्रुटि।

अब एफ़टीपी कनेक्शन स्थापित होने के बाद और एक डेटा कनेक्शन का प्रदर्शन किया जाने वाला है, क्लाइंट पोर्ट पर 60000( सर्वर एफ़टीपी क्लाइंट डेटा कनेक्शन के लिए सर्वर बन जाता है) के साथ एक सर्वर सॉकेट खोलेगा (मेरी समझ से क्लाइंट इस पोर्ट को चिह्नित करेगा से अन्य कनेक्शन के 60000रूप में ) और FTP कमांड का उपयोग करके इस पोर्ट नंबर को सर्वर पर भेज देगा । तब एफ़टीपी सर्वर क्लाइंट पर पोर्ट के लिए एक नया कनेक्शन खोल देगा , और अच्छी तरह से, क्लाइंट को अब इस नए कनेक्शन को सफल होने देने के लिए निम्नलिखित की आवश्यकता होगी:RELATED50000->21PORT2060000

sudo iptables -A INPUT -m state --state RELATED -j ACCEPT

अंत में, काम करने के लिए आपको ip_conntrack_ftpकर्नेल मॉड्यूल को सक्षम करने की आवश्यकता है ताकि सिस्टम कनेक्शन / पैकेजों को चिह्नित कर सके RELATED(यह मेरी समझ है, मैंने इस पर बहुत ज्यादा खुदाई नहीं की है):

modprobe ip_conntrack_ftp

केवल स्थानीय स्तर पर ही यूनिडायरेक्शनल प्रवाह की स्थापना की आवश्यकता है, नहीं tcp 3-रास्ता हाथ मिलाना, क्या मेरी समझ सही है?
sdaffa23fdsf

उत्तर के लिए धन्यवाद, स्थापित करने के लिए आपने कहा "iptables सर्वर (21) से क्लाइंट (50000) तक पहुंचने के लिए प्रतिक्रिया की अनुमति देने के लिए" यदि यह क्लाइंट से सर्वर है तो यह INPUT क्यों है और OUTPUT नहीं है?
मेड्या

@ मीडिया, क्योंकि ग्राहक के दृष्टिकोण से, सर्वर से भेजे गए पैकेट (21) से ग्राहक (50000) आने वाले पैकेट हैं, इसलिए ग्राहक के लिए यह एक है INPUT
Jaime Hablutzel
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.