Como negar solicitações que contenham um determinado cabeçalho e não sejam provenientes de IPs na lista de permissões no nginx?

1

Gostaria de proteger uma aplicação que usa um cabeçalho personalizado para autorizar algumas visualizações críticas. Como essas chamadas devem originar-se apenas de alguns IPs conhecidos, gostaria de bloquear solicitações contendo esse cabeçalho personalizado (digamos X-SuperAdminToken) e não originar de IPs listados em branco.

Algo como:

if ($http_xsuperadmintoken) {
  allow 192.168.1.0/24;
  allow 10.1.2.3;
  deny all;
}

mas parece que não estou autorizado a colocar uma diretiva allow dentro de um bloco if:

# nginx -t                                                                                                    
nginx: [emerg] "allow" directive is not allowed here in /etc/nginx/sites-  enabled/default:44

Não encontrei uma solução alternativa para isso.

    
por ascobol 16.12.2015 / 15:33

1 resposta

2

Você poderia tentar algo nesse sentido. Você precisa adicionar suas próprias informações, incluindo detalhes do bloco de localização, mas isso deve funcionar

location / {
    error_page 412 = @checkip;
    recursive_error_pages on;

    if ($something) {
        return 412;
    }

}

location @checkip {
    allow 192.168.1.0/24;
    allow 10.1.2.3;
    deny all;
    }

O que isto faz é verificar o $ algo e se retornar um erro 412, isso é então tratado pelo bloco @checkip, onde nós então verificamos o endereço IP.

    
por 16.12.2015 / 16:31