Como fornecer acesso externo apenas aos projetos Git (clone / pull / push) de uma implantação interna do GitLab

2

Nós configuramos um servidor GitLab (GitLab 7.0 Community Edition).

Ele está em funcionamento e nossos colegas podem usá-lo na LAN (o endereço IP e o host são visíveis apenas na LAN).

Alguns dos projetos hospedados nesta instância do GitLab devem ser "compartilhados" com usuários externos (que não fazem parte de nossa empresa). Gostaríamos de deixá-los acessar os repositórios do Git para poder clonar, puxar e empurrar.

O servidor do GitLab permanecerá na LAN. Mas podemos configurar um servidor em nossa DMZ que poderia fazer proxy reverso (ou algumas outras alternativas) no servidor GitLab. Gostaríamos, no entanto, que apenas as URLs ".git" fossem acessadas via HTTPS (portanto, não dê acesso ao GitLab WUI (interface de usuário da web)).

Como podemos configurar o "proxy reverso" na DMZ para fornecer acesso a usuários externos (na internet) aos nossos repositórios Git internos hospedados no GitLab?

Desejos:

  • Apenas https://*/*.git/* URLs devem ser permitidos externamente;
  • Autenticação básica HTTP no proxy reverso seria um plus;
  • Mas o mecanismo de autenticação do GitLab por HTTPS deve permanecer;
  • O usuário local em nossa LAN ainda deve poder usar o SSH para operações do Git;
  • A interface da Web do GitLab não deve ser acessível externamente;

Nota: já temos um servidor na nossa DMZ com o NGINX em execução. Se pudermos usar essa "pilha de software" para fazer o proxy reverso, isso seria ótimo.

Nota 2: esta pergunta já tinha uma recompensa de 100 que expirou e os pontos foram perdidos. Se eu obtiver uma resposta que solucione meu problema, vou abrir uma recompensa e recompensar a resposta com ela.

    
por Huygens 23.07.2014 / 11:07

1 resposta

1

Você tentou a solução ingênua óbvia?

server {

 [...ssl and servername stuff...]  

 location / {
    # fake the hostname to the hostname that gitlab expects
    #
    proxy_set_header Host hostname-for-gitlabhost;             
    proxy_pass          https://internal-gitlab-instance;
    proxy_read_timeout  90;
 }  
}

Além disso, você pode definir o local para algo que permita apenas o

https://...../*.git
URLs

Isso deve funcionar:

Em vez de

location /
acima, algo como:
location ~ ^/(.*\.git) {
   proxy_set_header Host hostname-for-gitlabhost;             
   proxy_pass          https://internal-gitlab-instance/$1;
   proxy_read_timeout  90;
}

Isso captura o request-uri e o adiciona à chamada de proxy na declaração de localização.

Eu não tenho certeza se isso funciona, apenas digitei do topo da minha cabeça.

    
por 09.03.2015 / 13:12