Como configurar a autenticação HTTP básica do Jenkins com o Nginx?

1

Eu instalei o nginx e fiz o seguinte host:

server {
  listen          80;       # Listen on port 80 for IPv4 requests

  server_name     jenkins.mydomain.ru;
  root            /var/lib/jenkins;

  access_log      /var/log/nginx/jenkins_access.log;
  error_log       /var/log/nginx/jenkins_error.log;

  location / {
      auth_basic            "Restricted";
      auth_basic_user_file  /etc/nginx/passwd/htpasswd;

      proxy_pass         http://127.0.0.1:8080/;
      proxy_redirect     off;

      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_max_temp_file_size 0;

      client_max_body_size       10m;
      client_body_buffer_size    128k;

      proxy_connect_timeout      90;
      proxy_send_timeout         90;
      proxy_read_timeout         90;

      proxy_buffer_size          4k;
      proxy_buffers              4 32k;
      proxy_busy_buffers_size    64k;
      proxy_temp_file_write_size 64k;

      # Optional configuration to detect and redirect iPhones
      if ($http_user_agent ~* '(iPhone|iPod)') {
          rewrite ^/$ /view/iphone/ redirect;
      }
  }
}

Depois disso, posso acessar Jenkinks em jenkins.mydomain.ru e é necessário senha. Mas ainda posso acessar o Jenkinks no link sem nenhuma senha. Como posso proibir o acesso a Jenkinks no link ?

    
por Dmitro 14.10.2011 / 17:10

3 respostas

3

O Jenkins parece estar escutando na porta 8080, então o nginx não tem controle sobre ele - você precisa ir ao arquivo de configuração do jenkins e dizer para ele ouvir no 127.0.0.1 (conexões locais apenas), onde eu acho que está atualmente definido como 0.0.0.0 (aberto para todos)

    
por 14.10.2011 / 21:25
0

Você pode restringir a qual endereço o Jenkins se vincula usando --httpListenAddress (como localhost). Veja: Iniciando e acessando o Jenkins e Como posso fazer com que Jenkins pare de ouvir conexões remotas?

No Linux, isso pode ser configurado em JAVA_ARGS no arquivo /etc/default/jenkins , mas pode variar dependendo da sua distribuição Linux ou do sistema operacional.

Você também pode considerar o uso do plug-in Auth Proxy Reverso para delegar a autenticação ao proxy reverso que você corra na frente de Jenkins.

Aqui estão algumas notas extras:

  • Make sure that clients cannot bypass the reverse proxy. If they can send requests directly to Jenkins, then a malicious client can send in arbitrary header name with arbitrary value, thus compromising the security of Jenkins
  • Make sure you configure the reverse proxy to erase the header that you use to pass the authenticated user name. This prevents malicious client from setting the header name with arbitrary value, which would ruin the security.
  • If your authorisation need is simple (for example, every valid user gets full access and everyone else gets no access), then you need not use this plugin, as you can do both authentication and authorisation in the reverse proxy.
  • Hit http://yourserver/whoAmI to see the actual HTTP headers your Apache is sending to Jenkins. This is useful for trouble-shooting.
    
por 20.05.2017 / 15:10
0

Você também pode executar jenkins em um contêiner docker e ter controle total sobre as portas disponíveis. Eu conectei 2 containers docker jenkins sendo um nginx para inverter o proxy. a máquina host não tinha acesso ao contêiner do jenkins, mas por meio de um url passado para o nginx que o encaminhava para o contêiner isolado na mesma rede de estivadores.

    
por 12.07.2017 / 07:20