Consenti solo agli utenti locali in nginx


22

Voglio limitare l'accesso per alcuni VHosts in modo che solo 127.0.0.1 possa accedervi. Ho sempre usato qualcosa di simile per associare VHost al localhost e non all'IP esterno:

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

Ma ho notato che alcuni tutorial includono anche allowdirettive esplicite per l'host locale e negano esplicitamente tutti gli altri:

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

Queste allow/ denydirettive sono davvero necessarie quando ascolto già solo a 127.0.0.1?


Prova a cambiare la linea di permesso in:allow 127.0.0.1/32;
Itai Ganot,

La mia domanda è se ho bisogno che allowa tutti perché ho impostato listena 127.0.0.1.
Biggie,

Risposte:


15

La listendirettiva indica al sistema operativo su quale interfaccia si lega il server Web stesso. Quindi, quando guardi netstat -adopo aver avviato nginx, vedrai che nginx è in ascolto solo sulla porta IP 127.0.0.1 80, il che significa che il server nginx non può essere raggiunto tramite qualsiasi altra interfaccia.

Il binding a un indirizzo IP specifico funziona a un livello inferiore nello stack di rete effettivo rispetto alle direttive allow/ denyall'interno della configurazione di nginx.

Ciò significa che non è necessario disporre di direttive allow/ separate denyall'interno della configurazione con il caso d'uso, poiché le connessioni sono limitate più in basso nello stack di rete.

Se specifichi listen 80;solo e usi allow/ denydirettive, allora nginx invierà un codice di errore HTTP al client, comunicando che l'accesso è negato.

In questo listen 127.0.0.1;caso, il browser non è in grado di connettersi al server, poiché non esiste una porta TCP aperta per il browser a cui connettersi.


1
Okay, ho dimenticato di dire che ho altri VHosts e alcuni di essi non sono legati solo a localhost. Tutti (solo locale e non locale) sono in esecuzione sulla stessa istanza nginx. netstatMostra quindi un indirizzo locale di 0.0.0.0:80(tutte le interfacce). Posso quindi omettere deny/ allowsui server solo locali?
Biggie,

In questo caso, nginx mostrerà il contenuto dell'host virtuale che è stato definito con listen 80 default_server;direttiva quando un client richiede un vhost associato 127.0.0.1:80. Se non hai un default_serverdefinito, mostrerà un server che ha listen 80;definito.
Tero Kilkanen,

OK, quindi non è possibile che gli utenti non locali possano accedere ai listen 127.0.0.1server e non ho nemmeno bisogno di allow/denyquesti server?
Biggie,

Sì, non c'è possibilità per quello.
Tero Kilkanen,

Questo risponde alla domanda, a differenza dell'attuale risposta principale. Perché non è in alto?
Jortstek,

16

Supponiamo che il tuo ID di rete sia 192.168.1.0, modifica il tuo file conf in questo modo:

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

Per favore fatemi sapere come funziona per voi.

Modifica n. 1:

Sì, la direttiva allow è un must secondo il wiki ufficiale di Nginx . Il loro esempio è:

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

1
Ho molta voglia di limitare l'accesso a 127.0.0.1;) La mia domanda è se ho bisogno che allowa tutti perché ho già messo listena 127.0.0.1.
Biggie,

Controlla Modifica # 1.
Itai Ganot,

Sry, non credo che tu capisca la mia domanda;) Quello che hai pubblicato è (più o meno) già quello che ho scritto nella mia domanda sopra. Ma questa non è una risposta alla mia domanda.
Biggie,

1
@Biggie Non è necessario limitare l'accesso a 127.0.0.1, è disponibile solo sul computer locale.
user9517 supporta GoFundMonica il

Presumibilmente questo è tutto vero, ma in particolare non risponde alla domanda di OP! La risposta accettata fa.
Jortstek,

4

Volevo ottenere la stessa funzionalità (consentire solo agli utenti locali in nginx) e ho capito che posso fare qualcosa di semplice come questo:

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

Questo file di configurazione funziona bene per me, non sto usando alcuna allowdirettiva, ma solo 127.0.0.1:80e con ciò sono in grado di limitare l'accesso nginx solo agli utenti locali!


risposta semplice e eccellente per limitare agli utenti locali.
new2cpp
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.