Hanya izinkan pengguna lokal di nginx


22

Saya ingin membatasi akses untuk beberapa VHosts sehingga hanya 127.0.0.1 yang dapat mengaksesnya. Saya selalu menggunakan sesuatu seperti ini untuk mengikat VHost ke localhost dan bukan IP eksternal:

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

Tapi saya perhatikan bahwa beberapa tutorial juga termasuk allowarahan eksplisit untuk localhost dan secara eksplisit menyangkal semua yang lain:

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

Apakah ini allow/ denyarahan benar-benar diperlukan ketika saya sudah mendengarkan hanya di 127.0.0.1?


Coba ubah garis bolehkan ke:allow 127.0.0.1/32;
Itai Ganot

Pertanyaan saya adalah apakah saya perlu itu allowsama sekali karena saya set listenke 127.0.0.1.
Biggie

Jawaban:


15

The listendirektif memberitahu sistem operasi pada apa antarmuka mengikat web server itu sendiri. Jadi, ketika Anda melihat netstat -asetelah memulai nginx, Anda akan melihat bahwa nginx hanya mendengarkan 127.0.0.1 IP port 80, yang berarti bahwa server nginx tidak dapat dijangkau melalui antarmuka lain.

Mengikat ke alamat IP tertentu bekerja di level yang lebih rendah di tumpukan jaringan aktual daripada allow/ denyarahan di dalam konfigurasi nginx.

Ini berarti bahwa Anda tidak perlu terpisah allow/ denyarahan di dalam konfigurasi Anda dengan use case Anda, karena koneksi dibatasi lebih rendah di tumpukan jaringan.

Jika Anda listen 80;hanya menentukan , dan menggunakan allow/ denyarahan, maka nginx akan mengirim kode kesalahan HTTP ke klien, memberi tahu bahwa akses ditolak.

Dengan listen 127.0.0.1;case ini, browser tidak dapat terhubung ke server sama sekali, karena tidak ada port TCP terbuka untuk browser untuk terhubung.


1
Oke, saya lupa menyebutkan bahwa saya memiliki lebih banyak VHosts dan beberapa dari mereka terikat tidak hanya pada localhost. Semua dari mereka (hanya lokal dan non-lokal) berjalan pada instance nginx yang sama. Dengan demikian netstatmenunjukkan alamat lokal 0.0.0.0:80(semua antarmuka). Lalu bisakah saya masih menghilangkan deny/ allowdi server hanya lokal?
Biggie

Dalam hal ini, nginx akan menampilkan konten dari host virtual yang telah ditentukan dengan listen 80 default_server;arahan ketika klien meminta vhost terikat 127.0.0.1:80. Jika Anda tidak memiliki yang default_serverditentukan, maka itu akan menampilkan server yang telah listen 80;ditetapkan.
Tero Kilkanen

OK, jadi tidak ada kemungkinan pengguna non-lokal dapat mengakses listen 127.0.0.1-server dan saya bahkan tidak perlu allow/denydi server ini?
Biggie

Ya, tidak ada kemungkinan untuk itu.
Tero Kilkanen

Ini menjawab pertanyaan, tidak seperti jawaban teratas saat ini. Kenapa tidak top?
Jortstek

16

Katakanlah ID jaringan Anda 192.168.1.0, edit file conf Anda seperti:

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

Tolong beri tahu saya cara kerjanya untuk Anda.

Edit # 1:

Ya, arahan izin adalah suatu keharusan menurut wiki Nginx Resmi . Contoh mereka adalah:

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

1
Aku benar-benar ingin membatasi akses ke 127.0.0.1;) Pertanyaan saya adalah apakah saya perlu itu allowsama sekali karena saya sudah diatur listenuntuk 127.0.0.1.
Biggie

Silakan periksa Edit # 1.
Itai Ganot

Sry, saya tidak berpikir Anda mengerti pertanyaan saya;) Apa yang Anda posting adalah (kurang lebih) sudah apa yang saya tulis dalam pertanyaan saya di atas. Tapi itu bukan jawaban untuk pertanyaan saya.
Biggie

1
@Biggie Anda tidak perlu membatasi akses ke 127.0.0.1, hanya tersedia di mesin lokal.
user9517 mendukung GoFundMonica

Mungkin ini semua benar, tetapi secara khusus tidak menjawab pertanyaan OP! Jawaban yang diterima tidak.
Jortstek

4

Saya ingin mencapai fungsionalitas yang sama (hanya mengizinkan pengguna lokal di nginx) dan saya menemukan bahwa saya dapat melakukan sesuatu yang sederhana seperti ini:

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

File konfigurasi ini berfungsi dengan baik untuk saya, saya tidak menggunakan allowarahan apa pun , tetapi hanya 127.0.0.1:80, dan dengan itu saya dapat membatasi akses nginx hanya untuk pengguna lokal!


jawaban yang bagus dan sederhana untuk membatasi pengguna lokal.
new2cpp
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.