Yalnızca yerel kullanıcıların nginx'te olmasına izin ver


22

Bazı VHosts'a erişimi sadece 127.0.0.1 erişebilecek şekilde sınırlamak istiyorum. VHost'u harici IP'ye değil, yerel ana bilgisayara bağlamak için her zaman böyle bir şey kullandım:

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

Ancak bazı derslerin allow, yerel ev sahibi için açık yönergeler içerdiğini ve diğerlerinin açıkça reddettiğini fark ettim :

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

Zaten sadece 127.0.0.1'de dinlediğimde, bu allow/ denyyönergelere gerçekten ihtiyaç var mı?


allow 127.0.0.1/32;
İzin

Sorum Buna ihtiyacım olup olmadığıdır allowbelirlediğim çünkü hiç listeniçin 127.0.0.1.
Biggie,

Yanıtlar:


15

listenYönergesi web sunucusu bağlar kendisi arayüz ne işletim sistemini anlatır. Böylece, netstat -anginx'i başlattıktan sonra baktığınızda, nginx'in sadece 127.0.0.1 IP portu 80'i dinlediğini göreceksiniz, bu, nginx sunucusunun başka herhangi bir arayüzden erişilemediği anlamına gelir.

Belirli bir IP adresine bağlanmak, asıl ağ yığında nginx yapılandırmasının içindeki allow/ denydirektiflerinden daha düşük bir seviyede çalışır .

Bu , kullanım durumunuzla birlikte yapılandırmanızın içinde ayrı allow/ denyyönlendirmelere gerek duymayacağınız anlamına gelir; çünkü bağlantılar ağ yığınında daha düşüktür.

Yalnızca belirtirseniz listen 80;ve allow/ denyyönergelerini kullanırsanız , nginx istemciye bir HTTP hata kodu gönderir ve erişimin reddedildiğini söyler.

Bu listen 127.0.0.1;durumda, tarayıcı sunucuya hiçbir şekilde bağlanamaz, çünkü tarayıcının bağlanabileceği açık bir TCP bağlantı noktası yoktur.


1
Tamam, biraz daha fazla VHoşum olduğunu ve bazılarının sadece yerel anaya bağlı olduğunu söylemeyi unuttum. Hepsi (sadece yerel ve yerel olmayan) aynı nginx örneğinde çalışıyor. Böylece netstatyerel bir adres gösterir 0.0.0.0:80(tüm arayüzler). Sonra yine omit Can deny/ allowyalnızca yerel sunucularda?
Biggie,

Bu durumda, nginx, listen 80 default_server;bir müşteri bağlı bir vhost istediğinde , direktif ile tanımlanmış sanal konağın içeriğini gösterecektir 127.0.0.1:80. Eğer bir default_servertanımınız yoksa, tanımlanmış bir sunucu gösterilecektir listen 80;.
Tero Kilkanen

Tamam, bu nedenle yerel olmayan kullanıcıların sunuculara erişebilme listen 127.0.0.1olasılığı yok allow/denyve bu sunuculara bile ihtiyacım yok ?
Biggie,

Evet, bunun imkanı yok.
Tero Kilkanen

Bu, şu anki üst cevabın aksine soruyu cevaplar. Neden üst değil?
Jortstek

16

Ağ kimliğinizin diyelim ki, 192.168.1.0conf dosyanızı şöyle düzenleyin:

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

Lütfen sizin için nasıl çalıştığını bana bildirin.

1. Düzenle:

Evet, izin talimatı, Resmi Nginx wiki'sine göre bir zorunluluktur . Onların örneği:

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

1
Gerçekten erişimi sınırlamak istiyor 127.0.0.1;) Buna ihtiyacım olup olmadığını Benim sorum allowben zaten ayarlanmış tüm çünkü en listenetmek 127.0.0.1.
Biggie,

Lütfen 1. Düzenle'yi kontrol edin.
Itai Ganot

Sry, sorumu anlamadığını sanmıyorum;) Gönderdiğin şey (aşağı yukarı) zaten benim soruma yazdığım şey. Ama bu sorumun cevabı değil.
Biggie,

1
@Biggie Erişimi 127.0.0.1 ile sınırlandırmanız gerekmez, yalnızca yerel makinede kullanılabilir.
user9517, 15:15

Muhtemelen tüm bunlar doğrudur, ancak özellikle OP'nin sorusunu cevaplamıyor! Kabul edilen cevap var.
Jortstek

4

Aynı işlevselliği elde etmek istedim (nginx'te sadece yerel kullanıcıların kullanımına izin verdim) ve bunun gibi basit bir şey yapabileceğimi öğrendim:

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

Bu yapılandırma dosyası benim için iyi çalışıyor, herhangi bir allowyönergeyi kullanmıyorum , ancak yalnızca 127.0.0.1:80ve bununla birlikte nginx erişimini yalnızca yerel kullanıcılara kısıtlayabiliyorum!


Yerel kullanıcıları sınırlamak için harika ve basit bir cevap.
new2cpp
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.