Protegendo um local por IP enquanto aplica a autenticação básica em qualquer outro lugar

2

Eu quero alcançar os seguintes resultados:

  • Aplicar autenticação básica a QUALQUER local, arquivo, caminho
  • Remover autenticação básica para uma lista de permissões do intervalo IP / CIDR
  • Impeça TODO o acesso a um diretório específico e a tudo o que estiver abaixo dele, para todos, exceto um endereço IP (o acima é incluído)

Esta é a configuração do nginx que estou usando:

server {
    listen 80 default;

    # Basic auth
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;

    satisfy any;
    # IP whitelist
    include /etc/nginx/conf.d/ip-whitelist.conf.include;
    deny all;

    # Lock down the "hello" directory to specific IP addresses
    location /hello/ {
        # Developers only - ever!
        allow 12.34.56.78;
        deny all;
    }
    # ...
}

O que está acontecendo no momento é que o ponto um e dois na lista acima estão funcionando - ou seja, qualquer IP na lista de desbloqueio não possui autenticação básica no site, mas se o IP não estiver na lista de permissões, será solicitado autenticação básica.

No entanto, o bloco de localização para "olá" não parece funcionar, e ainda está permitindo as mesmas condições acima para qualquer coisa sob o diretório "olá", por exemplo, Se eu tentar acessar /hello/world.php de um IP da lista de permissões, ele será exibido. Se eu acessá-lo de um IP não permitido, recebo autenticação básica.

Eu quero impedir qualquer acesso ao diretório "olá" para todos que não sejam o% IP% co_de (exemplo).

O que eu preciso mudar?

    
por Robbie Averill 11.01.2016 / 23:06

1 resposta

7

Como você descobriu, não é recomendável definir as configurações de autenticação no nível do servidor, pois elas se aplicam a todos os locais. Embora seja possível desativar a autenticação básica, não parece haver uma maneira de limpar uma lista de permissões de IP existente.

Uma solução melhor seria adicionar a autenticação ao local / para que não seja herdada por /hello .

O problema ocorre se você tiver outros locais que exigem a lista de permissões básica de auth e IP, caso em que pode valer a pena considerar mover os componentes de autenticação para um arquivo de inclusão ou aninhá-los em / .

server {
    listen 80 default;

    # Lock down the "root" directory to specific IP addresses
    location / {
        satisfy any;

        # Basic auth
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;

        # IP whitelist
        include /etc/nginx/conf.d/ip-whitelist.conf.include;
        deny all;

        # Inherits auth settings from parent
        location ~ \.php$ {
            # PHP specific config
        }
    }

    # Lock down the "hello" directory to specific IP addresses
    location /hello/ {
        # Developers only - ever!
        allow 12.34.56.78;
        deny all;
    }
    # ...
}
    
por 12.01.2016 / 05:04