NGINX Permitir / Negar com base na combinação de IP e Agente de Usuário

2

Eu tenho uma pergunta sobre a regra de permissão / negação para o NGINX com base no User Agent + IP.

Atualmente, tenho o seguinte no meu nginx.conf para permitir todas as conexões da Internet com base em um determinado valor do agente do usuário "iOS".

server { 
    proxy_set_header    Proxy-Connection "";

    listen      *:8443;
    server_name  myserver.com;

    if ($http_user_agent !~* (ELB|ios)) {
        return 403;
    }

    location / {
        proxy_http_version  1.1;
        proxy_pass        https://myserver;
        proxy_set_header Connection "upgrade";
    }
}

Eu queria permitir o acesso à seguinte combinação de:

  • Qualquer valor "IP" + "UserAgent" de 'iOS'

ou

  • Sub-rede IP 192.168.2.0/24 + valor "UserAgent" de 'chrome'

Obrigado antecipadamente.

    
por Vin 28.02.2016 / 19:36

1 resposta

0

Any "IP" + "UserAgent" value of 'iOS'

Então, tudo o que você precisa fazer é negar, por padrão, permitir qualquer UserAgent que seja iOS.

IP Subnet 192.168.2.0/24 + "UserAgent" value of 'chrome'

O que você está tentando fazer neste caso, se você criar um composto no Nginx.

O Jrom no GitHub criou um script para fazer isso.

link

Se criarmos um script usando o Jrom como um exemplo, use alguns para implementar um processo postado por kolbyjack , podemos fazer o que você está procurando.

set $test  DENIED;

geo $good_user {
  default 0;
  192.168.2.0/24 1;
}

if ($http_user_agent ~* (ELB|ios)) { 
  set $test  ALLOWED; 
} 

if ($good_user) { 
  set $test  DE; 
} 

if ($http_user_agent ~* (chrome)) { 
  set $test  "${test}V"; 
} 

if ($test = ALLOWED) { 
  proxy_pass https://myserver; 
  break; 
} 

if ($test = DEV) { 
  proxy_pass https://myserver; 
  break; 
} 

if ($test = DE) {
return 403;
}

if ($test = V) {
return 403;
}

if ($test = DENIED) {
return 403;
}
    
por 28.02.2016 / 20:24

Tags