Sécuriser l’accès à jenkins

Cet article est assez ancien, malgré toute l'attention que j' apporte à mes contenus il est possible que celui-ci ne soit plus d'actualité.
N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.

Cet article fait suite à l’article suivant : Mise en place d’une plateforme d’intégration continue ( partie 2)

Une fois jenkins installé, celui-ci est disponible pour tout le monde et par défaut via l’ip de votre serveur sur le port 8080
En tapant http://ip-de-votre-serveur:8080 , n’importe qui visualisera donc les projets jenkins.

Pour sécuriser cela, nous allons mettre en place un reverse-proxy apache, qui communiquera avec le serveur jenkins.
Nous pourrons ainsi mettre en place une authentification basique htaccess / htpassword pour limiter les accès.
( Cela nécessite donc l’installation d’apache au préalable)

Dans mon exemple, je souhaite que le sous-domaine http://ci.example.com renvoie vers jenkins.
(Il faut donc au préalable faire pointer ce sous-domaine sur votre serveur )

Configuration du proxy

Pour commencer il faut activer le mode proxy et proxy_http d’apache, en saisissant les commandes suivantes

sudo a2enmod proxy
sudo a2enmod proxy_http

Passons ensuite à la création du fichier de notre vhost dans /etc/apache2/sites-availables/ créons un fichier jenkins.conf
Dans lequel nous allons mettre le contenu suivant

<VirtualHost *:80>
ServerName ci.example.com
ProxyPass        /   http://localhost:8080/ nocanon
ProxyPassReverse /   http://localhost:8080/
ProxyPreserveHost on
AllowEncodedSlashes NoDecode
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>

activer le vhost

sudo a2ensite jenkins

Pour finir redémarrer apache

sudo service apache2 restart

Testez l’url http://ci.example.com dans votre navigateur, et celle-ci doit bien renvoyer vers votre serveur jenkins.

 

Sécurisation des accès.

Notre vhost est à présent en place, mais jenkins est toujours accessible sans restriction via les urls : http://ci.example.com et http://ip-de-votre-serveur:8080

Nous allons donc mettre en place une authentification avant l’affichage du domaine ci.example.com

Notre fichier htacces sera situé dans /home
Créons un utilisateur « jenkins » avec le mot de passe souhaité

sudo htpasswd -c /home/.htpasswd jenkins

Puis il faut mettre à jour le fichier de configuration apache pour prendre en compte cette restriction.

ServerName ci.example.com
ProxyPass        /   http://localhost:8080/ nocanon
ProxyPassReverse /   http://localhost:8080/
ProxyPreserveHost on
AllowEncodedSlashes NoDecode
<Proxy *>
AuthType basic
AuthName "jenkins"
AuthBasicProvider file
AuthUserFile "/home/.htpasswd"
Require valid-user
</Proxy>
</VirtualHost>

Recharger la configuration d’apache pour prendre en compte ces nouveaux paramètres.

sudo service apache2 reload

Un mot de passe vous sera à présent demandé pour accéder à l’adresse http://ci.example.com

Nous allons maintenant limiter les accès à jenkins uniquement depuis le localhost pour ne plus permettre d’y accéder depuis l’adresse http://ip-de-votre-serveur:8080
Pour cela editer le fichier /etc/default/jenkins/

sudo vim /etc/default/jenkins

Dans la dernière ligne JENKINS_ARGS rajouter l’option suivante : – -httpListenAddress=127.0.0.1
Ce qui vous donnera par exemple la configuration suivante :

JENKINS_ARGS="--webroot=$JENKINS_RUN/war --httpPort=$HTTP_PORT --ajp13Port=$AJP_PORT --httpListenAddress=127.0.0.1"

Redémarrer jenkins

sudo service jenkins restart

Vous pouvez à présent constater que jenkins n’est plus accessible depuis l’adresse  http://ip-de-votre-serveur:8080 , mais uniquement depuis le sous-domaine.

L’accès à jenkins est donc uniquement possible depuis le sous-domaine précédemment créé et protégé par un mot de passe.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *