Em Nginx, bloqueia o usuário com base no valor do cabeçalho X

3

Eu tenho 6 servidores Nginx por trás do balanceador de carga. É claro que, se eu tentar "negar" com base no endereço IP, ele não funcionará como os servidores de aplicativos. Basta ver o IP do balanceador de carga.

No entanto, aprendi sobre o módulo Real IP e tenho isso ativado da seguinte maneira:

set_real_ip_from   0.0.0.0/0;
real_ip_header     X-Real-IP;

Então, agora que eu tenho o cabeçalho X-Real_IP configurado corretamente, como eu posso configurar o Nginx para usar o bloqueio de determinados usuários cujo valor "X-Real-IP" é igual a um conjunto de IPs?

    
por messick 17.02.2012 / 21:06

2 respostas

2

Isso é fácil. O módulo "geo" do Nginx permite definir uma variável com valor dependendo do endereço IP do cliente:

geo $ban_ip {
  default 0;
  10.1.0.0/24 1;
};
A diretiva

geo deve estar em http level (por exemplo, fora de server ). Existe uma maneira conveniente de incluir grandes bancos de dados de IP via include ou ranges , consulte a documentação

Portanto, supondo que você tenha essa variável, você pode retornar os códigos de status desejados, por exemplo, 403 ou 404 (em server level ou em location ):

if ($ban_ip) {
  return 403;
}

Se você quiser abandonar a conexão silenciosamente, use

if ($ban_ip) {
  return 444;
}

444 é um código de status não padrão usado internamente para instruir o Nginx a descartar a conexão. (assim, um cliente não o vê)

    
por 20.02.2012 / 12:59
0

Há um módulo de terceiros Firewall de aplicativos para o nginx chamado naxsi , acho que ele poderia resolver o problema.

    
por 20.02.2012 / 11:03