Iptables: "-p udp --state स्थापित"


18

आइए इन दो iptables नियमों को देखें जो अक्सर आउटगोइंग DNS को अनुमति देने के लिए उपयोग किए जाते हैं:

iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53 
   -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -p udp --sport 53 --dport 1024:65535
   -m state --state ESTABLISHED -j ACCEPT

मेरा सवाल है: मुझे यूडीपी में स्थापित स्थिति को कैसे समझना चाहिए? यूडीपी स्टेटलेस है।

यहाँ मेरा अंतर्ज्ञान है - मैं जानना चाहता हूँ, अगर यह गलत है या कहाँ है:

मैन पेज मुझे यह बताता है:

राज्य

यह मॉड्यूल, जब कनेक्शन ट्रैकिंग के साथ जोड़ा जाता है, तो प्रवेश की अनुमति देता है
इस पैकेट के लिए कनेक्शन ट्रैकिंग स्थिति।

  --स्टेट ...

तो, iptables मूल रूप से उस पोर्ट नंबर को याद करता है जो आउटगोइंग पैकेट के लिए उपयोग किया गया था (UDP पैकेट के लिए और क्या याद रख सकता है?) , और फिर पहले आने वाले पैकेट को थोड़े समय के भीतर वापस भेजने की अनुमति देता है? एक हमलावर को पोर्ट संख्या का अनुमान लगाना होगा (क्या यह वास्तव में बहुत कठिन होगा?)

संघर्षों से बचने के बारे में:

कर्नेल किस पोर्ट को ट्रैक करता है (या तो अन्य सेवाओं द्वारा, या पिछले आउटगोइंग यूडीपी पैकेट द्वारा) ब्लॉक किया जाता है, ताकि इन पोर्ट का उपयोग नए आउटगोइंग DNS पैकेट के लिए टाइमफ्रेम के भीतर नहीं किया जाएगा? (क्या होगा, अगर मैंने गलती से समय सीमा के भीतर उस बंदरगाह पर एक सेवा शुरू करने की कोशिश की - तो क्या उस प्रयास को अस्वीकार / अवरुद्ध किया जाएगा?)

कृपया उपरोक्त पाठ में सभी त्रुटियाँ पाएं :-) धन्यवाद,

क्रिस

जवाबों:


12

तो, iptables मूल रूप से उस पोर्ट नंबर को याद करता है जो आउटगोइंग पैकेट के लिए उपयोग किया गया था (UDP पैकेट के लिए और क्या याद रख सकता है?)।

मैं UDP स्रोत और गंतव्य पोर्ट और पते संग्रहीत हैं के लिए बहुत यकीन है।

यदि आप निरीक्षण करना चाहते हैं तो तालिकाओं और / या नेटस्टैट-नेट को स्थापित करें।

(क्या होगा, अगर मैंने गलती से समय सीमा के भीतर उस बंदरगाह पर एक सेवा शुरू करने की कोशिश की - तो क्या उस प्रयास को अस्वीकार / अवरुद्ध किया जाएगा?)

चूंकि आप OUTPUT और INPUT का उपयोग कर रहे हैं, इसलिए आपकी स्थानीय सेवाओं के बारे में बात कर रहे हैं। पोर्ट पहले से ही उपयोग किया जाता है मुझे विश्वास नहीं है कि आपका सिस्टम आपको एक और सेवा शुरू करने की अनुमति देगा क्योंकि कुछ उस पोर्ट पर पहले से ही सुन रहा है। मुझे लगता है कि आप पहली सेवा को रोक सकते हैं और दूसरा शुरू कर सकते हैं यदि आप वास्तव में चाहते थे, तो उस स्थिति में प्रतिक्रिया शायद आपकी सेवा में मिल जाएगी। पैकेट के साथ सेवा क्या करती है यह इस बात पर निर्भर करता है कि पैकेट की सामग्री क्या है और यह किस सेवा की है।


इसलिए अगर मैंने पोर्ट 8080 पर एक टॉमकैट उदाहरण कहना शुरू किया, तो मेरे पास 1: (65535-1023) मौका होगा कि स्टार्टअप विफल हो जाएगा, अगर गलती से एक DNS क्वेरी उसी पोर्ट पर चल रही है? या यह केवल समयसीमा समाप्त होने तक प्रतीक्षा करेगा? डिफ़ॉल्ट रूप से समय सीमा कितनी देर है?
क्रिस लेचर

6
लिनक्स पर मेरा मानना ​​है कि सामान्य पोर्ट की सीमा 32768-61000 है (देखें / खरीद / sys / net / ipv4 / ip_local_port_range) इसमें 8080 का आपका उदाहरण पोर्ट शामिल नहीं होगा। पोर्ट पर सेवाओं को सुनने के लिए यह बहुत ही असामान्य है। पंचांग सीमा के भीतर। यूडीपी प्रविष्टि तालिका में समय आमतौर पर 30 सेकंड होता है (देखें / खरीद / sys / net / netfilter / nf_conntrack_udp_timeout)
Zoredache

2
+1 धन्यवाद, विशेष रूप से / proc रास्तों के लिए!
क्रिस लेचर

1
यदि कोई व्यक्ति udp_timeout का विस्तार करना चाहता है, तो उसका उपयोग करेंecho "net.netfilter.nf_conntrack_udp_timeout = 180" >> /etc/sysctl.conf
किरण

8

NB: यह उत्तर संपादित किया गया है।

मैन पेज जो कहते हैं, उसके बावजूद ESTABLISHED"स्टेटफुल" प्रतीत होता है। यूडीपी के लिए इसका मतलब है (जैसा कि आप सुझाव देते हैं) प्रत्येक आउटबाउंड यूडीपी पैकेट ("src आईपी, src पोर्ट dst ip, dst port" tuple) को कुछ समय के लिए याद रखना और उसकी प्रतिक्रियाओं को पहचानना।

FWIW, DNS ट्रैफिक के लिए मेरे सामान्य नियम कुछ इस तरह होंगे:

# permit any outbound DNS request (NB: TCP required too)
iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53  -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 53  -j ACCEPT

# accept any packet that's a response to anything we sent
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

यानी OUTPUTश्रृंखला पर यातायात को नियंत्रित करें , और फिर iptablesराज्य मॉड्यूल को INPUTश्रृंखला पर बाकी सब को संभालने दें ।

इससे संबंधित प्रश्न भी देखें ।


1
मुझे पता है कि मुझे भी टीसीपी की अनुमति देनी चाहिए। लेकिन UDP के लिए संबंधित क्या होगा? Manpage: "संबंधित अर्थ है कि पैकेट एक नया कनेक्शन शुरू कर रहा है, लेकिन एक मौजूदा कनेक्शन के साथ जुड़ा हुआ है, ..." यूडीपी से कनेक्शन? शायद यह वास्तव में ESTABLISHED की तुलना में अधिक समझ में आता है, लेकिन यह वही है जो मैं पता लगाना चाहता हूं।
क्रिस लेचर

जब मैं आपके नियमों का उपयोग करता हूं, लेकिन udp INPUT को संबंधित से प्रतिबंधित करता हूं, तो मेरे DNS प्रश्न काम नहीं करते हैं। लगता है कि मुझे स्थापित करने की अनुमति है। क्या संबंधित (यूडीपी के लिए) भी अनुमति देने का कोई कारण है?
क्रिस लेचर

ठीक है, ऐसा लगता है कि ESTABLISHED का मतलब उस आदमी के पेज से ज्यादा है जो कहता है। किसी भी घटना में, यदि आप मेरी तरह ही OUTPUT फ़िल्टर का उपयोग करते हैं और inbonud ट्रैफ़िक स्वीकार नहीं करते हैं, तो INPUT नियम केवल वही है जिसकी आपको कभी आवश्यकता होगी।
अलनीतक

1
यह देखते हुए कि हमने क्या पाया है, संबंधित udp पैकेट AFAIK मौजूद नहीं है। हालाँकि (उदाहरण के लिए) यदि आप कभी भी उस बॉक्स से FTP को आउटबाउंड करते हैं तो आपको डेटा चैनल के लिए संबंधित राज्य नियम की आवश्यकता होती है। एकल "स्थापित, संबंधित" नियम वायु यातायात के लिए सबसे इष्टतम एकल नियम AFAIK है।
अलनीतक

1
वास्तव में, RELATEDUDP पैकेट RTP के लिए मौजूद हो सकते हैं।
अलनीतक

1

Iptables डेवलपर्स ने माना है कि "ESTABLISHED" स्थिति वह स्थिति थी जब पैकेट को दो दिशाओं में देखा जाता है जो कि दो ग्राहकों के बीच प्रोटोकॉल होता है।

राज्य का विस्तार कॉनट्रैक का हिस्सा है। कर्नेल अवस्था को तालिका से समझता है

/proc/net/nf_conntrack

उदाहरण के लिए प्रेषक बिंदु से तालिका nf_conntrack में UDP के लिए iptable राज्यों का उदाहरण। आइए कल्पना करें कि आप UDP पर एक DNS क्वेरी भेजें

udp   17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
 [UNREPLIED] src=192.168.1.10 dst=192.168.1.2 sport=53 \
 dport=35237 use=1

एक पैकेट भेजा गया है। यह अप्रतिबंधित है और ओह, तालिका में बदले में क्या अपेक्षित है (DNS उत्तर के लिए पैकेट) के लिए डेटा है।

udp   17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
  src=192.168.1.10 dst=192.168.1.2 sport=53 \
 dport=35237 use=1

उत्तर आ गया है, बिना चिह्नित ध्वज चला गया है, इसका मतलब है कि यह यूडीपी कनेक्शन आपके सिस्टम में परिभाषित कम समय के लिए ESTABLISHED स्थिति में है।

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