nginxでローカルユーザーのみを許可する


22

一部のVHostのアクセスを制限して、127.0.0.1のみがアクセスできるようにします。私は常にこのようなものを使用して、外部ホストではなくローカルホストにVHostをバインドしました。

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

しかし、いくつかのチュートリアルにはallow、localhostの明示的なディレクティブも含まれており、他のすべてを明示的に拒否していることに気付きました。

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;
板井Ganot

私の質問は、私がいることを必要とするかどうかであるallowすべてで私が設定されているためlisten127.0.0.1
ビギー

回答:


15

このlistenディレクティブは、Webサーバーが自分自身をバインドするインターフェイスについてオペレーティングシステムに指示します。そのため、netstat -anginxの起動後に見ると、nginxは127.0.0.1 IPポート80のみでリッスンしていることがわかります。これは、nginxサーバーが他のインターフェイスを介して到達できないことを意味します。

特定のIPアドレスへのバインドは、nginx設定内のallow/ denyディレクティブよりも実際のネットワークスタックの下位レベルで機能します。

これは、接続がネットワークスタックの下位に制限されるため、ユースケースの構成内に個別のallow/ denyディレクティブが必要ないことを意味します。

/ ディレクティブlisten 80;のみを指定してallow/ denyディレクティブを使用すると、nginxはHTTPエラーコードをクライアントに送信し、アクセスが拒否されたことを通知します。

このlisten 127.0.0.1;場合、ブラウザが接続するTCPポートが開いていないため、ブラウザはサーバーにまったく接続できません。


1
さて、私はいくつかのVHostがあり、それらのいくつかはlocalhostだけでなくバインドされていることを言及するのを忘れました。それらのすべて(ローカルのみおよび非ローカル)は同じnginxインスタンスで実行されています。したがってnetstat、ローカルアドレス0.0.0.0:80(すべてのインターフェイス)が表示されます。ローカル専用サーバーでdeny/ allowを省略できますか?
ビギー

この場合、nginxはlisten 80 default_server;、クライアントがにバインドされたvhostを要求すると、ディレクティブで定義された仮想ホストの内容を表示し127.0.0.1:80ます。default_server定義されていない場合は、定義されたサーバーが表示listen 80;されます。
テロキルカネン

OK、それで、非ローカルユーザーがlisten 127.0.0.1-serversにアクセスできる可能性はありません、そして、私はallow/denyこれらのサーバーでさえ必要としませんか?
ビギー

はい、その可能性はありません。
テロキルカネン

これは、現在のトップアンサーとは異なり、質問に答えます。なぜトップではないのですか?
Jortstek

16

ネットワークIDが192.168.1.0であるとしましょう。confファイルを次のように編集します。

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:

はい、Nginx公式wikiによると、allowディレクティブは必須です。例は次のとおりです。

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を確認してください。
イタイガノ

申し訳ありませんが、あなたは私の質問を理解していないと思います;)あなたが投稿したのは、(多かれ少なかれ)すでに私の質問で書いたものです。しかし、それは私の質問に対する答えではありません。
ビギー

1
@Biggieアクセスを127.0.0.1に制限する必要はありません。ローカルマシンでのみ利用可能です。
user9517はGoFundMonicaを

おそらくこれはすべて真実ですが、特にOPの質問には答えません!受け入れられた答えはそうです。
Jortstek

4

同じ機能(nginxのローカルユーザーのみを許可する)を実現したかったので、次のような簡単なことができることがわかりました。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.