केवल स्थानीय उपयोगकर्ताओं को nginx में अनुमति दें


22

मैं कुछ VHosts के लिए एक्सेस को प्रतिबंधित करना चाहता हूं ताकि केवल 127.0.0.1 ही इसे एक्सेस कर सके। मैं हमेशा कुछ ऐसा करता था कि VHost को लोकलहोस्ट से बाँधूँ न कि बाहरी IP को:

server {
    listen 127.0.0.1;
    server_name myvhost.local;
    location / {
        ....
    }
}

लेकिन मैंने देखा कि कुछ ट्यूटोरियल allowमें लोकलहोस्ट के स्पष्ट निर्देश भी शामिल हैं और अन्य सभी को स्पष्ट रूप से अस्वीकार करते हैं:

server {
    listen 127.0.0.1;
    server_name myvhost.local;
    location / {
        allow 127.0.0.1;
        deny all;
        ...
    }
}

इन कर रहे हैं allow/ denyनिर्देशों वास्तव में जरूरत है जब मैं पहले से ही केवल 127.0.0.1 पर सुनने?


अनुमति रेखा को बदलने का प्रयास करें:allow 127.0.0.1/32;
इटाई गनोट

मेरे सवाल यह है कि मुझे लगता है कि जरूरत है allowक्योंकि मैं सेट सब पर listenकरने के लिए 127.0.0.1
Biggie

जवाबों:


15

listenनिर्देश क्या वेब सर्वर बांध ही इंटरफेस पर ऑपरेटिंग सिस्टम बताता है। इसलिए, जब आप netstat -anginx शुरू करने के बाद देखते हैं, तो आप देखेंगे कि nginx केवल 127.0.0.1 IP पोर्ट 80 पर सुनता है, जिसका अर्थ है कि nginx सर्वर को किसी अन्य इंटरफ़ेस के माध्यम से नहीं पहुँचा जा सकता है।

एक विशिष्ट आईपी पते पर बांधना नेटिक कॉन्फ़िगरेशन के अंदर allow/ denyनिर्देशों की तुलना में वास्तविक नेटवर्क स्टैक में निचले स्तर पर काम करता है ।

इसका मतलब है कि आपको अपने उपयोग मामले के साथ अपने कॉन्फ़िगरेशन के अंदर अलग allow/ denyनिर्देशों की आवश्यकता नहीं है , क्योंकि कनेक्शन नेटवर्क स्टैक में सीमित हैं।

यदि आप listen 80;केवल निर्दिष्ट करते हैं, और allow/ denyनिर्देशों का उपयोग करते हैं , तो nginx क्लाइंट को एक HTTP त्रुटि कोड भेजेगा, बताएं कि पहुंच से वंचित है।

listen 127.0.0.1;मामले के साथ , ब्राउज़र सर्वर से बिल्कुल भी कनेक्ट नहीं हो सकता है, क्योंकि ब्राउज़र से कनेक्ट करने के लिए कोई टीसीपी पोर्ट नहीं खुला है।


1
ठीक है, मैं यह बताना भूल गया कि मेरे पास कुछ और VHost हैं और उनमें से कुछ न केवल लोकलहोस्ट के लिए बाध्य हैं। वे सभी (स्थानीय-केवल और गैर-स्थानीय) एक ही नग्नेक्स-इंस्टेंस पर चल रहे हैं। इस प्रकार (सभी इंटरफेस) netstatका एक स्थानीय पता दिखाता है 0.0.0.0:80। क्या मैं अभी भी स्थानीय-केवल सर्वरों पर deny/ छोड़ सकता हूँ allow?
बिग जी

इस मामले में, nginx वर्चुअल होस्ट की सामग्रियों को दिखाएगा जो कि listen 80 default_server;एक क्लाइंट के लिए बाध्य करने के लिए पूछते समय निर्देश के साथ परिभाषित किया गया है 127.0.0.1:80। यदि आपके पास default_serverपरिभाषित नहीं है , तो यह एक सर्वर दिखाएगा जिसने listen 80;परिभाषित किया है।
तेरो किलकेनन

ठीक है, इसलिए इस बात की कोई संभावना नहीं है कि गैर-स्थानीय उपयोगकर्ता पहुँच-प्राप्त कर सकते हैं listen 127.0.0.1और मुझे allow/denyइन सर्वरों की आवश्यकता भी नहीं है?
Biggie

हां, इसके लिए कोई संभावना नहीं है।
तेरो किल्केन

यह वर्तमान शीर्ष उत्तर के विपरीत प्रश्न का उत्तर देता है। यह शीर्ष क्यों नहीं है?
जोर्स्टेक

16

मान लीजिए कि आपकी नेटवर्क आईडी है 192.168.1.0, अपनी गोपनीय फ़ाइल को इस तरह संपादित करें:

location / {
  # block one workstation
  deny    192.168.1.1;
  # allow anyone in 192.168.1.0/24
  allow   192.168.1.0/24;
  # drop rest of the world
  deny    all;
}

कृपया मुझे बताएं कि यह आपके लिए कैसे काम करता है।

# 1 संपादित करें:

हां, आधिकारिक निग्नेक्स विकी के अनुसार अनुमति आवश्यक है । उनका उदाहरण है:

location / {
    allow 192.168.1.1/24;
    allow 127.0.0.1;
    deny 192.168.1.2;
    deny all;
}

1
मैं वास्तव में करने के लिए उपयोग को सीमित करना चाहते 127.0.0.1;) मेरे सवाल यह है कि मुझे लगता है कि जरूरत है allowक्योंकि मैं पहले से ही सेट पर listenकरने के लिए 127.0.0.1
Biggie

कृपया # 1 संपादित करें की जाँच करें।
इटई गनोट

Sry, मुझे नहीं लगता कि आप मेरे प्रश्न को समझते हैं;) आपने जो पोस्ट किया है, वह (कम या ज्यादा) पहले से ही है जो मैंने अपने प्रश्न में लिखा है। लेकिन यह मेरे सवाल का जवाब नहीं है।
Biggie

1
@Biggie आपको 127.0.0.1 तक पहुंच को सीमित करने की आवश्यकता नहीं है, यह केवल स्थानीय मशीन पर उपलब्ध है।
user9517

संभवतः यह सब सच है, लेकिन यह विशेष रूप से ओपी के सवाल का जवाब नहीं देता है! अभिज्ञात उत्तर देता है।
जोर्स्टेक

4

मैं उसी कार्यक्षमता को प्राप्त करना चाहता था (नगनेक्स में केवल स्थानीय उपयोगकर्ताओं को अनुमति दें) और मुझे लगा कि मैं इस तरह से कुछ सरल कर सकता हूं:

server {
    listen 127.0.0.1:80;

    index index.html index.htm index.nginx-debian.html;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        root /path/to/folder;
    }       

    location / {
        include proxy_params;
    }
}

यह कॉन्फ़िगरेशन फ़ाइल मेरे लिए ठीक काम करती है, मैं किसी allowनिर्देश का उपयोग नहीं कर रहा हूं , लेकिन केवल 127.0.0.1:80, और इसके साथ ही मैं केवल स्थानीय उपयोगकर्ताओं के लिए nginx पहुंच को प्रतिबंधित करने में सक्षम हूं!


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