iptables पोर्ट पुनर्निर्देशित हो रहा है जो लोकलहोस्ट के लिए काम नहीं कर रहा है


54

मैं पोर्ट 443 से आंतरिक पोर्ट 8080 तक के सभी ट्रैफ़िक को पुनर्निर्देशित करना चाहता हूं। मैं iptables के लिए इस कॉन्फ़िगरेशन का उपयोग कर रहा हूं:

iptables -t nat -I PREROUTING --source 0/0 --destination 0/0 -p tcp \
         --dport 443 -j REDIRECT --to-ports 8080

यह सभी बाहरी ग्राहकों के लिए काम करता है। लेकिन अगर मैं उसी माशीन से पोर्ट 443 को एक्सेस करने की कोशिश कर रहा हूं तो मुझे एक कनेक्शन अस्वीकृत त्रुटि मिलेगी।

wget https://localhost

मैं स्थानीय ट्रैफ़िक को भी पुनर्निर्देशित करने के लिए iptables नियम का विस्तार कैसे कर सकता हूं?


यह विषय अधिक सामान्य उत्तर प्रदान करता है: serverfault.com/questions/380447/iptables-preroute-localhost
जीरोएन

1
क्या रेप वाला कोई व्यक्ति लाइन ब्रेक से पहले कमांड में बैकस्लैश जोड़ सकता है?
सिरो सेंटिल्ली 新疆 i iro i

जवाबों:


68

लूपबैक इंटरफ़ेस द्वारा उपयोग नहीं किया जाता है, आपको एक OUTPUT नियम भी जोड़ना होगा:

iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8080
iptables -t nat -I OUTPUT -p tcp -o lo --dport 443 -j REDIRECT --to-ports 8080

3
पहले नियम की कोई जरूरत नहीं। स्थानीय रूप से बनाए गए पैकेट PREROUTING श्रृंखला से नहीं गुजरते हैं।
खालिद

9
मैंने कंकाल की खातिर प्रारंभिक नियम जोड़ा, क्योंकि वह बाहरी यातायात को भी पुनर्निर्देशित करना चाहता है। नियम को स्रोत / गंतव्य की आवश्यकता नहीं है यदि वे केवल सभी आईपी को स्वीकार करने के लिए कहते हैं
एंडी

जब मैंने उत्तर दिया तो ओह अपॉइंटमेंट्स में मैंने आपका उत्तर नहीं देखा।
एंडी

हाय एंडी, मैं अभी भी server.com से कनेक्ट हो रहा हूं। <ip> |: 443 ... विफल: कनेक्शन ने इनकार कर दिया।
क्रिस

हाय क्रिस, यह है कि कनेक्ट करने के लिए localhost | 127.0.0.1 | 443 या वह डोमेन है? यदि बाद वाला और आप इसे अपने सर्वर से चला रहे हैं, तो आपको आंतरिक रूटिंग समस्या हो सकती है। Wget server.com:8080 की कोशिश करके आप दोहरी जांच कर सकते हैं (हालांकि मैं मानता हूं कि आप पोर्ट फॉरवर्डिंग कर रहे हैं क्योंकि इसका बाहरी रूप से अवरुद्ध है?)। मेरी स्वयं की VPC में वह समस्या है, हालाँकि आप संभवतः डोमेन को अपने / etc / मेजबान फ़ाइल में 127.0.0.1 के रूप में परिभाषित करके वर्कअराउंड कर सकते हैं।
एंडी

10

स्थानीय मशीन से पैकेट को पुनर्निर्देशित करने के लिए एक और मशीन नियम:

 iptables -t nat -A OUTPUT -o lo -d 127.0.0.1 -p tcp --dport 443 -j DNAT  --to-destination 10.x.y.z:port

काम करेंगे, लेकिन आपको कर्नेल में इस विकल्प को सक्षम करने की आवश्यकता है:

sysctl -w net.ipv4.conf.all.route_localnet=1

उस कर्नेल सेटिंग के बिना यह काम नहीं करेगा।


वह भी काम करेगा। मुझे लगता है कि यह सब iptables में करना क्लीनर है।
चौगुनी

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

ऐसा नहीं है कि आपके पास एंडी के ऊपर बताए गए दो नियम हैं।
चौगुना

क्षमा करें, मैं एक अलग मशीन को अग्रेषित करने के मामले के बारे में बात कर रहा था जहाँ DNAT काम नहीं करता है। मैं एक समस्या के समाधान के लिए इस जवाब को देख रहा था, जब मैं कुछ ऐसा करने की कोशिश कर रहा था, जो यह सोचता था कि यह स्थानीयहोस्ट से उसी मशीन पर एक अवरोधक से जुड़ रहा है। जैसे स्थानीय प्रश्नों के लिए कंटेनर में नेमसेवर चलाना।

असल में, यह 'कर्नेल संस्करण> = 3.6 पर निर्भर है, जाहिरा तौर पर।
चौगुना


2

आपने कहा कि आपको कनेक्शन अस्वीकृत त्रुटि मिल रही है । इसका मतलब यह है कि आप जिस पोर्ट से जुड़ने की कोशिश कर रहे हैं उस पर कोई स्थानीय प्रक्रिया नहीं है! सुनने की प्रक्रियाओं की जांच करने के लिए, कमांड का उपयोग करें:

$ sudo netstat -lnp | grep 8080

नियम को लागू करने के बाद, आपको कनेक्ट होने के लिए पोर्ट 8080 पर सुनने की प्रक्रिया होनी चाहिए।

ऐसा लगता है कि आपके पास इसके बजाय निम्नलिखित नियम होना चाहिए:

$ iptables -t nat -I OUTPUT --source 0/0 --destination 0/0 -p tcp
                                       --dport 443 -j REDIRECT --to-ports 8080

याद रखें कि आप लोकलहोस्ट से भेज रहे हैं। तो, आपको आउटपुट पैकेट को पुनर्निर्देशित करना होगा।


1
उत्तर के लिए धन्यवाद। यह प्रक्रिया 8080 पोर्ट पर सुन रही है। इसके बाद मैं उस पोर्ट पर सभी ट्रैफ़िक को पुनर्निर्देशित करना चाहता हूं।
क्रिस

क्या आप सुनिश्चित हैं कि प्रक्रिया लूप इंटरफ़ेस पर भी सुन रही है? यह केवल आपके भौतिक इंटरफ़ेस पर ही हो सकता है। आमतौर पर, आपके वेबसर्वर को कहने के बजाय 0.0.0.0 सुनने की आवश्यकता होगी, 192.168.10.0
MrMestyesty
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.