Adicionando exceção à autenticação básica HTTP nginx com base em estar na rede local

1

Estou executando uma instalação de um webapp em execução em um servidor auto-hospedado que está na minha rede principal junto com todos os nossos PCs da empresa e alguns outros servidores.

Decidimos adicionar a autenticação básica HTTP como uma camada extra de segurança, mas queremos que as pessoas conectadas à rede local fiquem isentas disso.

Depois de tentar usar inicialmente as diretivas allow e deny , convenci um usuário do Stack Overflow a usar geo . Eu progredi, mas acertei um problema frustrante. Eu não consigo abrir uma exceção para o intervalo de endereços IP 192.168.1.1-192.168.1.255.

Para mostrar o que estou fazendo, adicionarei o snippet abaixo com intervalos de endereços e, depois, explico melhor.

geo $authentication {
   default "Authentication required";
   127.0.0.1 "off";
   192.168.1.0/24 "off";
   10.8.0.0/24 "off";
   78.432.xx.xx/0 "off";
   0.0.0.0/0 "off"
}

server {
    location / {
        auth_basic $authentication;
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

Eu tenho todos os intervalos de endereços IP comentados (além de 127.0.0.1) e é isso que acontece em cada cenário:

  • Se eu deixar todos os comentários, ao acessar a página da web, recebo as credenciais primeiro conforme o esperado
  • Se eu remover o comentário de 0.0.0.0/0 , posso conectar-me à página sem credenciais conforme o esperado.
  • Se eu descomentar o 78.432.xx.xx/0 (que é o meu endereço público real, redigido), posso acessar a página sem credenciais conforme o esperado.
  • Se eu descomentar 10.8.0.0/24 (esses são os endereços IP atribuídos aos usuários ao usar nossa VPN) enquanto estiver conectado à VPN e, portanto, tiver atribuído o endereço 10.8.0.5 , ao acessar a página da web eu recebo as credenciais solicitadas, não é o que eu esperaria.
  • Se eu remover o comentário de 192.168.1.0/24 , ao acessar a página da web, recebo uma solicitação de credenciais, o que não é o que eu esperaria. Observe que meu endereço IP local é 192.168.1.22 .

Eu posso ver ao acessar a página nos logs do nginx:

78.432.xx.xx - - [23/Jan/2018:13:58:57 +0000] "GET / HTTP/1.1" 401 195 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0"

Isso sugere que o nginx está detectando corretamente meu endereço IP externo e solicitando credenciais com base nisso, mas que a entrada para endereços IP internos não está tendo impacto. Isso é confirmado pelo fato de que, se eu inserir 192.168.1.102 no navegador em vez do nome de domínio, posso obter acesso sem credenciais necessárias.

A autenticação básica está funcionando e também o controle de IP, mas claramente estou fazendo algo errado, mas não consigo descobrir o que é.

A questão é, como eu digo ao nginx para pular a autenticação se ele detectar um endereço IP local?

    
por shaneoh 23.01.2018 / 13:02

0 respostas