Permitir apenas usuários locais no nginx


22

Quero restringir o acesso de alguns VHosts para que apenas 127.0.0.1 possa acessá-lo. Eu sempre usei algo assim para ligar o VHost ao host local e não ao IP externo:

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

Mas notei que alguns tutoriais também incluem allowdiretrizes explícitas para o host local e negam expictly todos os outros:

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

Essas allow/ denydiretivas são realmente necessárias quando eu já escuto apenas no 127.0.0.1?


Tente alterar a linha de permissão para:allow 127.0.0.1/32;
Itai Ganot 15/02

Minha pergunta é se eu preciso disso allow, porque defini listencomo 127.0.0.1.
Biggie

Respostas:


15

A listendiretiva informa ao sistema operacional em qual interface o servidor da web se liga. Portanto, quando você observar netstat -aapós iniciar o nginx, verá que o nginx escuta apenas na porta IP 127.0.0.1 80, o que significa que o servidor nginx não pode ser acessado por nenhuma outra interface.

A ligação a um endereço IP específico funciona em um nível mais baixo na pilha de rede real do que as diretivas allow/ denyna configuração nginx.

Isso significa que você não precisa de diretrizes allow/ separadas denydentro da sua configuração com o seu caso de uso, porque as conexões são limitadas mais abaixo na pilha de rede.

Se você especificar listen 80;apenas e usar allow/ denydiretivas, o nginx enviará um código de erro HTTP ao cliente, informando que o acesso é negado.

Nesse listen 127.0.0.1;caso, o navegador não pode se conectar ao servidor, porque não há uma porta TCP aberta para a conexão do navegador.


1
Ok, esqueci de mencionar que tenho mais VHosts e alguns deles estão vinculados não apenas ao host local. Todos eles (somente local e não local) estão em execução na mesma instância nginx. Assim, netstatmostra um endereço local de 0.0.0.0:80(todas as interfaces). Ainda posso omitir deny/ allownos servidores somente locais?
Biggie

Nesse caso, o nginx mostrará o conteúdo do host virtual que foi definido com a listen 80 default_server;diretiva quando um cliente solicitar um vhost vinculado 127.0.0.1:80. Se você não tiver um default_serverdefinido, ele mostrará um servidor que o listen 80;definiu.
Tero Kilkanen

OK, então não há possibilidade de que usuários não locais possam acessar listen 127.0.0.1servidores e eu nem preciso allow/denydesses servidores?
Biggie

Sim, não há possibilidade disso.
Tero Kilkanen

Isso responde à pergunta, diferente da resposta atual atual. Por que não é top?
Jortstek 14/11

16

Digamos que seu ID de rede seja 192.168.1.0, edite seu arquivo conf da seguinte maneira:

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, deixe-me saber como isso funciona para você.

Edição nº 1:

Sim, a diretiva allow é obrigatória, de acordo com o wiki oficial do Nginx . O exemplo deles é:

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

1
Eu realmente quero limitar o acesso a 127.0.0.1;) A minha pergunta é se eu preciso que allowem tudo porque eu já definido listenpara 127.0.0.1.
Biggie

Por favor, verifique Edit # 1.
Itai Ganot 15/02

Sry, acho que você não entendeu minha pergunta;) O que você postou já é (mais ou menos) o que escrevi na minha pergunta acima. Mas isso não é uma resposta para minha pergunta.
Biggie

1
@ Biggie Você não precisa limitar o acesso ao 127.0.0.1, ele está disponível apenas na máquina local.
user9517 suporta GoFundMonica 15/02

Presumivelmente, tudo isso é verdade, mas especificamente não responde à pergunta da OP! A resposta aceita aceita.
Jortstek 14/11

4

Queria alcançar a mesma funcionalidade (permitir apenas usuários locais no nginx) e descobri que posso fazer algo simples como este:

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 arquivo de configuração funciona bem para mim, não estou usando nenhuma allowdiretiva, mas apenas 127.0.0.1:80, e com isso sou capaz de restringir o acesso do nginx apenas aos usuários locais!


resposta excelente e simples para limitar os usuários locais.
new2cpp 2/11
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.