सवाल iptables पोर्ट रीडायरेक्ट स्थानीयहोस्ट के लिए काम नहीं कर रहा है


मैं पोर्ट 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 नियम कैसे बढ़ा सकता हूं?


47
2017-12-11 11:41


मूल


यह विषय एक अधिक सामान्य उत्तर प्रदान करता है: serverfault.com/questions/380447/iptables-preroute-localhost - Jeroen
क्या लाइन वाले किसी भी व्यक्ति को लाइन ब्रेक से पहले कमांड में बैकस्लैश जोड़ सकते हैं? - Ciro Santilli 新疆改造中心 六四事件 法轮功


जवाब:


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

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

63
2017-12-11 12:34



पहले नियम की कोई ज़रूरत नहीं है। स्थानीय रूप से जेनरेट किए गए पैकेट PREROUTING श्रृंखला के माध्यम से गुजरता नहीं है। - Khaled
मैंने कॉम्प्लेशन के लिए प्रारंभिक नियम जोड़ा, क्योंकि वह बाहरी ट्रैफिक को भी रीडायरेक्ट करना चाहता है। अगर वे केवल सभी आईपी स्वीकार करने के लिए कहते हैं तो नियम को स्रोत / गंतव्य की आवश्यकता नहीं है - Andy
ओह एपोलॉजीज जब मैंने जवाब दिया तो मैंने आपका जवाब नहीं देखा। - Andy
हाय एंडी, मैं अभी भी server.com से कनेक्ट हो रहा हूं। <Ip> |: 443 ... विफल: कनेक्शन से मना कर दिया गया। - Chris
हाय क्रिस, यह है कि स्थानीयहोस्ट से कनेक्टिंग | 127.0.0.1 | 443 या वह डोमेन है? यदि बाद वाला और आप इसे अपने सर्वर से चला रहे हैं, तो आपके पास आंतरिक रूटिंग समस्या हो सकती है। आप wget कोशिश करके दोहरी जांच कर सकते हैं server.com:8080 (हालांकि मुझे लगता है कि आप पोर्ट अग्रेषण कर रहे हैं क्योंकि यह बाहरी रूप से अवरुद्ध है?)। मेरे स्वयं के वीपीसी में यह समस्या है, हालांकि आप संभवतः डोमेन को अपने / etc / hosts फ़ाइल में 127.0.0.1 के रूप में परिभाषित करके वर्कअराउंड डाल सकते हैं। - Andy


लोकलहोस्ट से दूसरे मशीन पर पैकेट रीडायरेक्ट करने के लिए नियम:

 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

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


7
2018-06-16 02:24



वह भी काम करेगा। मुझे लगता है कि iptables में यह सब क्लीनर है। - quadruplebucky
असल में, अगर गंतव्य किसी अन्य मशीन पर है, तो एक वीएम या रिमोट मशीन लाइन करें, कर्नेल सेटिंग neded है।
यह है नहीं यदि आपके पास एंडी के सुझाव के अनुसार दो नियम हैं। - quadruplebucky
क्षमा करें, मैं एक अलग मशीन को अग्रेषित करने के मामले के बारे में बात कर रहा था जहां डीएनएटी काम नहीं करता है। मैं इस जवाब को किसी समस्या के समाधान के लिए देख रहा था जब मैं कुछ ऐसा करने की कोशिश कर रहा था जो सोचा था कि यह उसी मशीन पर एक कंटेनर से स्थानीयहोस्ट से कनेक्ट हो रहा था। उदाहरण के लिए स्थानीय प्रश्नों के लिए एक कंटेनर में नेमसर्वर चलाना।
असल में, यह 'कर्नेल संस्करण> = 3.6 पर निर्भर है, स्पष्ट रूप से। - quadruplebucky


इस बारे में कैसा है?

iptables -t nat -A OUTPUT -d 127.0.0.1   -पी टीसीपी --पोर्ट 443 -j रेडियरेक्ट - टू-पोर्ट 8080


2
2017-12-11 17:28





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

$ 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
2017-12-11 11:44



यार जवाब के लिए धन्यवाद। प्रक्रिया पोर्ट 8080 पर सुन रही है। इसलिए मैं उस बंदरगाह पर सभी ट्रैफिक को रीडायरेक्ट करना चाहता हूं। - Chris
क्या आप सुनिश्चित हैं कि प्रक्रिया लूप इंटरफ़ेस पर भी सुन रही है? यह केवल आपके भौतिक इंटरफेस पर सुन सकता है। आम तौर पर, आपके वेबसर्वर को, 1 9 2.168.10.0 कहने के बजाय 0.0.0.0 को सुनने की आवश्यकता होगी - MrMajestyk