Como negar acesso a recursos com base em cabeçalhos X-forwarded-for

10

Estou tentando restringir o acesso a recursos por trás do Nginx com base no IP do cliente passado em cabeçalhos X-forwarded-for. O Nginx está sendo executado em um contêiner em um cluster do Kubernetes no Google Cloud Platform e os IPs do cliente real são transmitidos apenas no cabeçalho x-forwarded-for

Até agora eu consegui fazer isso por um único IP com o seguinte código:

set $allow false;
if ($http_x_forwarded_for ~* 123.233.233.123) {
    set $allow true;
}
if ($http_x_forward_for ~* 10.20.30.40) {
    set $allow false;
}
if ($allow = false) {
    return 403;
}

Mas como posso fazer isso para faixas inteiras de IPs? Especificar centenas de IPs manualmente não faz muito sentido.

Toda ajuda é apreciada

    
por p1hr 31.07.2017 / 17:53

2 respostas

8

Use o módulo RealIP para honrar o valor do cabeçalho X-Forwarded-For . Defina set_real_ip_from para o endereço IP do proxy reverso (o valor atual de $remote_addr ).

Por exemplo:

server {
    ...
    real_ip_header X-Forwarded-For;
    set_real_ip_from 10.1.2.3;
    ...
}

Agora você deve poder usar as diretivas $remote_addr e allow / deny usando o verdadeiro endereço IP do cliente. Consulte este documento para saber mais.

    
por 31.07.2017 / 18:41
3

A resposta de Richard já continha as informações sobre como melhor obter o endereço IP real para o nginx.

Enquanto isso, o que se trata de especificar os intervalos de IPs é usar o link .

O módulo geo funciona como o módulo map , ou seja, uma variável recebe valores atribuídos dependendo do valor do endereço IP.

Um exemplo:

geo $allow {
    default 0;
    192.168.168.0/24 1;
}

server {
    real_ip_header X-Forwarded-For;
    set_real_ip_from 10.1.2.3;

    if ($allow = 0) {
        return 403;
    }
}

Aqui, atribuímos o geo map, onde o valor padrão para $allow é 0. Se o endereço IP estiver na sub-rede 192.168.168.0/24 , $allow obterá o valor 1 e a solicitação será permitida. / p>

Você pode ter tantas linhas no bloco geo quanto precisar definir seus intervalos de IP.

    
por 31.07.2017 / 20:07

Tags