Como posso verificar se o $ remote_addr IP NÃO está no intervalo CIDR em nginx?

4

Estou usando nginx latest web server . Como posso verificar se o $remote_addr ip NÃO está especificado em CIDR range e return appropriate error code .

Gostaria de retornar códigos de erro específicos se o IP NÃO estiver em intervalos de IP do CIDR específicos.

como posso fazer isso para o intervalo de IP do CIDR ? por exemplo.

  • Se remote_addr não estiver em 123.123.123.123/24, retorne o código 444.
por AMB 16.12.2015 / 14:17

1 resposta

9

Você pode usar a diretiva geo para especificar intervalos de endereços IP.

Veja um exemplo:

geo $block_these_turkeys {
    default         0;
    192.0.2.0/24    1;
    198.51.100.0/24 1;
    203.0.113.0/24  1;
    2001:db8::/32   1;
}

Isso deve estar no bloco http , fora de qualquer bloco server .

Define a variável $block_these_turkeys para o valor fornecido, com base em se o endereço IP corresponde a uma das listagens.

Mais tarde, no bloco server em que você deseja usá-lo, faça algo como:

server {
    ....
    if ($block_these_turkeys) {
        return 444;
    }
    ....
}

Ao reverter o valor, você pode permitir intervalos de IP.

geo $block_almost_everybody {
    default         1;
    192.0.2.0/24    0;
    198.51.100.0/24 0;
    203.0.113.0/24  0;
    2001:db8::/32   0;
}

server {
    ....
    if ($block_almost_everybody) {
        return 444;
    }
    ....
}
    
por 16.12.2015 / 14:29

Tags