Comment configurer l'authentification HTTP de base Jenkins par Nginx?

J'ai installé nginx et a fait l'hôte suivant:

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 [url=http://127.0.0.1:8080/;]http://127.0.0.1:8080/;[/url]
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;
}
}
}

Après cela, je peux accéder Jenkinks dans jenkins.mydomain.ru, Et pour cela, vous avez besoin d'un mot de passe. Mais je peux toujours avoir accès à Jenkinks dans
http://mydomain.ru:8080/
sans mot de passe. Comment puis-je interdire l'accès à Jenkinks dans
http://mydomain.ru:8080/
?
Invité:

Blanche

Confirmation de:

Il paraît que Jenkins Écouter du port 8080, alors nginx Ne contrôle pas - Vous devez aller au fichier de configuration jenkins et dis lui de l'écouter 127.0.0.1 (Seules les connexions locales), où je suppose qu'il est actuellement installé avant 0.0.0.0 (Ouvert pour tous)

Babette

Confirmation de:

Vous pouvez aussi courir jenkins Dans le conteneur à poussière et contrôler complètement les ports disponibles. J'ai connecté 2 Conteneur de quai jenkins, Dont l'un est nginx Pour inversion proxy. La machine hôte n'a pas eu accès au conteneur jenkins, Mais à travers l'URL transmise à nginx, qui l'a redirigé vers un conteneur isolé dans le même réseau de médecins.

Babette

Confirmation de:

Vous pouvez limiter l'adresse à laquelle Jenkins est liée à l'aide de

--httpListenAddress

(par exemple, localhost). Voir:
https://wiki.jenkins-ci.org/di ... nkins
et
https://serverfault.com/q/233951/130437
DANS Linux Il peut être personnalisé dans JAVA_ARGS dans

/etc/default/jenkins

fichier, mais cela peut différer en fonction de votre distribution Linux ou système d'exploitation.

Vous pouvez également envisager d'utiliser
https://plugins.jenkins.io/rev ... lugin
Plugin pour déléguer l'authentification au serveur proxy inverse que vous exécutez avant Jenkins.

Voici quelques notes supplémentaires:

Assurez-vous que les clients ne peuvent pas contourner le proxy inverse. S'ils peuvent envoyer des demandes directement Jenkins, Ensuite, le client malveillant peut envoyer un nom arbitraire du titre avec une valeur arbitraire, branlant ainsi la sécurité Jenkins.

Assurez-vous de configurer un serveur proxy inversé pour supprimer un en-tête que vous utilisez pour transmettre un nom d'utilisateur authentifié. Cela empêche la possibilité d'un client malveillant de définir le nom de l'en-tête avec une valeur arbitraire pouvant perturber la sécurité.

Si votre autorisation est simple (Par exemple, chaque utilisateur actuel reçoit un accès complet et tous les autres n'ont pas d'accès), Vous n'avez pas besoin d'utiliser ce plugin, car vous pouvez effectuer une authentification et une autorisation dans le serveur proxy inverse.

Cogner

[url=http://yourserver/whoAmI]http://yourserver/whoAmI[/url]

pour voir les en-têtes http réels que votre Apache Envoie Jenkins. Ceci est utile pour le dépannage.

Pour répondre aux questions, connectez-vous ou registre