<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Traefik on AdRiLiNuX's web site</title><link>https://www.reslinger.net/categories/traefik/</link><description>Recent content in Traefik on AdRiLiNuX's web site</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><lastBuildDate>Mon, 30 Sep 2019 18:56:44 +0200</lastBuildDate><atom:link href="https://www.reslinger.net/categories/traefik/index.xml" rel="self" type="application/rss+xml"/><item><title>Déploiement de Traefik 2.0 sur docker swarm</title><link>https://www.reslinger.net/2019/09/d%C3%A9ploiement-de-traefik-2.0-sur-docker-swarm/</link><pubDate>Mon, 30 Sep 2019 18:56:44 +0200</pubDate><guid>https://www.reslinger.net/2019/09/d%C3%A9ploiement-de-traefik-2.0-sur-docker-swarm/</guid><description>&lt;p>Traefik 2.0 est sortie en version finale il y a quelques jours et j&amp;rsquo;ai donc effectué la migration de ma configuration. Je savais que la configuration avait subie de gros changement, mais j&amp;rsquo;ai quand même rencontrer quelques difficultées sur les points avancés.&lt;/p>
&lt;p>Un trucs que je n&amp;rsquo;avais pas compris tout de suite, c&amp;rsquo;est qu&amp;rsquo;on peut utiliser les middleware à différents endroits, ce qui permet de ne pas dupliquer du code pour chaque service déployer. Et ça c&amp;rsquo;est super cool.&lt;/p>
&lt;p>Bien que l&amp;rsquo;on puisse faire des appels à des middlewares déclarés dans d&amp;rsquo;autres providers, je n&amp;rsquo;ai pas réussi à utiliser le provider file depuis le provider dynamique docker (un nouveau middlerware vide était créé et surchargeait celui que j&amp;rsquo;avais défini en fichier).&lt;/p>
&lt;p>Bien, déployons et commençons donc par les middlewares réutilisables. Étant donné qu&amp;rsquo;il ne servent à rien si traefik n&amp;rsquo;est pas présent, je les déclare donc dans le docker-compose de traefik :&lt;/p>
&lt;p>Le premier middleware est utile pour la redirection http vers https&lt;/p>
&lt;pre>&lt;code> - &amp;quot;traefik.http.middlewares.https_redirect.redirectscheme.scheme=https&amp;quot;
&lt;/code>&lt;/pre>
&lt;p>Le second middleware est une authentification basique, utile pour une petite infrastructure / équipe pour sécuriser rapidement les sites déployé&lt;/p>
&lt;pre>&lt;code> - &amp;quot;traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$kr4VIpmn$$LDCgCQOlcqlOovSTa/0SD1&amp;quot;
&lt;/code>&lt;/pre>
&lt;p>Le troisième est la compression, avec ses avantages et ses inconvénients ( à utiliser au besoin )&lt;/p>
&lt;pre>&lt;code> - &amp;quot;traefik.http.middlewares.compress.compress=true&amp;quot;
&lt;/code>&lt;/pre>
&lt;p>Et pour le dernier du jour, on peut définir un groupe d&amp;rsquo;hentête de sécurité ( à adapter en fonction des besions )&lt;/p>
&lt;pre>&lt;code> - &amp;quot;traefik.http.middlewares.security-headers.headers.browserXssFilter=true&amp;quot;
- &amp;quot;traefik.http.middlewares.security-headers.headers.contentTypeNosniff=true&amp;quot;
- &amp;quot;traefik.http.middlewares.security-headers.headers.forceSTSHeader=true&amp;quot;
- &amp;quot;traefik.http.middlewares.security-headers.headers.stsIncludeSubdomains=true&amp;quot;
- &amp;quot;traefik.http.middlewares.security-headers.headers.stsPreload=true&amp;quot;
- &amp;quot;traefik.http.middlewares.security-headers.headers.stsSeconds=15768000&amp;quot;
- &amp;quot;traefik.http.middlewares.security-headers.headers.frameDeny=true&amp;quot;
- &amp;quot;traefik.http.middlewares.security-headers.headers.sslRedirect=true&amp;quot;
&lt;/code>&lt;/pre>
&lt;p>Avant de passer aux services, nous pouvons aussi personnaliser la configuration TLS via le provider file en créant un fichier avec, par exemple, le contenu suivant :&lt;/p>
&lt;pre>&lt;code> tls:
options:
default:
sniStrict: true
minVersion: VersionTLS12
cipherSuites:
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
&lt;/code>&lt;/pre>
&lt;p>Nous pouvons maintenant déployer des services en utilisant nos middlewares. Occupons nous du dashboard de traefik, après tout nous sommes dans le docker-compose de traefik.&lt;/p>
&lt;p>D&amp;rsquo;abord on active le service et on indique sur quel réseau on écoute&lt;/p>
&lt;pre>&lt;code> - &amp;quot;traefik.enable=true&amp;quot;
- &amp;quot;traefik.docker.network=traefik&amp;quot;
&lt;/code>&lt;/pre>
&lt;p>Après on crée une entrée pour le protocole http en utilisant nos midlewares (un jour je trouverai le moyen de faire un vhost http générique qui redirigera sur https sans avoir à un définir pour chaque service )&lt;/p>
&lt;pre>&lt;code> - &amp;quot;traefik.http.routers.traefik-insecure.entrypoints=http&amp;quot;
- &amp;quot;traefik.http.routers.traefik-insecure.rule=Host(`traefik.example.com`)&amp;quot;
- &amp;quot;traefik.http.routers.traefik-insecure.middlewares=https_redirect,compress,security-headers&amp;quot;
&lt;/code>&lt;/pre>
&lt;p>Enfin on crée une entrée pour le protocole https&lt;/p>
&lt;pre>&lt;code> - &amp;quot;traefik.http.routers.traefik.entrypoints=https&amp;quot;
- &amp;quot;traefik.http.routers.traefik.tls=true&amp;quot;
- &amp;quot;traefik.http.routers.boot.tls.options=default&amp;quot;
- &amp;quot;traefik.http.routers.traefik.rule=Host(`traefik.example.com`)&amp;quot;
- &amp;quot;traefik.http.services.traefik.loadbalancer.server.port=8080&amp;quot;
- &amp;quot;traefik.http.routers.traefik.middlewares=auth,compress,security-headers&amp;quot;
&lt;/code>&lt;/pre>
&lt;p>Une fois le tout déployé, on peut aller tester le résultat sur &lt;a href="https://www.ssllabs.com/ssltest/">ssllabs&lt;/a> et &lt;a href="https://securityheaders.com/">securityheaders&lt;/a>.&lt;/p>
&lt;p>Voici mon résultat sur ssllabs:&lt;/p>
&lt;p>&lt;img src="ssllabs-result.png" alt="Résultat SSLLabs">&lt;/p></description></item></channel></rss>