Permitir solo usuarios locales en nginx


22

Quiero restringir el acceso a algunos VHosts para que solo 127.0.0.1 pueda acceder a él. Siempre usé algo como esto para vincular el VHost al localhost y no a la IP externa:

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

Pero noté que algunos tutoriales también incluyen allowdirectivas explícitas para el host local y niegan explícitamente a todos los demás:

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

Son estos allow/ denydirectivas realmente necesarios cuando ya escuchar sólo a 127.0.0.1?


Intente cambiar la línea de allow 127.0.0.1/32;
permiso

Mi pregunta es si necesito eso allowporque me puse a listenhacerlo 127.0.0.1.
Biggie

Respuestas:


15

La listendirectiva le dice al sistema operativo en qué interfaz se une el servidor web. Entonces, cuando observa netstat -adespués de iniciar nginx, verá que nginx solo escucha en el puerto IP 127.0.0.1 80, lo que significa que no se puede acceder al servidor nginx a través de ninguna otra interfaz.

El enlace a una dirección IP específica funciona en un nivel inferior en la pila de red real que las directivas allow/ denydentro de la configuración de nginx.

Esto significa que no necesita directivas allow/ separaciones denydentro de su configuración con su caso de uso, porque las conexiones están limitadas en la pila de red.

Si listen 80;solo especifica , y usa allow/ denydirectivas, nginx enviará un código de error HTTP al cliente, indicando que el acceso es denegado.

Con el listen 127.0.0.1;caso, el navegador no puede conectarse al servidor en absoluto, porque no hay un puerto TCP abierto para que el navegador se conecte.


1
De acuerdo, olvidé mencionar que tengo algunos VHosts más y algunos de ellos están vinculados no solo a localhost. Todos ellos (solo locales y no locales) se ejecutan en la misma instancia nginx. Por lo tanto, netstatmuestra una dirección local de 0.0.0.0:80(todas las interfaces). ¿Puedo entonces omitir deny/ allowen los servidores solo locales?
Biggie

En este caso, nginx mostrará el contenido del host virtual que se ha definido con la listen 80 default_server;directiva cuando un cliente solicita un vhost vinculado 127.0.0.1:80. Si no tiene un default_serverdefinido, mostrará un servidor que lo ha listen 80;definido.
Tero Kilkanen

OK, entonces ¿no hay posibilidad de que usuarios no locales puedan acceder a los listen 127.0.0.1servidores y yo ni siquiera los necesito allow/denyen estos servidores?
Biggie

Sí, no hay posibilidad de eso.
Tero Kilkanen

Esto responde a la pregunta, a diferencia de la respuesta principal actual. ¿Por qué no es superior?
Jortstek

16

Digamos que su ID de red es 192.168.1.0, edite su archivo conf de esta manera:

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

Por favor déjame saber como funciona esto para ti.

Editar # 1:

Sí, la directiva de permiso es imprescindible según el wiki oficial de Nginx . Su ejemplo es:

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

1
Realmente quiero limitar el acceso a 127.0.0.1;) Mi pregunta es si lo necesito allowen absoluto, porque yo ya puse listena 127.0.0.1.
Biggie

Por favor marque Editar # 1.
Itai Ganot

Sry, no creo que entiendas mi pregunta;) Lo que has publicado es (más o menos) lo que ya escribí en mi pregunta anterior. Pero esa no es una respuesta a mi pregunta.
Biggie

1
@Biggie No tiene que limitar el acceso a 127.0.0.1, solo está disponible en la máquina local.
user9517 es compatible con GoFundMonica

¡Presumiblemente todo esto es cierto, pero específicamente no responde la pregunta de OP! La respuesta aceptada sí.
Jortstek

4

Quería lograr la misma funcionalidad (permitir solo usuarios locales en nginx) y descubrí que puedo hacer algo simple como esto:

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

Este archivo de configuración funciona bien para mí, no estoy usando ninguna allowdirectiva, sino solo 127.0.0.1:80, ¡y con eso puedo restringir el acceso nginx solo a usuarios locales!


Gran y simple respuesta para limitar a los usuarios locales.
new2cpp
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.