Nginx- এ কেবল স্থানীয় ব্যবহারকারীদের মঞ্জুরি দিন


22

আমি কয়েকটি ভিএইচস্টের অ্যাক্সেসকে সীমাবদ্ধ করতে চাই যাতে কেবল 127.0.0.1 এটি অ্যাক্সেস করতে পারে। আমি সবসময় ভিহোস্টকে লোকালহোস্টের সাথে আবদ্ধ করতে ব্যবহার করি, বাহ্যিক আইপি নয়:

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;
        ...
    }
}

আমি ইতিমধ্যে কেবলমাত্র 127.0.0.1 এ শুনিলে এই allow/ denyনির্দেশাবলীর কি সত্যই প্রয়োজন?


অনুমতি লাইনটি এতে পরিবর্তন করার চেষ্টা করুন:allow 127.0.0.1/32;
Itai Ganot

আমার প্রশ্ন কিনা আমি যে প্রয়োজন allowকারণ আমি সেট এ সব listenথেকে 127.0.0.1
বিগগি

উত্তর:


15

listenনির্দেশ কি ওয়েব সার্ভার বেঁধে নিজেই ইন্টারফেসে অপারেটিং সিস্টেম বলে। সুতরাং, আপনি যখন netstat -aএনগিনেক্স শুরু করার পরে দেখুন , আপনি দেখতে পাবেন যে এনগিনেক্স কেবল 127.0.0.1 আইপি পোর্ট 80 এ শুনবে, যার অর্থ এনগিনেক্স সার্ভারটি অন্য কোনও ইন্টারফেসের মাধ্যমে পৌঁছানো যায় না।

একটি নির্দিষ্ট আইপি ঠিকানার সাথে আবদ্ধ হওয়া এনজিএনএক্স কনফিগারেশনের ভিতরে allow/ denyনির্দেশকের চেয়ে প্রকৃত নেটওয়ার্ক স্ট্যাকের নিম্ন স্তরে কাজ করে ।

এর অর্থ হল আপনার ব্যবহারের ক্ষেত্রে আপনার কনফিগারেশনের অভ্যন্তরে পৃথক allow/ denyনির্দেশের প্রয়োজন নেই , কারণ নেটওয়ার্ক স্ট্যাকের সংযোগগুলি সীমাবদ্ধ।

আপনি যদি listen 80;কেবল নির্দিষ্ট করে থাকেন এবং নির্দেশ allow/ ব্যবহার করেন denyতবে nginx ক্লায়েন্টকে একটি HTTP ত্রুটি কোড প্রেরণ করবে, বলবে যে অ্যাক্সেস অস্বীকার করা হয়েছে।

কেসটি সহ listen 127.0.0.1;ব্রাউজারটি সার্ভারের সাথে মোটেই সংযোগ করতে পারে না, কারণ ব্রাউজারের সাথে সংযোগ করার জন্য কোনও টিসিপি পোর্ট খোলা নেই।


1
ঠিক আছে, আমি উল্লেখ করতে ভুলে গেছি যে আমার আরও কিছু ভিএইচটি রয়েছে এবং এর মধ্যে কিছু কেবল স্থানীয় লোকস্টের সাথে আবদ্ধ নয়। তাদের সমস্ত (স্থানীয়-কেবল এবং অ-স্থানীয়) একই nginx- দৃষ্টান্তে চলছে। এইভাবে (সমস্ত ইন্টারফেস) এর netstatস্থানীয় ঠিকানা দেখায় 0.0.0.0:80। আমি তখনও কেবল স্থানীয়-কেবল সার্ভারগুলিতে deny/ বাদ দিতে পারি allow?
বিগগি

এই ক্ষেত্রে, nginx ভার্চুয়াল হোস্টের বিষয়বস্তু প্রদর্শন করবে যা listen 80 default_server;নির্দেশক দিয়ে সংজ্ঞায়িত করা হয়েছে যখন কোনও ক্লায়েন্ট একটি vhost আবদ্ধ করার জন্য জিজ্ঞাসা করে 127.0.0.1:80। আপনার যদি default_serverসংজ্ঞায়িত না থাকে , তবে এটি এমন একটি সার্ভার প্রদর্শন করবে যা listen 80;সংজ্ঞায়িত হয়েছে।
টেরো কিলকানেন

ঠিক আছে, তাই স্থানীয়-স্থানীয় ব্যবহারকারীরা listen 127.0.0.1সার্ভারগুলি অ্যাক্সেস করতে পারে এমন কোনও সম্ভাবনা নেই এবং allow/denyএই সার্ভারগুলিতে আমারও দরকার নেই ?
বিগী

হ্যাঁ, এটির জন্য কোনও সম্ভাবনা নেই।
তেরো কিলকানেন

এটি বর্তমান শীর্ষ প্রশ্নের উত্তরের বিপরীতে প্রশ্নের উত্তর দেয়। কেন এটি শীর্ষে নেই?
জর্স্টটেক

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
বিগগি

দয়া করে সম্পাদনা # 1 পরীক্ষা করুন।
Itai Ganot

স্যার, আমি মনে করি না আপনি আমার প্রশ্নটি বুঝতে পেরেছেন;) আপনি যা পোস্ট করেছেন তা ইতিমধ্যে আমার উপরের প্রশ্নে যা লিখেছেন তা কমবেশি রয়েছে। তবে এটি আমার প্রশ্নের উত্তর নয়।
বিগগি

1
@ বিগজি আপনার 127.0.0.1 এ অ্যাক্সেস সীমাবদ্ধ করতে হবে না, এটি কেবলমাত্র স্থানীয় মেশিনে উপলব্ধ।
ব্যবহারকারী 9517 GoFundMonica

সম্ভবত এটি সত্য, তবে এটি বিশেষত ওপি-র প্রশ্নের উত্তর দেয় না! স্বীকৃত উত্তরটি দেয়।
জর্স্টটেক

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এবং এর সাথে আমি কেবল স্থানীয় ব্যবহারকারীদের কাছে এনজিএনএক্স অ্যাক্সেসকে সীমাবদ্ধ করতে সক্ষম!


স্থানীয় ব্যবহারকারীদের মধ্যে সীমাবদ্ধ করার জন্য দুর্দান্ত এবং সাধারণ উত্তর।
new2cpp
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.