2012-06-16 12 views
20

ब्लॉक करते हैं मेरे पास iptables नियम हैं जो पोर्ट 8080 पर पोर्ट 80 के लिए अनुरोधों को रीडायरेक्ट करते हैं (पोर्ट एसएसएल पोर्ट्स पर भी (और एसएसएल पोर्ट भी हैं लेकिन मैंने उन्हें सादगी के लिए छोड़ दिया है) ।आईपीटीबल्स 80 से 8080 पर रीडायरेक्ट करते हैं लेकिन सार्वजनिक 8080 एक्सेस

जबकि हमने जो कुछ किया है ठीक है (और मुझे व्यक्तिगत रूप से कोई समस्या नहीं है) पोर्ट 8080 बाहरी दुनिया के लिए भी खुला है अगर कोई इसे यूआरएल में निर्दिष्ट करना चाहता है। यह अनिवार्य है कि बंदरगाह 8080 बाहरी दुनिया से पहुंच से बंद होना चाहिए और केवल 80 खुले रहें।

मैं आवेदन सर्वर पर श्रोता को बदलने के लिए बंदरगाह पर 8080 की जरूरत है और श्रोता के स्रोत आईपी पता करने के लिए (के रूप में पोर्ट 80 इस अनुप्रयोग सर्वर चल उपयोगकर्ता के लिए ऊंचा अनुमति की आवश्यकता प्रतीत होता है उपयोग करने के लिए) की इच्छा नहीं आवेदन के रूप में पैकेट एप्लिकेशन के अनुरोधों का ऑडिट करता है (यानी हम स्रोत आईपी पते को स्थानीय में बदल नहीं सकते हैं)।

वर्तमान iptables कॉन्फ़िगरेशन नीचे है। क्या किसी को पता है कि पोर्ट 80 से रीडायरेक्ट किए गए पैकेट में स्रोत आईपी को बनाए रखने के दौरान सार्वजनिक इंटरनेट से 8080 को अवरुद्ध करने का कोई तरीका है या नहीं?

अग्रिम में बहुत धन्यवाद।


    iptables -P INPUT ACCEPT 
    iptables -P OUTPUT ACCEPT 
    iptables -P FORWARD DROP 

    # allow establishment of connections initialised by my outgoing packets 
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

    # accept anything on localhost 
    iptables -A INPUT -i lo -j ACCEPT 

    ################################################################ 
    #individual ports tcp 
    ################################################################ 
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT 
    iptables -A INPUT -p tcp --dport 8080 -j ACCEPT 

    #drop everything else 
    iptables -A INPUT -j DROP 

    ################################################################ 
    #Redirection Rules 
    ################################################################ 
    # redirection rules (allowing forwarding from localhost) 
    iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080 

    # redirection http 
    iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 

+0

आप पोर्ट 8080 को अवरुद्ध और httpd proxypass पर प्रसारण करने पर विचार किया? –

+0

सुझाव के लिए धन्यवाद। वर्तमान में इस सर्वर पर कोई अपाचे या mod_proxy उपलब्ध नहीं है (जो मुझे समझ में आता है ..?), लेकिन स्पष्ट रूप से यदि यह iptables - या मानक लिनक्स पैकेज के साथ संभव नहीं है - तो मुझे लगता है कि यह देखने के लिए कुछ है। – lazidar

उत्तर

20

एक तरह से मैं यह पूरा करने के पाया है वध करना तालिका के PREROUTING श्रृंखला में मार्क लक्ष्य का प्रयोग है।

पैकेट आप ब्लॉक करना चाहते टैग करने के लिए एक नियम जोड़ें:

iptables -t mangle -A PREROUTING -p tcp --dport 8080 -j MARK --set-mark 1 

फिर, इससे पहले कि आप पोर्ट 8080 इस ऐड चिह्नित पैकेट छोड़ सकेंगे:

iptables -A INPUT -m mark --mark 1 -j DROP 
+0

बिल्कुल सही - मैं सोच रहा था कि यह केवल iptables के साथ संभव था, लेकिन यह अच्छी तरह से काम किया। धन्यवाद। – lazidar

+0

@lazidar यदि यह सही था तो आप इसे सही क्यों चिह्नित नहीं करते हैं। –

+1

जब मैंने कोशिश की तो मुझे अनुमति नहीं थी - उसने मुझे बताया कि मेरे पास पर्याप्त प्रतिष्ठा नहीं है! ... मैं कुछ भी अक्सर सुनता हूं। – lazidar

2

मैं एक थोड़ा में यह संभाला अलग तरीका। मैंने 443 से 3000 (ऊपर के रूप में) को अग्रेषित किया, लेकिन 3000 से 443 को भी अग्रेषित किया। मैं फिर 3000 पर यातायात की अनुमति देता हूं लेकिन 443 पर इसे अवरुद्ध करता हूं। 443 यातायात को फ़िल्टर करना केवल मूल रूप से बंदरगाह 3000 से होना चाहिए।

मैं ufw का उपयोग कर रहा हूं इसलिए उस उपकरण का उपयोग करके फिल्टर नियम दर्ज किए गए थे। मैंने /etc/ufw/before.rules में नेट नियम जोड़े।

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3000 

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 3000 -j REDIRECT --to-ports 443 
संबंधित मुद्दे