Proxy NGinx, adicionando uma autenticação básica baseada no endereço IP

2

Estou construindo um sistema baseado no OpenVPN, no qual os clientes se conectam a um site, protegido pela autenticação básica (é assim, não há como alterar isso).

Eu gostaria de poder passar por um proxy nginx que acrescentaria para mim o cabeçalho de autenticação básica correto antes de acessar o site. Dessa forma, com base no endereço IP usado pelo cliente (proveniente da configuração do OpenVPN), eu recuperaria o usuário / senha em um banco de dados e forjaria o cabeçalho de acordo. Assim, o usuário não precisa inserir nenhum login / senha.

A injeção do cabeçalho de autenticação básica é fácil com:

location / {
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_pass http://6.6.6.6:80;
   proxy_set_header Authorization "Basic a2luZzppc25ha2Vk";
}

Onde "a2luZzppc25ha2Vk" é, obviamente, a base64 para este login: senha.

Então, agora eu preciso substituir a2luZzppc25ha2Vk por um valor encontrado em um banco de dados, de acordo com o $ remote_addr

    
por Olivier D. 02.11.2011 / 16:50

1 resposta

1

Você poderia despejar seu banco de dados para configuração de uma forma:

geo $auth_base64 {
    <remote_addr1>/32   <base64_1>;
    <remote_addr2>/32   <base64_2>;
    <remote_addrN>/32   <base64_N>;
    default             <base64_for_default_address>
}

Claro, sem "< >".

Em seguida, inclua essa configuração na seção http {}. Você poderia fazer um simples cronjob (dump, test, reload).

Então, a variável $ auth_base64, então, pode ser usada na diretiva proxy_set_header:

proxy_set_header Authorization "Basic $auth_base64";

Ou você pode usar o módulo de terceiros: link que pode avaliar a resposta de backend em variáveis. Não testado por mim mesmo. Alguns problemas com versões modernas do nginx podem ocorrer.

    
por 07.11.2011 / 09:27