it-swarm.com.de

Nur lokale Benutzer in Nginx zulassen

Ich möchte den Zugriff für einige VHosts einschränken, damit nur 127.0.0.1 darauf zugreifen kann. Ich habe immer so etwas verwendet, um den VHost an den lokalen Host und nicht an die externe IP zu binden:

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

Ich habe jedoch festgestellt, dass einige Tutorials auch explizite allow Direktiven für den localhost enthalten und alle anderen ausdrücklich ablehnen:

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

Werden diese allow/deny Direktiven wirklich benötigt, wenn ich bereits bei 127.0.0.1 höre?

22
Biggie

Die Anweisung listen teilt dem Betriebssystem mit, an welche Schnittstelle sich der Webserver bindet. Also, wenn Sie netstat -a Nach dem Start von nginx sehen Sie, dass nginx nur den IP-Port 80 von 127.0.0.1 überwacht. Dies bedeutet, dass der nginx-Server nicht über eine andere Schnittstelle erreichbar ist.

Die Bindung an eine bestimmte IP-Adresse funktioniert im tatsächlichen Netzwerkstapel auf einer niedrigeren Ebene als die Anweisungen allow/deny in der Nginx-Konfiguration.

Dies bedeutet, dass Sie in Ihrer Konfiguration für Ihren Anwendungsfall keine separaten allow/deny -Direktiven benötigen, da die Verbindungen im Netzwerkstapel niedriger sind.

Wenn Sie listen 80; nur und verwenden Sie die Anweisungen allow/deny, dann sendet nginx einen HTTP-Fehlercode an den Client und teilt mit, dass der Zugriff verweigert wird.

Mit dem listen 127.0.0.1; In diesem Fall kann der Browser überhaupt keine Verbindung zum Server herstellen, da kein TCP - Port geöffnet ist, zu dem der Browser eine Verbindung herstellen kann.

15
Tero Kilkanen

Angenommen, Ihre Netzwerk-ID lautet 192.168.1.0, bearbeite deine conf-Datei wie folgt:

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

Bitte lassen Sie mich wissen, wie es bei Ihnen funktioniert.

Edit # 1:

Ja, die Erlaubnisrichtlinie ist ein Muss gemäß dem Official Nginx Wiki . Ihr Beispiel ist:

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

Ich wollte die gleiche Funktionalität erreichen (nur lokale Benutzer in Nginx zulassen) und fand heraus, dass ich so etwas Einfaches tun kann:

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

Diese Konfigurationsdatei funktioniert gut für mich, ich verwende keine allow Direktive, sondern nur 127.0.0.1:80, und damit kann ich den Nginx-Zugriff nur auf lokale Benutzer beschränken!

5
pebox11