Permitir apenas usuários locais no nginx

18

Eu quero restringir o acesso de alguns VHosts para que apenas o 127.0.0.1 possa acessá-lo. Eu sempre usei algo assim para ligar o VHost ao localhost 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 diretivas allow explícitas para o host local e negam todas as outras:

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

Essas diretivas allow / deny são realmente necessárias quando eu já ouço apenas 127.0.0.1?

    
por Biggie 15.02.2015 / 14:52

3 respostas

12

A diretiva listen informa ao sistema operacional em qual interface o servidor da web se vincula. Então, quando você olhar para netstat -a após iniciar o nginx, verá que o nginx escuta apenas na porta IP 127.0.0.1, o que significa que o servidor nginx não pode ser acessado através de qualquer outra interface.

A vinculação a um endereço IP específico funciona em um nível inferior na pilha de rede real do que as diretivas allow / deny dentro da configuração do nginx.

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

Se você especificar listen 80; only e usar allow / deny directives, o nginx enviará um código de erro HTTP para o cliente, informando que o acesso foi negado.

Com o caso listen 127.0.0.1; , o navegador não pode se conectar ao servidor, porque não há nenhuma porta TCP aberta para o navegador se conectar.

    
por 15.02.2015 / 20:09
17

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

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ê.

Editar # 1:

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

location / {
    allow 192.168.1.1/24;
    allow 127.0.0.1;
    deny 192.168.1.2;
    deny all;
}
    
por 15.02.2015 / 15:03
0

Eu queria alcançar a mesma funcionalidade (permitir somente usuários locais no nginx) e descobri que posso fazer algo simples assim:

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 diretiva allow , mas apenas 127.0.0.1:80 e, com isso, posso restringir o acesso do nginx somente a usuários locais!

    
por 17.05.2018 / 13:12

Tags