Estou tentando restringir o acesso aos recursos por trás do Nginx com base no IP do cliente passado nos cabeçalhos X-encaminhados. O Nginx está sendo executado em um contêiner em um cluster Kubernetes no Google Cloud Platform e os ips de clientes reais são passados apenas no cabeçalho x-forwarded-for
Até agora, 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 intervalos inteiros de IPs? Especificar centenas de IPs manualmente não faz muito sentido.
Toda ajuda é apreciada
location / { real_ip_header X-Forwarded-For; set_real_ip_from 10.0.0.0/8; real_ip_recursive on; allow xxx.xxx.xxx.xxx;
X-Forwarded-For: <unverified IP(s)>, <immediate client IP>, <global forwarding rule external IP>, <proxies running in GCP> (requests only)
A entrada <IP do cliente imediato> é o cliente que se conectou diretamente ao balanceador de carga.<global forwarding rule external IP>
e<proxies running in GCP>
e adicioneset_real_ip_from
declarações cobrindo todos eles.<global forwarding rule external IP>
é o ip externo do meu serviço, não há outros proxies no GCP. Nos meus logs do nginx, vejo solicitações no seguinte formato em[31/Jul/2017:20:05:46 +0000] "GET / HTTP/1.1" 403 169 "-" "curl/7.54.0" "aaa.aaa.aaa.aaa, bbb.bbb.bbb.bbb, ccc.ccc.ccc.ccc"
que ccc.ccc.ccc.ccc é uma regra de encaminhamento global, bbb.bbb.bbb.bbb um cliente imediato ip - corresponde ao que eu vejo no whatsmyip.org. Alguma chance de você aconselhar como extrair essa parte?set_real_ip_from
de todos os endereços à direita daquele que deseja permitir / negar. Conforme indicado nareal_ip_recursive
seção.